Git이 생성 된 각 커밋 또는 태그에 항상 서명하도록하는 쉬운 방법이 있습니까?
나는 다음과 같이 시도했다.
별명 커밋 = 커밋 -S
그러나 그것은 속임수를 쓰지 않았습니다.
이를 위해 다른 프로그램을 설치하고 싶지 않습니다. 쉽게 할 수 있습니까?
부수적 인 질문, 아마도 커밋에 서명해서는 안되며 Homebrew와 같은 프로젝트에 대해 단일 커밋을 제출할 때 절대로 태그를 작성해서는 안됩니다.
답변
참고 : -S
커밋이 서명되었는지 확인하기 위해 항상 추가하지 않으려면 제안을해야합니다 ( pu
지금은 분기 ‘ ‘, 2013 년 12 월이므로 git 릴리스로 만들 것이라고 보장하지 않습니다). 해당 옵션을 처리하는 config.
2014 년 5 월 업데이트 : Git 2.0에 있습니다 ( 이 패치 시리즈에서 다시 보낸 후 )
참조 2af2ef3 커밋 에 의해 니콜라스 비지에 (boklm) :
commit.gpgsign
모든 커밋에 서명 하는 옵션 추가
모든 커밋에 GPG 서명을하려면
-S
옵션을 항상 추가해야합니다 . 설정 옵션은 자동으로 모든 커밋에 서명 할 수 있습니다.commit.gpgsign
commit.gpgsign
모든 커밋을 GPG 서명해야하는지 여부를 지정하는 부울입니다.
rebase와 같은 작업을 수행 할 때이 옵션을 사용하면 많은 수의 커밋이 서명 될 수 있습니다. GPG 암호 문구를 여러 번 입력하지 않도록 에이전트를 사용하는 것이 편리 할 수 있습니다.
해당 구성은 일반적으로 저장소마다 설정됩니다 (개인 실험 로컬 저장소에 서명 할 필요는 없음).
cd /path/to/repo/needing/gpg/signature
git config commit.gpgsign true
user.signingKey
전역 설정 으로 사용하는 것과 결합 합니다 (커밋에 서명하려는 모든 리포지토리에 사용되는 고유 키)
git config --global user.signingkey F2C7AB29
user.signingKey
커밋 d67778e 와 함께 git 1.5.0 (2007 년 1 월)에 도입되었습니다 .
내 자식 저장소와 gpg 키에 동일한 형식의 이름을 사용해야한다는 요구 사항이 없어야합니다.
또한 키 링에 여러 키가있을 수 있으며 커밋 메시지에 사용하는 주소와 일치하지 않는 키를 사용하려고 할 수 있습니다.이 패치는 구성 항목 ”
user.signingKey
“을 추가합니다.이 항목이 있으면 gpg의 “-u”스위치로 전달되어 태그 서명 키를 재정의 할 수 있습니다.
이것은으로 적용됩니다 커밋 aba9119 사용자가 잘못 된 경우 경우 잡기 위해 (자식 1.5.3.2) user.signingKey
자신의에서 .git/config
자신의 열쇠 고리에 어떤 비밀 키가없는 단지 또는.
노트:
- 규칙에 따라, 자식 2.4.0 2015년 3월 때문에 , 그것은 것입니다
signingKey
하지,signingkey
짝수 불구하고,git config
키 케이스를 구분하지 않습니다. 그게 당신이 할 경우에만 문제가 것git config --get-regexp
있는 것입니다 그렇지 않으면 단지 가독성 규칙이며, 대소 문자를 구분합니다; - 당신이 원하는 경우 자식 서버가 각 푸시에 대한 서명을 확인하기 위해 , 당신은 적어도 (2.2 (2014 10월을) 자식이 필요합니다 b945901 커밋 )로
git push --signed
고려할 수 없다는user.signingKey
설정 값을; - git 2.9 (2016 년 6 월)는 커밋뿐만 아니라
user.signingKey
주석이 달린 태그에 서명 하는 데 사용 합니다 : commit 61c2fe0 .
답변
git config --global user.signingKey 9E08524833CB3038FDE385C54C0AFCCFED5CDE14
git config --global commit.gpgSign true
키 ID로 9E08524833CB3038FDE385C54C0AFCCFED5CDE14를 바꾸십시오. 기억하십시오 : 짧은 ID를 사용하는 것은 좋은 생각이 아닙니다 .
업데이트 : 새로운 git edict 당 모든 구성 키는 camelCase에 있어야합니다.
답변
편집 : 힘내 버전 1.7.9로, 이다 가능 (힘내 커밋에 서명git commit -S
). 이것을 반영하기 위해 답변을 약간 업데이트하십시오.
질문 제목은 다음과 같습니다.
GPG 키를 사용하여 Git에서 커밋을 “자동 서명”하는 방법이 있습니까?
짧은 대답 : 예,하지만하지 마십시오.
문제의 오타를 해결 : git commit -s
커밋에 서명하지 않습니다. 오히려 man git-commit
페이지에서 :
-s, –signoff
커밋 로그 메시지 끝에 커미터가 서명 한 줄을 추가합니다.
이것은 다음과 유사한 로그 출력을 제공합니다.
± $ git log [0:43:31]
commit 155deeaef1896c63519320c7cbaf4691355143f5
Author: User Name
Date: Mon Apr 16 00:43:27 2012 +0200
Added .gitignore
Signed-off-by: User Name
“Signed-off-by ::”비트를주의하십시오. 그 -s
깃발에 의해 생성 된git-commit
.
출시 발표 이메일 인용 :
- “git commit”은 커밋을 GPG 서명하기 위해 “-S”를 배웠다. 이것은 “–show-signature”옵션과 함께 “git log”로 표시 될 수 있습니다.
예, 커밋에 서명 할 수 있습니다. 그러나 저는이 옵션에 개인적으로주의를 기울입니다. 커밋 자동 서명은 무의미한 옆에 있습니다. 아래를 참조하십시오.
부수적 인 질문, 아마도 커밋에 서명해서는 안되며, 단일 커밋을 제출할 때 절대 태그를 만들지 않을 것입니다.
맞습니다. 커밋은 서명되지 않습니다. 태그입니다. 이에 대한 이유는 Linus Torvalds 가이 메시지에서 찾을 수 있습니다 .
각 커밋에 서명하는 것은 완전히 어리 석습니다. 그것은 당신이 그것을 자동화한다는 것을 의미하며, 서명을 덜 가치있게 만듭니다. SHA1의 git DAG-chain이 작동하는 방식으로,
그 중 하나에서 도달 가능한 모든 커밋을 효과적으로 적용 할 수 있도록 하나의 서명 만 있으면됩니다 . 따라서 각 커밋에 서명하는 것은 요점이 없습니다.
커밋에 자동으로 서명하는 것이 내가 할 수있는 것보다 훨씬 좋은 방법이 아닌 이유 를 분명히하는 링크 된 메시지를 찾아 보는 것이 좋습니다.
그러나 태그 에 자동으로 서명 git-tag -[s|u]
하려면 별명 으로 래핑하여이를 수행 할 수 있습니다 . 그렇게하려면 키 ID ~/.gitconfig
또는 프로젝트 특정 .git/config
파일 을 설정하고 싶을 것입니다 . 이 프로세스에 대한 자세한 내용은 git 커뮤니티 책 에서 볼 수 있습니다 . 서명 태그는 커밋마다 서명하는 것보다 훨씬 유용합니다.
답변
자동 서명이 git 버전 2.0 이전에 작동하게하려면 커밋을 위해 git alias를 추가해야합니다.
# git config --global alias.commit commit -S
[alias]
commit = commit -S
답변
커밋 또는 태그에 서명 한 경우 전체 기록을 승인한다는 의미는 아닙니다. 커밋의 경우 변경 사항에 서명하고 태그의 경우에만 서명하십시오. 의미가 무엇인지 정의해야합니다. 변경 내용을 가져 왔을 수도 있지만 그렇지 않은 경우도 있습니다 (다른 사람이 리모컨으로 푸시했기 때문). 또는 원하지 않는 변경 사항이지만 태그에 서명했습니다.
일반적인 OSS 프로젝트에서는 이것이 일반적이지 않을 수 있지만, 지금은 코드 만 터치하고 전체 기록을 읽지 않는 엔터프라이즈 시나리오에서는 눈에 띄지 않을 수 있습니다.
커밋에 서명하는 것은 다른 부모에게 리베이트되거나 체리 피킹 될 경우 문제가됩니다. 그러나 수정 된 커밋이 실제로 확인하는 “원본”커밋을 가리킬 수 있다면 좋을 것입니다.