2012-03-21 12 views
7

Jak mogę powiedzieć git, że chociaż chcę zezwolić na "git fetch" w niektórych gałęziach, to nie chcę pozwolić na "git push" w tych gałęziach.Jak utworzyć odniesienie do gałęzi odgałęzień git, aby było tylko do odczytu?

Innymi słowy, mam kilka oddziałów, które odzwierciedlają "bieżącą pracę" i chcę je przekazać do mojego repozytorium upstream. Ale mam inne gałęzie (w tym master), które zamierzam odzwierciedlać "inną pracę" w kontekście lokalnego repozytorium i nie chcę stamtąd wchodzić na te gałęzie.

To jest moje zdalne repozytorium, w innych kontekstach chcę być w stanie wcisnąć do wszystkich jego oddziałów. Ale nie z tej konkretnej instancji lokalnej.

Myślę, że to jest możliwe, ponieważ git remote show origin powiedział mi czasami, że mam gałęzie skonfigurowane dla "git pull", ale nie dla "git push". Ale nie rozumiem plików konfiguracyjnych wystarczająco dobrze, aby stworzyć ten efekt ręcznie, i nie rozumiem języka wiersza poleceń Git na tyle dobrze, aby to zrobić tam, albo.

Teraz, co mogę zrobić, to upewnić się, że moja lokalna kopia jest przestarzała dla oddziałów upstream, które chcę pozostać nieskazitelne. (Ponadto, jawnie określając gałąź odbierającą w moim wierszu poleceń git push - określając, że chcę tylko wprowadzić do zdalnej instancji odpowiadającej lokalnie wyrejestrowanemu oddziałowi - zapobiega przepychaniu się do niepożądanych gałęzi, ale chciałbym wyeliminować tę komplikację .)

+1

możliwy duplikat [Zabroń zdalnego przekazywania do głównego oddziału w git] (http://stackoverflow.com/questions/2045329/prohibit-remote-pushing-to-the-master-branch-in-git) – ralphtheninja

+0

To wygląda jak rezolucja, która miała ustawić receive.denycurrentbranch w repozytorium odbierającym. Ale zamiast tego szukam kontroli nad repozytorium przesyłania. – rdm

+0

Możesz ustawić 'push.default = upstream', a następnie' git push' bez dodatkowych argumentów popchnie lokalnie sprawdzoną gałąź. To wygląda na domyślne zachowanie w następnej wersji 'git'. – Borealid

Odpowiedz

0

Podobny do tego, co Borealid powiedział w komentarzach, w swojej lokalnej kopii powinieneś ustawić git config push.default upstream, a następnie dodatkowo upewnić się, że te gałęzie, które nie chcesz móc naciskać, aby nie mieć odgałęzionego oddziału przydzielony. Jest polecenie git branch --set-upstream, ale to nie pozwoli ci ustawić pustej konfiguracji w celu jej usunięcia, więc będziesz musiał ręcznie edytować plik .git/config i usunąć linię merge = refs/heads/* z sekcji odpowiednich gałęzi.

0

Właściwie wygląda na to, że push.default = current zrobi to, co chcę.

To nie jest dokładnie to, o co prosiłem, ale jest "wystarczająco dobre". I ma tę zaletę, że jest prosty.

Prostota to zaleta - sprawia, że ​​zrozumienie i korzystanie z systemu jest proste.

To również ściśle naśladuje zachowanie, które myślę, że widzę z git pull.

+0

Cytowanie z 'git help config': "tracking - wycofany synonim dla upstream.". – Borealid

+0

OK, w której wersji zaczyna się ten proces? (I po co łamać istniejącą dokumentację i tak dalej?) – rdm

Powiązane problemy