prepare-commit-msg 후크에서 병합된 커밋을 파악합니다.

prepare-commit-msg 후크에서 병합된 커밋을 파악합니다.

prepare-commit-msg병합 커밋에 작동하는 후크를 만들어 보았습니다 . 스크립트 에는 다음 인수가 전달됩니다 .git/MERGE_MSG.merge

병합된 커밋의 해시 또는 분기 이름을 가져와야 합니다(문어가 아닌 일반적인 병합의 경우). 나는 git rev-parse MERGE_HEAD해시를 얻거나 name-rev --name-only MERGE_HEAD지점 이름(있는 경우)을 얻기 위해 할 수 있다는 것을 알고 있습니다.

하지만 prepare-commit-msgMERGE_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"

원천 :사용자 정의 Git 병합 드라이버에서 분기 이름을 검색하는 방법은 무엇입니까?.

관련 정보