programing

Git 커밋 후크를 건너뜁니다.

newsource 2023. 4. 25. 22:27

Git 커밋 후크를 건너뜁니다.

Python 코드로 된 인쇄문을 찾는 Git 훅을 보고 있습니다.인쇄문이 발견되면 Git 커밋을 방지합니다.

이 훅을 오버라이드하고 싶은데 명령어가 있다고 합니다.못 찾겠어요.생각나는 거 없어요?

그럴 수도 있습니다(man 페이지).

git commit --no-verify -m "commit message"
           ^^^^^^^^^^^
-n  
--no-verify

이 옵션은 사전 커밋 및 커밋 메시지 후크를 바이패스합니다.githooks(5)를 참조하십시오.

Blaise가 언급했듯이요,-n에서는 특정 명령에 대해 다른 역할을 할 수 있습니다.
예를 들어, 는 실제로 드라이런 푸시입니다.
오직.git push --no-verify훅을 건너뛸 거예요


참고: Git 2.14.x/2.15는 다음을 개선합니다.--no-verify동작:

케빈 윌포드(')의 680ee55(2017년 8월 14일)를 참조하십시오.
(Junio C Hamano에 의해 병합됨 -- -- commit c3e034f, 2017년 8월 23일)

commit: 인덱스 삭제가 없는 경우 건너뜁니다.pre-commit갈고리를 채우다

"git commit" 인덱스를 삭제하고 파일 시스템에서 다시 읽는 데 사용됩니다.pre-commit훅이 중간에 업데이트했습니다. 이 작업은 실행하지 않을 때 최적화되었습니다.pre-commit갈고리를 채웁니다.


다비 리마는 논평에서 "검증 불가"라고 지적했습니다.
따라서 체리 픽이 사전 커밋 후크를 트리거하는 경우, 이 블로그 게시물에서와 같이 git 체리 픽을 진행하기 위해 후크를 코멘트/비활성화해야 할 수 있습니다.

다음과 같은 프로세스가 필요할 수 있습니다.git rebase --continue, 병합 충돌을 해결한 후입니다.


Git 2.36 (Q2 2022)로, 호출자는 다음과 같습니다.run_commit_hook()훅이 성공했기 때문에 "성공"을 얻었는지 아니면 훅이 없었기 때문에 "성공"을 얻었는지 알아봅니다.

Avar Arnfjörd Bjarmason()의 commit a8cc594(commit 4369e3a1로 고정), commit 9f6e63b(avar2022년 3월 7일)를 참조하십시오.
(Junio C Hamano에 의해 병합됨 -- -- 커밋 7431379, 2022년 3월 16일)

: 무명의 TOCTOU "우리가 방금 훅을 달렸나요?" 경주를 고칩니다.

승인자: 에바르 아른피외르드 비아르마손입니다.

680ee55("")에 추가된 코드로 Time-of-Check to-Use-Of-Use(TOCTOU) 레이스를 수정합니다.commit: 사전 커밋 후크가 없는 경우 인덱스 폐기를 건너뜁니다.", 2017-08-14, Git v2.15.0-rc0 -- 배치 #3에 나열된 병합).

이 불명확한 경주 조건은 예를 들어 "를 실행한 경우 발생할 수 있습니다.pre-commit" 후크를 걸어 인덱스를 수정했습니다.hook_exists()나중에 false를 반환합니다(예: 후크 자체가 사라지거나 디렉토리를 읽을 수 없게 되는 등).
그럼 전화는 안 할게요.discard_cache()언제 그랬어야 했는지요

경쟁 조건 자체는 문제가 되지 않을 것이며, 실제로 사용자가 마주칠 가능성은 낮습니다.
이 문제는 680ee55에 대해 논의했을 때 목록에 기록되었지만 수정되지는 않았습니다.

네, 그렇습니다.
이제 후크가 존재하는지 확인하고 체크아웃을 푸시하거나 배포를 푸시하는 대신 항상 체크아웃을 푸시합니다.
만약 훅이 존재하지 않는다면 우리는 전개하기 위해 후퇴할 것입니다.
TOCTOU입니다.
0855331("을 참조하십시오.receive-pack: Push-to-Checkout Hook", 2014-12-01, Git v2.4.0-rc0 --merge)를 지원하여 이전 동작을 도입하였습니다.

이렇게 하면 '먹다'라는 말이 남습니다.hook_exists()중요한 두 곳에서요
"refs.c참조 트랜잭션" 체크인은 6754159("")를 참조하십시오.refs: 참조 트랜잭션 후크 구현", 2020-06-19, Git v2.28.0-rc0 -- 배치 #7에 나열된 병합 및 "prepare-commit-msg" 후크 "66618a5"("")를 참조하십시오.sequencer: 'prepare-commit-msg' hook", 2018-01-24, Git v2.17.0-rc0 -- 배치 #2에 나열된 병합을 실행합니다.

두 경우 모두 후크가 없으면 아무것도 하지 않을 후크에 대한 데이터를 준비하지 않음으로써 CPU 시간을 절약할 수 있습니다.
그래서 이걸 사용해서요."invoked_hook"그런 경우에는 패턴이 말이 안 돼요

"" (으) 조( the the 조 the the the the the the the the 。reference-transaction그리고 " " " " " " 입니다prepare-commit-msg네, 그렇습니다.
이 경우 새 후크가 추가된 상태에서 레이스를 진행하면 후크 실행을 건너뜁니다. 반면 여기서 고정되는 TOCTOU 레이스에서는 필요한 후크 논리를 잘못 건너뜁니다.

둘 다요.comment그리고요.no verify이겁니다.

git commit -m "Some comments" --no-verify

--no-verify제 경우엔 항상 단말기에 파라미터를 붙이고 싶지는 않았습니다.그래서 좀 더 공격적인 걸 골랐어요

사용 안 함으로 설정하려면 사용 안 함으로 설정합니다.git hooks이겁니다.

git config --global core.hooksPath /dev/null

그러나 이전 상태로 유지하려면 터미널에서 다음 명령을 실행하십시오.

git config --global --unset core.hooksPath

글로벌하지 않으려면 인수를 제거하십시오.--global

Git 2.16.3으로 테스트했습니다.

터터에서요.man githooks다음을 참조하십시오

미리 약속합니다.
git commit 을 사용합니다. --no-no-no-no-no-no-no-commit 을 사용합니다.매개 변수를 사용하지 않으며 제안된 커밋 로그 메시지를 가져와 커밋하기 전에 호출됩니다.이 스크립트에서 0이 아닌 상태로 종료하면 git 커밋이 중단됩니다.

예를 들어 'merge --merge' 이후의 커밋에는 -n 또는 --no-merge가 작동하지 않습니다.

그래서 여기 또 다른 거친 아이디어가 있습니다.

  1. 에 주석을 달기만 하면 됩니다. .git/hooks/pre-commit그럼 '#'은요?
  2. 단일 또는 여러 명령을 실행합니다.
  3. 설명하지 않습니다.
  4. 이익.

웬일인지 그래.--no-verify이 특정 후크에서는 작동하지 않습니다.prepare-commit-msg

이 문제가 발생하는 경우 다음을 시도해 보십시오.

SKIP=prepare-commit-msg git commit

언급URL : https://stackoverflow.com/questions/7230820/skip-git-commit-hooks 입니다.