Prepare-commit-msg 훅에서 병합 된 커밋을 파악


5

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/MERGE_MSG커밋 메시지를 보유한 파일의 내용을 살펴 보셨습니까 ?
harrymc 2016 년

그렇습니다.“자동 생성 된 메시지를 파싱”한다는 의미입니다. 다소 해킹적이고 오류가있는 솔루션 인 것 같습니다.
Raphael Schweikert 2016 년

나는 그것이 얼마나 해키인지 모르겠지만,이 후크의 목적은이 파일을 사용자 정의하는 것입니다.
harrymc

사용자가 현지화되지 않은 버전의 git을 사용하여“Merge branch x를 y로 병합”이라는 문장의 영어가 아닌 변형을 생성하므로 분기 이름과 패턴 일치 할 수 없으므로 모든 유효한 과정을 거쳐야합니다. 자동 생성 메시지에서 분기 이름 (아마도 모든 단어 일 수 있음)을 확인하고 해당 분기가 실제로 존재하고 HEAD와 일치하지 않는지 확인하십시오. 이로 인해 오 탐지가 발생할 수도 있습니다.
Raphael Schweikert 2016 년

를 통해 지점 이름을 가져올 수 NAME=$(git branch | grep '*' | sed 's/* //') 있지만이 기간 동안이 이름 이 존재하는지 모르겠습니다 prepare-commit-msg. commit-msg후크에 적합합니다 . 또 하나 : git symbolic-ref --short HEAD.
harrymc 2016 년

답변:


8

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


1
이 위대한 답변에 감사드립니다. 나는 이것이 stackoverflow.com/questions/24302644/…의 확실한 소스 라고 확신 합니다. codedisqus.com은 stackoverflow 컨텐츠를 추출하는 미러입니다. 그러나 편집을 거부했기 때문에 이것을 의견으로 게시하고 있습니다.
Raphael Schweikert 2016 년

귀하의 답변을 찬성하고 싶지만 2 개의 담당자 포인트가 누락되었습니다.
Raphael Schweikert 2016 년

죄송합니다. 수정을 너무 빨리 거부했습니다. 이제 다시 끝났습니다. 나는 또한 당신의 게시물을 upvoted. 감사합니다.
harrymc 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.