2016-11-29 8 views
4

사용자가 작성한 모든 태그를 검증하여 필요에 따라 이름을 변경하여 규칙을 충족 시키길 원합니다.
예를 들어 사용자가 "v1.2.3" 태그를 만든 경우 자동으로 "v1.02.03"으로 이름이 변경되어야합니다.git hook을 사용하여 태그의 이름을 자동으로 바꾸는 방법은 무엇입니까?

불행히도 git tag 명령에 의해 호출되는 git hook이 존재하지 않습니다.

그런 이유로 나는 pre-push 후크를 구현했는데, 이는 이전 태그를 삭제하고 같은 커밋에서 새 태그를 수정 한 이름으로 만듭니다.

git push --tags은 이전 태그가 프리 푸시 후크를 삭제 한 후에 더 이상 존재하지 않지만 NEW TAGS 대신 원격 태그로 OLD TAGS를 보냅니다.

태그를 원격 repo로 푸시하기 전에 자동으로 로컬 repo에서 이름을 바꾸는 방법은 무엇입니까?


편집 :
나는 서버 측에서 post-receive 후크에 태그 이름 변경 로직을 복제하여 내 문제를 해결했다.
pre-push 후크로 태그 "v1.2.3"이 클라이언트 측에서 "v1.02.03"으로 이름이 바뀌 었으나 이전 태그 이름 ("v1.2.3")이 원격 repo로 푸시되고 원격 repo " post-receive 후크로 "v1.2.3"이 다시 "v1.02.03"으로 이름이 변경됩니다. 이제 클라이언트와 서버 모두 태그의 이름이 변경되었습니다.

나는 내 솔루션에 만족하지 않는다고 말할까요?
순수 클라이언트 측 솔루션은 여전히 ​​환영 받고 있습니다.

+0

태그가 제대로 삭제되지 않은 것 같습니다. 프리 푸시 후크 코드를 여기에서 공유 할 수 있습니까? –

+0

@mu - 태그가 제대로 삭제되었으므로 후크로 인쇄 된 성공적인 작업에 대한 메시지가 표시됩니다. 내 코드는 다음 줄을 포함합니다 :'os.execute ('git tag -d "'..tagname .. '"&& git tag "'..new_tag_name .. '"..commit ..'&& echo TAG RENAMED | | 에코 이름 바꾸기가 실패했습니다 ')'. 그리고'git push --tags'가 완료된 후에 실제로 그것들이 삭제 된 것을 봅니다. –

답변

0

클라이언트 측의 pre-push 후크에 매핑하여 여기에서 로컬 태그의 이름을 바꿀 수 있습니다.

+0

git 매뉴얼에 따라 클라이언트 측에서 미리 푸시 후크가 실행 중입니다. 무슨 매핑 얘기 야? –

+0

푸시 될 기회를 얻기 전에 해당 훅에서 태그의 이름을 변경하십시오. – blue112

+0

이것은 내가 정확히 한 것입니다. 나는 그 고리에 꼬리표를 개명했다. –

2

핵심 가치 전문가가 아니지만 여기 내 가설입니다 : --tags 플래그를 사용하면 모든 refs는 훅이 실행되기 전에 이미 메모리에 저장되어 있습니다. 자식 푸시 맨 페이지에서 : 심판이 메모리에 이미 존재하기 때문에

--tags 
     All refs under refs/tags are pushed, in addition to refspecs explicitly listed on the command line. 

, 당신의 사전 푸시 훅은 제거하고 영향을주지 않는 새로운 태그를 생성/태그 이름을 변경.

IMO, 이러한 경우를 처리하기 위해 모든 태그 이름을 변경 한 후 하나의 태그 이름이 잘못 지정되면 사전 푸시 후크를 간단히 수정할 수 있습니다. 그런 다음 사전 실행을 다시 실행하십시오.

또는 git 별칭을 사용자 정의 명령으로 사용할 수 있습니다.이 별칭은 사용자 요구 사항에 따라 모든 태그의 이름을 바꾸고 git push --tags을 호출합니다. How to embed bash script directly inside a git alias을 확인하십시오.

+0

'git push '가 실패하고 강제로 사용자를 다시 강제 실행하는 것은 매우 나쁜 해결책입니다. –

+0

@EgorSkriptunoff 그래, 그건 가난한 해킹이다. 젠장 별칭 당신을 위해 그것을 해결할 수 있지만. –

+0

사용자 정의 git 명령을 만들고 ** 모든 개발자가 ** 사용하도록 가르치라고 제안합니까? 그것은 전혀 해결책이 아닙니다. 태그 이름 바꾸기는 완전 자동이어야합니다. –