(Dla uproszczenia) Mam master
gałąź i dev
w moim repozytorium Git. Chcę mieć pewność, że master
oddział zawsze działa, więc cała praca, którą wykonuję, powinna znajdować się wdev
oddziale.
Jednak kiedy łączę swoje zmiany z --no-ff
scaleniem, zwykle zostaję w master
oddziale i po prostu kontynuuję w nim pracę (ponieważ zapominam o przejściu do kasy dev
).
Czy mogę utworzyć regułę dla master
gałęzi, która mówi, że nie mogę wykonywać zatwierdzeń i szybkiego łączenia do przodu, ale tylko --no-ff
scalania z innej gałęzi?
Musi to działać w przypadku prywatnych repozytoriów hostowanych (a więc nie GitHub i BitBucket).
git
merge
fast-forward
Rasmus Bækgaard
źródło
źródło
git commit
tworzy nowe, nie ma przewijania do przodu. Wygląda na to, że chcesz po prostu zabronić zwykłych zatwierdzeń, gdy bieżąca gałąź jestmaster
, w takim przypadku, zagląda dopre-commit
zaczepu.Odpowiedzi:
Tak to mozliwe. Musisz utworzyć punkt zaczepienia przed zatwierdzeniem, który odrzuca zatwierdzenia do gałęzi głównej. Git nie wywołuje przechwytywania przed zatwierdzeniem, kiedy wywołujesz polecenie merge , więc ten hook będzie odrzucał tylko zwykłe zatwierdzenia.
Utwórz plik .git / hooks / pre-commit z następującą zawartością:
Spraw, aby był wykonywalny (niewymagany w systemie Windows ):
Aby wyłączyć szybkie scalanie do przodu , musisz również dodać następującą opcję do pliku .git / config :
Jeśli chcesz również chronić gałąź główną na swoim pilocie, sprawdź odpowiedź: Jak ograniczyć dostęp do gałęzi głównej na git
źródło
master
odgałęzienia w haku przed wypychaniem. np .: gist.github.com/aaronhoffman/ffbfd36928f9336be2436cffe39feaecW tym celu możesz użyć narzędzia pre-commit . Ma wbudowany
no-commit-to-branch
zaczepienia, którego można użyć do zapobiegania zatwierdzeniom do jednej lub więcej gałęzi.Ustawiać
Podstawowy proces konfiguracji to:
.pre-commit-config.yaml
plik w katalogu głównym projektu (zobacz poniżej pierwszą wersję roboczą)pre-commit install
.Podstawowa konfiguracja do ochrony gałęzi
Oto podstawowa konfiguracja, która zawiera tylko
no-commit-to-branch
hook:repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.3.0 hooks: - id: no-commit-to-branch args: ['--branch', 'master']
Jeśli chcesz chronić wiele gałęzi, możesz użyć wielu
--branch
argumentów na liście argumentów:repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.3.0 hooks: - id: no-commit-to-branch args: ['--branch', 'master', '--branch', 'staging']
Czy to nie przesada?
Wstępne zatwierdzenie ma wiele innych wbudowanych punktów zaczepienia i dużą kolekcję utworzonych przez społeczność punktów zaczepienia, które zmienią sposób czyszczenia i sprawdzania poprawności zatwierdzeń. Powodem, dla którego o tym wspominam, jest to, że chociaż to narzędzie może być przesadą, ponieważ po prostu zapobiega zatwierdzeniom w chronionej gałęzi, ma wiele innych funkcji, które sprawiają, że jest atrakcyjnym i prostym dodatkiem do każdego projektu git.
źródło
Sensowne może być zainstalowanie go globalnie za pośrednictwem
i przenosząc ten
pre-commit
plik do tego kataloguźródło
master
naProduction
- czy można zrobić wyjątki?