Git은 서명/주석 태그를 병합할 때 병합 커밋을 생성하지 않습니다.

Git은 서명/주석 태그를 병합할 때 병합 커밋을 생성하지 않습니다.

서명되거나 주석이 달린 태그를 병합할 때 Git이 병합 커밋을 생성할 것으로 예상하지만 분기 포인터를 빨리 감습니다. 저는 openSUSE Tumbleweed에서 Git 버전 2.17.0을 사용하고 있습니다.

매뉴얼 페이지 에 따르면 git-merge(1)병합 서명/주석 태그의 경우 병합 커밋을 생성해야 합니다.

--없음-ff병합이 빨리 감기로 확인되더라도 병합 커밋이 생성됩니다. 이는 refs/tags/ 계층 구조의 원래 위치에 저장되지 않은 주석이 달린(및 서명된) 태그를 병합할 때의 기본 동작입니다.

내가 실행한 명령의 순서는 다음과 같습니다.

git init foobar
cd foobar
git commit --allow-empty -m 'Empty root commit'
git checkout -b feature
git commit --allow-empty -m 'Feature one commit ahead of master'
git tag -a -m 'Feature ready for non fast-forward merge' ready-to-merge-feature
git checkout master
git merge ready-to-merge-feature

불행히도 예기치 않게 주석이 달린 태그를 사용하여 병합하면 ready-to-merge-feature병합 커밋을 생성하는 대신 빨리 감기가 발생합니다. 주석이 달린 라벨 대신 서명된 라벨을 사용할 때에도 동일한 예상치 못한 동작이 관찰되었습니다.

내 가정이 틀렸나요? 내가 뭐 잘못 했어요? 해결책은 무엇입니까?

답변1

인용한 맨페이지 중 아래에 굵게 표시한 부분을 참고하세요.

이는 주석이 달린(서명된) 태그를 병합할 때의 기본 동작입니다.refs/tags/ 계층 구조에 저장할 자연스러운 위치가 없습니다..

귀하가 제공한 명령 순서를 사용하여 레이블을 지정하십시오.회의자연스러운 위치에 있으므로 이 기본값에 대한 조건은 적용되지 않습니다.

FETCH_HEAD이 기본값은 관리자 저장소 와 마찬가지로 기여자 저장소에서 태그를 가져오는 데 도움이 되도록 설정됩니다 . 이러한 태그는 일시적일 수 있으므로 콘텐츠(주석 및/또는 서명)가 있는 경우 일반적으로 병합 커밋에서 해당 정보를 보존하는 것이 가장 좋습니다. 그러나 이미 존재하는 태그는 refs/tags/프로젝트의 영구 상태의 일부일 수 있으므로 커밋으로 전송하지 않고도 콘텐츠를 계속 사용할 수 있어야 합니다.

가장 간단한 해결책은 아마도 이 --no-ff옵션을 명시적으로 사용하는 것입니다.

관련 정보