Ich benötige Hilfe bei einem Bash-Skript, das automatisch den Zweignamen des Git als Hash in Commit-Nachrichten hinzufügt.
git
bash
git-branch
Tomer Lichtash
quelle
quelle
git branch | grep ...
, um den aktuellen Zweig zu erhalten, sind der falsche Weg, dies zu tun. Betrachten Sie entwedergit symbolic-ref -q HEAD
(wie in dieser Antwort gezeigt ) odergit rev-parse --abbrev-ref HEAD
. Der Befehl symbolic-ref schlägt fehl, wenn Sie sich auf einem getrennten HEAD befinden. Wenn Sie diesen Fall erkennen möchten, verwenden Sie ihn. Andernfalls ist die Methode rev-parse --abbrev-ref wahrscheinlich am besten.Antworten:
Verwenden Sie den
prepare-commit-msg
odercommit-msg
Githook .In Ihrem
PROJECT/.git/hooks/
Verzeichnis befinden sich bereits Beispiele .Aus Sicherheitsgründen müssen Sie einen solchen Hook für jedes Repository, das Sie verwenden möchten, manuell aktivieren. Sie können das Skript jedoch festschreiben und auf alle Klone in das
.git/hooks/
Verzeichnis kopieren .quelle
.git/hooks/prepare-commit-msg.sample
. =) Alles, was Sie ändern müssen (nachdem Sie den Anweisungen in den Kommentaren gefolgt sind ), ist das Kopieren und Einfügen einer beliebigen Lösung von stackoverflow.com/questions/1593051/…, die Sie.git/hooks/prepare-commit-msg.sample
enthält für mich drei Beispiele. Eine zum Auskommentieren von Konflikten, zum Hinzufügen vongit diff --name-status -r
Ausgaben und zum Hinzufügen von abgemeldeten Zeilen ... Kein Hinzufügen eines Zweigstellennamens zur Festschreibungsnachricht. Also musste ich meinen eigenen Hook schreiben.you will have to manually enable such a hook on each repository you wish to use it
, dass Sie der DATEI Ausführungsberechtigungen erteilen müssen? Wenn ja, darf ich die Antwort so bearbeiten, dass sie dies enthält (oder könnten Sie bitte)?Hier ist mein
commit-msg
Skript als Beispiel:Erstellt die folgende Festschreibungsnachricht:
Ich verwende die Ausgabenummer als
branch_name
, die Problembeschreibung wird in den Befehlbranch_description
usinggit branch --edit-description [branch_name]
eingefügt.Weitere Informationen zu Branchenbeschreibungen finden Sie in diesen Fragen und Antworten .
Das Codebeispiel ist in der folgenden Übersicht gespeichert .
quelle
echo $NAME: "$(cat $1)" > $1
. Dies funktioniert, weil der Grund dafür, dass die Zeilenumbrüche verloren gingen, darin besteht, dass das Echo jede Zeile$(cat "$1")
als neues Argument behandelt und jedes mit einem Leerzeichen dazwischen wiedergibt . Durch das Umgeben$(cat "$1")
mit doppelten Anführungszeichen behandelt echo die Cat-Ausgabe als ein einziges Argument. Ich denke auch nicht, dass es notwendig ist zu zitieren,$1
da sein Wert ist.git/COMMIT_EDITMSG
Ein etwas einfacheres Skript, das den Zweignamen zur Festschreibungsnachricht hinzufügt, bevor Sie sie bearbeiten. Wenn Sie es also ändern oder entfernen möchten, können Sie dies tun.
Erstellen Sie diese Datei .git / hooks / prepare-commit-msg :
quelle
sed: 1: ".git/COMMIT_EDITMSG": invalid command code .
wenn ich das benutze.sed -i '.bak' "1s/^/$branchName : \n/" $1
@
alssed
Trennzeichen verwenden,/
da Schrägstriche eher im Filialnamen oder in der Festschreibungsnachricht angezeigt werdensed
.Sie können dies mit einer Kombination aus den Hooks prepare-commit-msg und pre-commit tun.
.git / hooks / prepare-commit-msg
.git / hooks / pre-commit
Berechtigungen festlegen
quelle
--amend
beispielsweise verwenden. Anstatt zu verwendenecho
, sollten Siesed
stattdessen verwenden. Hier ist es in einem Einzeiler:sed -i "1s@^@$(git branch | grep '^\*' | cut -b3-) @" $1
Fügen Sie den folgenden Code in die Datei prepare-commit-msg ein.
Es wird ein Zweigname zur Festschreibungsnachricht hinzugefügt, mit Ausnahme von Merge-Commit. Das Merge-Commit enthält standardmäßig Zweiginformationen, sodass kein zusätzlicher Zweigname erforderlich ist und die Nachricht hässlich wird.
quelle
Inspiriert von Tims Antwort, die auf der obersten Antwort aufbaut, stellt sich heraus, dass der Hook "prepare-commit-msg" ein Argument dafür ist, welche Art von Festschreibung stattfindet . Wie in der Standard-Prepare-Commit-Nachricht zu sehen ist, handelt es sich bei $ 2 um 'Merge', dann um ein Merge-Commit. Daher kann der Fallschalter so geändert werden, dass er Tims Funktion addBranchName () enthält.
Ich habe meine eigene Präferenz für das Hinzufügen des Zweignamens und alle nicht kommentierten Teile des Standard-
prepare-commit-msg.sample
Hooks angegeben.quelle
Wenn Sie es global machen möchten (für alle Projekte):
Erstellen Sie eine
git-msg
Datei mit dem Inhalt von shytikovs Antwort und legen Sie sie in einem Ordner ab:Aktivieren Sie nun Hooks:
und
git init
wieder in jedem Projekt, das Sie verwenden möchten.quelle
Ich hatte Probleme, diese Lösungen unter MacOS zum Laufen zu bringen, da BSD
sed
anstelle von GNU verwendet wirdsed
. Ich habe es geschafft, ein einfaches Skript zu erstellen, das die Arbeit erledigt. Immer noch mit.git/hooks/pre-commit
:Dies setzt einen ähnlichen Namensnamen für Zweige voraus
functional-desc_JIRA-NUMBER
. Wenn Ihr Filialname nur Ihre Jira-Ticketnummer ist, können Sie einfach alles von der Pipe bis zur f2 loswerden. Es erfordert auch, dass Sie eine Datei mit dem Namen.gitmessage
in Ihrem Home-Verzeichnis haben.quelle
Wenn Sie möchten, dass das JIRA-Ticket zur Festschreibungsnachricht hinzugefügt wird, verwenden Sie das folgende Skript.
Nachricht so etwas wie festschreiben
PROJECT-2313: Add awesome feature
Dies erfordert, dass Ihr Filialname mit dem jira Ticket beginnt.Dies ist eine Kombination dieser Lösungen:
Es wurde für OS X mit dem geändert
sed -i '.bak'
und funktioniert auch mit SourceTree.https://gist.github.com/georgescumihai/c368e199a9455807b9fbd66f44160095
quelle