2012-11-06 6 views
21

Ist es möglich, Zweig Berechtigungen mit git Bash setzen? Ich hätte gerne viel strengere Berechtigungen für den Master-Zweig, so dass einige Leute den Entwicklungszweig verwenden und sich dazu verpflichten können und den Hauptzweig selbst nicht ändern können.Git Zweig Berechtigungen

Wenn es möglich ist, wie würde ich versuchen, es zu tun?

Antwort

21

Git hat keine branchenspezifischen Berechtigungen. Sie können entweder das gesamte Repository read only für die Personen erstellen oder ein privates und ein öffentliches Repository erstellen und den Entwicklungszweig nur für die Öffentlichkeit aktivieren, während der Master nur in Ihrem privaten Repository verbleibt.

Edit: Für branchenspezifische Berechtigungen, die Sie benötigen eine serverseitige Berechtigungsschicht wie Gitolite - offensichtlich, dies erfordert, dass Sie Ihren eigenen Git-Server zu verwalten.

+4

dies mehr im Jahr 2016 nicht erfüllt ist: P gibt es Zweig Einschränkungen in Github –

+0

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

+9

Ich habe das Bedürfnis zu betonen, dass die Frage von GIT war, nicht github, was eine ganz andere Sache ist. :) –

4

Ein typisches Szenario, in dem dies erforderlich sein könnte, besteht darin, den Zugriff auf offizielle Zweigstellen (oder Zweigstellen) auf eine Untergruppe von Personen in einem Team zu beschränken. Eine gute Strategie könnte hier sein, zwei Repos zu haben - ein primäres Repo, das enger zugreifbar ist, und ein anderes Repo, auf das jeder im Team Zugriff hat und mit dem Arbeitszweige eingerichtet werden. Und ziehen Sie nach Bedarf von den Arbeitszweigen zum Haupt-Repo. Natürlich können Sie dies an Ihre Teamstruktur und Bedürfnisse anpassen.

Dies kann besonders gut mit Diensten wie GitHub funktionieren.

1

Wenn Ihr Entwickler-Team ein zivilisierter Haufen ist, die nur eine freundliche Erinnerung, dann können Sie einen Push ablehnen mit einem 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 

Obwohl Benutzer können leicht fälschen ihre git E-Mail-Adresse Ich würde trotzdem die Hook-Datei selbst nur lesen lassen.

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