2016-11-07 96 views
14

(Dla uproszczenia) Mam gałąź master i dev w moim Git-repo. Chcę się upewnić, że gałąź master zawsze działa, więc cała praca, którą wykonuję, powinna znajdować się w gałęzi dev.Git: Zapobiegaj zatwierdzeniom w gałęzi głównej

Jednak, kiedy mogę połączyć moje zmiany wz --no-ff seryjnej, staram się pozostać w master gałęzi i po prostu kontynuować pracę w nim (bo zapomnę do kasy moje dev oddział).

Czy mogę podać regułę dla gałęzi master, która stwierdza, że ​​nie mogę wykonywać zatwierdzeń i szybkiego przewijania do przodu, ale tylko --no-ff scala z innej gałęzi?

To musi działać w przypadku prywatnych hostowanych repozytoriów (np. GitHub i BitBucket).

+3

"fast-forward zobowiązuje" nie jest rzeczą. Commits to po prostu commits, 'git commit' tworzy nowy, nie ma szybkich przekazów. Wygląda na to, że chcesz po prostu zabronić zwykłych zatwierdzeń, gdy bieżąca gałąź to 'master', w takim przypadku zajrzyj do haka' pre-commit'. – torek

+0

Możliwy duplikat [Jak ograniczyć dostęp do gałęzi głównej w git] (http://stackoverflow.com/questions/38864405/how-to-restrict-access-to-master-branch-on-git) – 1615903

Odpowiedz

29

Tak, jest to możliwe. Musisz utworzyć hak przed zatwierdzeniem, który odrzuca zatwierdzenia do gałęzi głównej. Git nie wywołuje haka przed zatwierdzeniem, gdy wywołujesz polecenie scalania, więc ten hak będzie odrzucał tylko zwykłe zatwierdzenia.

  1. Przejdź do swojego repozytorium.
  2. utworzyć plik .git/haki/pre-commit o następującej treści:

    #!/bin/sh 
    
    branch="$(git rev-parse --abbrev-ref HEAD)" 
    
    if [ "$branch" = "master" ]; then 
        echo "You can't commit directly to master branch" 
        exit 1 
    fi 
    
  3. Zrób to plik wykonywalny (nie jest wymagany na Okna):

    $ chmod +x .git/hooks/pre-commit 
    

Aby wyłączyć połączenie fast-forwad, musisz również dodać następującą opcję do swojego .git/config file:

[branch "master"] 
    mergeoptions = --no-ff 

Jeśli chcesz chronić także główny oddział na pilocie, sprawdź tę odpowiedź: How to restrict access to master branch on git

+0

To wygląda dokładnie jak to, czego potrzebuję - czy działa to również w Windowsie? –

+2

@ RasmusBækgaard tak to zrobi: skrypt bash dla haka zostanie zinterpretowany przez boks Git zawarty w Git dla Windows. (Po prostu nie potrzebujesz kroku chmod) – VonC

+0

uwaga: możesz również uniemożliwić sobie popychanie do odległej gałęzi 'master' w haku pre-push. ex: https://gist.github.com/aaronhoffman/ffbfd36928f9336be2436cffe39feaec –