
prepare-commit-msg
병합 커밋에 작동하는 후크를 만들어 보았습니다 . 스크립트 에는 다음 인수가 전달됩니다 .git/MERGE_MSG
.merge
병합된 커밋의 해시 또는 분기 이름을 가져와야 합니다(문어가 아닌 일반적인 병합의 경우). 나는 git rev-parse MERGE_HEAD
해시를 얻거나 name-rev --name-only MERGE_HEAD
지점 이름(있는 경우)을 얻기 위해 할 수 있다는 것을 알고 있습니다.
하지만 prepare-commit-msg
MERGE_HEAD가 생성되기 전에 호출되는 것 같습니다. 자동 생성된 메시지를 구문 분석하지 않고 어떤 커밋이 병합되었는지 알 수 있는 다른 방법이 있습니까?
나는 자식 2.4.0을 사용하고 있습니다.
답변1
사용자 정의 병합 드라이버에서는 병합되는 분기의 이름(대상)을 환경 변수에서 검색할 수 있고 git symbolic-ref HEAD
병합되는 분기의 이름(소스)을
GITHEAD_<SHA>
환경 변수에서 검색할 수 있습니다.
다음은 예제 스크립트 조각입니다.
# 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"