Zusammengeführtes Commit im Prepare-Commit-Msg-Hook herausfinden

Zusammengeführtes Commit im Prepare-Commit-Msg-Hook herausfinden

Ich habe versucht, einen prepare-commit-msgHook 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_HEADabrufen kann.name-rev --name-only MERGE_HEAD

Es scheint jedoch, dass dies prepare-commit-msgaufgerufen 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?.

verwandte Informationen