2012-11-06 15 views
21

Czy można ustawić uprawnienia gałęzi przy użyciu git bash? Chciałbym mieć bardziej surowe uprawnienia w gałęzi głównej, aby niektóre osoby mogły korzystać z gałęzi deweloperskiej i zobowiązać się do niej i nie mogą same zmieniać głównej gałęzi.git branch permissions

Jeśli to możliwe, jak mam postąpić, próbując to zrobić?

Odpowiedz

21

Git nie ma uprawnień specyficznych dla gałęzi. Możesz albo utworzyć całe repozytorium read only dla ludzi, albo utworzyć jedno prywatne i jedno publiczne repozytorium i tylko popchnąć gałąź rozwojową do publicznej wiadomości, jednocześnie zachowując wzorzec tylko w prywatnym repozytorium.

Edit: przypadku szczególnych uprawnieniach branży, trzeba po stronie serwera warstwę autoryzacji jak Gitolite - Oczywiście, to wymaga, aby być zarządzający własny serwer Git.

+4

nie jest to prawdą w 2016 już: P istnieją ograniczenia oddział w github –

+0

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

+9

Czuję potrzebę podkreślenia, że ​​pytanie dotyczyło GIT, a nie github, co jest zupełnie inną rzeczą. :) –

4

Typowym scenariuszem, w którym może to być konieczne, jest ograniczenie dostępu do oficjalnych (lub uwolnionych) oddziałów do podzbioru osób w zespole. Dobrą strategią może być tutaj posiadanie dwóch repozytoriów - podstawowego repo, które jest ściślej kontrolowane, oraz kolejnego repo, do którego dostęp mają wszyscy członkowie zespołu i który służy do konfigurowania oddziałów roboczych. I wykonaj wyciąg z gałęzi roboczych do głównego repo, w razie potrzeby. Oczywiście możesz dostosować to do swojej struktury i potrzeb.

Może to działać szczególnie dobrze w przypadku usług takich jak github.

1

Jeśli twórcy zespołu jest cywilizowany grono, którzy potrzebują tylko przyjazne przypomnienie, można odrzucić push przy użyciu 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 

chociaż użytkownicy mogą łatwo fałszywego adresu email git , Nadal robiłbym sam plik haka tylko do odczytu.

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
Powiązane problemy