업데이트 후크 당신은 후크에 대해 알고
사용 - 그들에 대한 documentation을 읽어주십시오! 원하는 훅 (hook)은 업데이트 (ref) 일 때마다 실행되는 업데이트입니다. (pre-receive 후크는 전체 푸쉬에 대해 한 번 실행됩니다.) 이미 이러한 후크에 대한 많은 질문과 답변이 있습니다. 원하는 작업에 따라 필요할 때마다 훅을 작성하는 방법에 대한 지침을 찾을 수 있습니다.
이 정말로 문서에서 인용이 가능하다는 것을 강조하기 :
이 후크는 개체 이름이있는 커밋 객체임을 확인하여 특정 심판에 강제 업데이 트를 방지 할 수 있습니다
이전 오브젝트 이름으로 명명 된 확약 오브젝트의 하위 오브젝트. 즉, "빨리 감기"정책을 시행하는 것입니다.
또한 이전 상태를 기록하는 데 사용할 수 있습니다. 새 상태.
그리고 특성 :
후크 갱신 각 REF 번씩 실행하고, 세 파라미터 취 심판의 이름을 업데이트되는
- 을
- 을 ref에 저장된 이전 객체 이름
- 및 ref에 저장할 새 objectname
따라서, 예를 들어, 당신은 커밋 주제 것도 이상 80 개 문자가 없는지 확인하려는 경우, 매우 기초적인 구현은 다음과 같습니다
물론
#!/bin/bash
long_subject=$(git log --pretty=%s $2..$3 | egrep -m 1 '.{81}')
if [ -n "$long_subject" ]; then
echo "error: commit subject over 80 characters:"
echo " $long_subject"
exit 1
fi
, 즉 A의 장난감 예; 일반적인 경우 전체 커밋 메시지가 포함 된 로그 출력을 사용하고 커밋마다 분할하고 개별 커밋 메시지마다 인증 코드를 호출합니다. 당신이이 의견/토론 명확히하고있다
업데이트 후크를 원하는 이유
; 여기에 요약이 있습니다.
업데이트 후크는 ref마다 한 번 실행됩니다. ref는 객체에 대한 포인터입니다. 이 경우 우리는 가지와 태그에 대해 말하고 일반적으로 분기 만합니다. 사람들은 태그를 자주 표시하기 때문에 태그를 자주 푸시하지 않습니다.사용자가 두 가지, 마스터와 실험에 대한 업데이트를 밀어 경우
지금, :
o - o - o (origin/master) - o - X - o - o (master)
\
o - o (origin/experimental) - o - o (experimental)
는 X가 커밋 MSG 후크를 실패 "나쁜"커밋, 즉 하나라고 가정하자. 분명히 우리는 압박을 받아들이는 것을 받아들이고 싶지 않습니다. 따라서 업데이트 후크는이를 거부합니다. 그러나 실험에 대한 커밋에는 아무런 문제가 없습니다! 업데이트 훅은이를 받아들입니다. 따라서, 원산지/마스터가 변경되지 않고 유지하지만, 원/실험이 업데이트 될 때 :
o - o - o (origin/master) - o - X - o - o (master)
\
o - o - o - o (origin/experimental, experimental)
사전 수신 한 번만, 시작은 심판을 업데이트하기 직전에 (처음 전에 업데이트 후크가 실행)를 실행 후크를. 만약 당신이 그것을 사용한다면, 당신은 전체 밀어 내기를 실패하게해야 할 것입니다. 따라서 마스터에게 나쁜 커밋 메시지가 있었기 때문에 더 이상 그들의 메시지가 훌륭하더라도 실험에 대한 커밋이 더 이상 신뢰되지 않습니다.
커밋 메시지에 따라 전체 밀어 내기를 거부하기 때문에 OP가 찾고있는 후크가 사전 수신이라고 생각합니다. 그러나 AFAIK는 사전 수신도 업데이트도 커밋 메시지를 입력으로받지 않습니다. 따라서 commit-msg를 사용하는 것이 가장 좋은 해결책 일 것입니다. –
@Can : OP가 업데이트 받기를 원하며 미리 수신하지 않을 것이라고 확신합니다. "전체 추진"은 모든 가지에 대한 추진을 의미합니다. 사용자가 세 가지 분기로 업데이트를 푸시하려고 시도하고 하나만 유효하지 않은 커밋 메시지를 포함하면 다른 두 가지는 여전히 허용되어야합니다! – Cascabel
@Can : 그리고 커밋 메시지는 입력의 일부가 아니지만 이전 및 새 개체 (커밋) 이름 (SHA1)은 있습니다. 업데이트 훅은 ref가 업데이트되기 전에 (커밋 객체가 수신 된 후) 실행된다는 점에 유의하십시오. 따라서 hook은 git log를 사용하여 커밋 메시지를 포함하여 old와 new 사이의 커밋에 대해 조사 할 수 있습니다. – Cascabel