2012-11-06 25 views
21

È possibile impostare i permessi di ramo usando git bash? Mi piacerebbe avere permessi molto più rigidi sul ramo principale, in modo che alcune persone possano usare il ramo di sviluppo e impegnarsi a farlo e non possono cambiare il ramo principale da soli.permessi git branch

Se è possibile, come dovrei provare a farlo?

risposta

21

Git non dispone di autorizzazioni specifiche per ramo. È possibile rendere l'intero repository read only alle persone o creare un repository privato e uno pubblico e solo spingere il ramo di sviluppo sul pubblico, mantenendo il master solo nel proprio repository privato.

Edit: Per autorizzazioni specifiche di filiale, è necessario un livello di autorizzazione server-side come Gitolite - ovviamente, questo richiede di essere gestire il proprio server di Git.

+4

questo non è vero nel 2016 più: P ci sono restrizioni filiali in github –

+0

https://help.github.com/articles/about-branch-restrictions/<--- dox –

+9

Sento il bisogno di sottolineare che la domanda riguardava il GIT, non il GitHub, che è una cosa completamente diversa. :) –

4

Uno scenario tipico in cui ciò potrebbe essere necessario è limitare l'accesso ai rami ufficiali (o di rilascio) a un sottogruppo di persone in una squadra. Una buona strategia qui potrebbe essere quella di avere due repository - un repository primario che è più strettamente controllato dall'accesso, e un altro repository a cui tutti i membri del team hanno accesso e che viene utilizzato per impostare i rami di lavoro. Esegui il pull dai rami di lavoro al repository principale, se necessario. Ovviamente, puoi modificare questo aspetto per adattarlo alla struttura e alle esigenze del tuo team.

Questo può funzionare particolarmente bene con servizi come github.

1

Se gli sviluppatori squadra è un gruppo civile che ha solo bisogno di un richiamo amichevole, è possibile rifiutare una spinta utilizzando un pre-receive server-side hook:

#!/bin/bash 

# Extract the user email (%ae) from the last commit (author email) 
USER_EMAIL=$(git log -1 --format=format:%ae HEAD) 

# Looping through all the pushed branches 
while read oldrev newrev refname 
do 
    branch=$(git rev-parse --symbolic --abbrev-ref $refname) 
    if [ "master" == "$branch" ] && [ "[email protected]_company.com" != $USER_EMAIL ]; then 
     echo "Naughty naughty!" 
     exit 1 # fail, i.e. reject push 
    fi 
done 

Anche se gli utenti possono facilmente falsificare il loro indirizzo git-mail , Continuerei a leggere solo il file hook stesso.

Refs:

  1. How can I get push user information in server side git hook?
  2. Writing a git post-receive hook to deal with a specific branch