Potrzebuję pomocy ze skryptem Bash, który automatycznie doda nazwę gałęzi gita jako hash w komunikatach o zmianach.
git
bash
git-branch
Tomer Lichtash
źródło
źródło
git branch | grep ...
do uzyskania bieżącej gałęzi są złym sposobem na zrobienie tego. Rozważ albogit symbolic-ref -q HEAD
(jak pokazano w tej odpowiedzi ) albogit rev-parse --abbrev-ref HEAD
. Polecenie symbolic-ref nie powiedzie się, jeśli jesteś na odłączonym HEAD, więc jeśli chcesz wykryć ten przypadek, użyj go. W przeciwnym razie metoda rev-parse --abbrev-ref jest prawdopodobnie najlepsza.Odpowiedzi:
Użyj
prepare-commit-msg
lubcommit-msg
githook .W twoim
PROJECT/.git/hooks/
katalogu są już przykłady .Ze względów bezpieczeństwa będziesz musiał ręcznie włączyć taki punkt zaczepienia w każdym repozytorium, którego chcesz używać. Chociaż możesz zatwierdzić skrypt i skopiować go na wszystkie klony do
.git/hooks/
katalogu.źródło
.git/hooks/prepare-commit-msg.sample
. =) Wszystko, co musisz zmodyfikować (po wykonaniu wskazówek w komentarzach), to skopiować i wkleić dowolne rozwiązanie ze stackoverflow.com/questions/1593051/ ... które chcesz.git/hooks/prepare-commit-msg.sample
zawiera trzy przykłady. Jeden do komentowania sekcji konfliktów, dodawaniagit diff --name-status -r
do niej danych wyjściowych i dodawania linii podpisanych przez ... Bez dodawania nazwy gałęzi do komunikatu zatwierdzenia. Więc zostałem zmuszony do napisania własnego haka.you will have to manually enable such a hook on each repository you wish to use it
oznacza, że musisz nadać plikowi uprawnienia do wykonywania? Jeśli tak, czy mogę zmienić odpowiedź, aby to załączyć (czy możesz, proszę)?Oto mój
commit-msg
skrypt jako przykład:Tworzy następujący komunikat o zatwierdzeniu:
Używam numeru wydania, ponieważ
branch_name
opis problemu jest umieszczony w poleceniubranch_description
usinggit branch --edit-description [branch_name]
.Więcej o opisach branż można znaleźć w tym pytaniu i odpowiedzi .
Przykładowy kod jest przechowywany w następującym Gist .
źródło
echo $NAME: "$(cat $1)" > $1
. To działa, ponieważ powodem utraty nowych linii jest to, że echo traktowało każdy wiersz$(cat "$1")
jako nowy argument i powtarzał każdy z odstępami między nimi. Otaczając$(cat "$1")
podwójnymi cudzysłowami, echo traktuje wyjście cat jako pojedynczy argument. Nie sądzę też, aby było konieczne cytowanie,$1
ponieważ jego wartość to.git/COMMIT_EDITMSG
Nieco prostszy skrypt, który dodaje nazwę gałęzi do komunikatu o zmianach przed jego edycją. Więc jeśli chcesz go zmienić lub usunąć, możesz.
Utwórz ten plik .git / hooks / Preparat-commit-msg :
źródło
sed: 1: ".git/COMMIT_EDITMSG": invalid command code .
podczas używania tego.sed -i '.bak' "1s/^/$branchName : \n/" $1
@
jakosed
separatora zamiast,/
ponieważ ukośniki są bardziej prawdopodobne, że pojawią się w nazwie gałęzi lub komunikacie o zatwierdzeniused
.Możesz to zrobić za pomocą kombinacji punktów zaczepienia przygotowanie-commit-msg i pre-commit.
.git / hooks / Preparat-commit-msg
.git / hooks / pre-commit
Ustaw uprawnienia
źródło
--amend
na przykład. Zamiast używaćecho
, powinieneś użyćsed
zamiast tego. Tutaj jest w jednej linijce:sed -i "1s@^@$(git branch | grep '^\*' | cut -b3-) @" $1
dodaj poniższy kod w pliku Preparat-commit-msg.
Doda nazwę gałęzi do zatwierdzenia komunikatu, z wyjątkiem merge-commit. Merge-commit domyślnie zawiera informacje o gałęzi, więc dodatkowa nazwa gałęzi jest niepotrzebna i sprawia, że komunikat jest brzydki.
źródło
Zainspirowany odpowiedzią Tima, która opiera się na pierwszej odpowiedzi, okazuje się, że hook przygotowawczy-commit-msg przyjmuje jako argument, jaki rodzaj zatwierdzenia występuje . Jak widać w domyślnej wiadomości, przygotuj-zatwierdzenie, jeśli $ 2 to 'merge', to jest to zatwierdzenie scalające. W ten sposób przełącznik wielkości liter można zmienić tak, aby zawierał funkcję addBranchName () Tima.
Zawarłem własne preferencje dotyczące dodawania nazwy gałęzi i wszystkich niekomentowanych części domyślnego
prepare-commit-msg.sample
zaczepu.źródło
Jeśli chcesz, aby był globalny (dla wszystkich projektów):
Utwórz
git-msg
plik z treścią odpowiedzi shytikova i umieść go w jakimś folderze:Teraz włącz haki:
i
git init
ponownie w każdym projekcie, którego chcesz użyć.źródło
Miałem problemy z uruchomieniem tych rozwiązań w systemie MacOS, ponieważ używa on BSD
sed
zamiast GNUsed
. Udało mi się jednak stworzyć prosty skrypt, który spełnia swoje zadanie. Nadal używam.git/hooks/pre-commit
:Zakłada to standard nazewnictwa gałęzi podobny do
functional-desc_JIRA-NUMBER
. Jeśli nazwa twojego oddziału to tylko numer biletu Jira, możesz po prostu pozbyć się wszystkiego, od potoku po f2. Wymaga również posiadania pliku o nazwie.gitmessage
w katalogu domowym.źródło
Jeśli chcesz, aby bilet JIRA został dodany do komunikatu o zmianach, użyj poniższego skryptu.
Komunikat
PROJECT-2313: Add awesome feature
o zatwierdzeniu czegoś w rodzaju To wymaga, aby nazwa twojego oddziału zaczynała się od biletu jira.To połączenie tych rozwiązań:
Jest zmodyfikowany dla OS X, z
sed -i '.bak'
i działa również z SourceTree.https://gist.github.com/georgescumihai/c368e199a9455807b9fbd66f44160095
źródło