![Zusammengeführtes Commit im Prepare-Commit-Msg-Hook herausfinden](https://rvso.com/image/1452859/Zusammengef%C3%BChrtes%20Commit%20im%20Prepare-Commit-Msg-Hook%20herausfinden.png)
Ich habe versucht, einen prepare-commit-msg
Hook zu erstellen, der für Merge-Commits funktioniert. Dem Skript werden die folgenden Argumente übergeben .git/MERGE_MSG
: , merge
.
Ich muss den Hash oder den Branch-Namen des zusammengeführten Commits abrufen (für eine normale Zusammenführung, die nicht mit Octopus erfolgt). Ich weiß, dass ich den Hash oder den Branch-Namen (falls vorhanden) git rev-parse MERGE_HEAD
abrufen kann.name-rev --name-only MERGE_HEAD
Es scheint jedoch, dass dies prepare-commit-msg
aufgerufen wird, bevor MERGE_HEAD erstellt wird. Gibt es eine andere Möglichkeit herauszufinden, welcher Commit zusammengeführt wurde, ohne die automatisch generierte Nachricht zu analysieren?
Ich verwende Git 2.4.0.
Antwort1
In einem benutzerdefinierten Merge-Treiber kann der Name des Zweigs, in den zusammengeführt wird (Ziel), git symbolic-ref HEAD
und der Name des Zweigs, in den zusammengeführt wird (Quelle), aus der
GITHEAD_<SHA>
Umgebungsvariable abgerufen werden.
Dies ist ein Beispiel für ein Skriptfragment:
# retrieve merged branch name from an env var GITHEAD_<sha>=<branchName>
# we cannot use a sym ref of MERGE_HEAD, as it doesn't yet exist
gitHead=$(env | grep GITHEAD) # e.g. GITHEAD_<sha>=release/1.43
# cut out everything up to the last "=" sign
source="${gitHead##*=}"
# retrieve base branch name from a sym ref of HEAD
branch=$(git symbolic-ref HEAD) # e.g. refs/heads/master
# cut out "refs/heads"
destination="${branch#refs/heads/}"
echo "Merging from $source into $destination"
Quelle :Wie rufe ich Branch-Namen in einem benutzerdefinierten Git-Merge-Treiber ab?.