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를 만들기 전에 호출 된 것 같습니다 . 자동 생성 된 메시지를 구문 분석하는 데 실패한 커밋이 무엇인지 알 수있는 다른 방법이 있습니까?

git 2.4.0을 사용하고 있습니다.



답변

사용자 정의 병합 드라이버에서 병합되는 분기의 이름 (대상)을 검색 할 수 있고 환경 변수 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 병합 드라이버에서 분기 이름을 검색하는 방법은 무엇입니까? .