Git의 사인 오프 기능은 무엇입니까?


답변:


536

사인 오프는 Linux 커널과 다른 프로젝트에 패치를 가져 오기위한 요구 사항이지만 대부분의 프로젝트는 실제로이를 사용하지 않습니다.

그것은의 여파로 소개 된 SCO 소송 , (그리고 SCO에서 저작권 침해의 다른 비난 A와, 실제로 법원에 찍어 본적 대부분의) 원산지 개발자 인증서 . 문제의 패치를 만들었 음을 증명하거나, 귀하가 알고있는 한도 내에서 적절한 오픈 소스 라이센스하에 작성되었거나 다른 사람이 귀하에게 제공했음을 증명하는 데 사용됩니다. 그 조건에 따라 다른. 이를 통해 문제의 코드의 저작권 상태를 책임지는 일련의 사람들을 구성하여 적절한 무료 소프트웨어 (오픈 소스) 라이센스로 배포되지 않은 저작권이있는 코드가 커널에 포함되지 않도록 할 수 있습니다.


91
설명 된 의미는 Signed-off-by:Linux 커널 프로젝트 (및 Git 프로젝트 자체)에 의해 커밋 메시지 라인에 할당 된 의미입니다 . 그러나 다른 프로젝트의 경우 프로젝트와 같이 프로젝트에 의미를 부여하지 않는 한 (예 : Linux의 SubmittingPatches 또는 Git의 SubmittingPatches 와 같은) 해당 라인은 의미가 없습니다 .
Chris Johnsen

39
커밋 메시지에서 왜 이렇게해야합니까? 커밋에 저자가 첨부되어 있다고 생각했는데 SHA1 해시의 일부입니까?
Leif Andersen

34
@Leif Mere 저작 정보가 충분하지 않습니다. 패치를 작성했을 수도 있지만 유닉스의 일부 코드를 기반으로 패치를 작성했다면 GPL로 배포 할 권한이 없습니다 (적어도 상위 사람의 서명을받지 않은 상태). 또는 패치는 커널 트리에서 시작하기 전에 여러 다른 관리자 사이에서 패치를 만들 수 있습니다. 서명은 보관 체인을 나타냅니다. 내가 연결 한 원산지 증명서를 읽으십시오. 이것이 사인 오프 라인을 추가 할 때의 의미입니다. "저자"헤더가 정확하지 않을 수 있으며, 원산지 증명서의 모든 내용과 반드시 ​​동의하는 것은 아닙니다.
Brian Campbell

68
PGP 키가 없으면 사인 오프가 정품인지 어떻게 확인할 수 있습니까?
HRJ December

7
@HRJ 사인 오프의 진위가 실제로 당신에게 있습니다 (커뮤터). 저자가 아니라 서명 한 자신도 아닙니다. 나중에 누군가 (주로 서명 된) 이의가 유효하지 않은 이의를 제기하는 경우, 귀하는 자신이 동의 한 것을 증명하는 이메일 또는 무언가를 가지고있는 것이 좋습니다. Commiter는 Blob이 GPG 서명이 아닌 경우 (IMHO는 약한 방어이지만 ...) 그러한 Blob을 커밋하지 않았다고 말할 수 있습니다. 이 경우 커미터는 -S를 사용하여 원을 닫을 수 있습니다. 이제 -S와 -s를 사용하면 커미터의 단어를 기반으로 한 일련의 양육권을 가지게되며, 일부 저자가 작성한 코드는 일부 서명 된 상위 사용자가 사용할 수 있습니다.
Dr Beco

70

사인 오프는 커밋 메시지의 끝에있는 라인으로, 누가 커밋의 작성자인지를 인증합니다. 주요 목적은 특히 패치를 사용하여 누가 무엇을했는지 추적하는 것입니다.

커밋 예 :

Add tests for the payment processor.

Signed-off-by: Humpty Dumpty <humpty.dumpty@example.com>

오픈 소스 프로젝트에 사용되는 경우 사용자 실명을 포함해야합니다.

지점 관리자가 패치를 병합하기 위해 패치를 약간 수정해야하는 경우 제출자에게 다시 정의하도록 요청할 수 있지만 비생산적입니다. 그는 코드를 조정하고 마지막에 사인을 내려서 원래 작성자가 여전히 패치에 대한 크레딧을 얻도록 할 수 있습니다.

Add tests for the payment processor.

Signed-off-by: Humpty Dumpty <humpty.dumpty@example.com>

[Project Maintainer: Renamed test methods according to naming convention.]
Signed-off-by: Project Maintainer <project.maintainer@example.com>

출처 : http://gerrit.googlecode.com/svn/documentation/2.0/user-signedoffby.html


38
authorgit commit 필드에 의해 중복되지 않습니까? 난 항상 별도 있었다 그 이유는 생각 authorcommitter필드. 저자는 패치 작성자이고 커미터는 패치를 적용하고 푸시 한 사람입니다.
Leif Gruenwoldt

10
커밋 작성자가 누구인지 실제로 증명 합니까 ? 나는 그렇게 생각하지 않기 때문에 -S (--gpg-sign)만큼이나 의미합니다. GPG 서명이 훨씬 신뢰할 만하지 만 누군가가 이름과 전자 메일로 "Signed-off-by"행을 추가 할 수 있다고 생각합니다.
hdl

1
“사인 오프는 커밋 메시지의 끝에있는 라인으로, 누가 커밋의 작성자인지를 인증합니다. 주요 목적은 특히 패치를 통해 누가 무엇을했는지 추적하는 것입니다.” — 거의 확실하지 않습니다 (특히 첫 번째 문장). 반례로서, 예를 들어 b2c150d3aa (VonC의 답변에 링크 됨)를 참조하십시오 . 여기에는 두 개의 서명 헤더가 있습니다. 하나는 저자 에 의해, 하나는 관리자에 의해. 이것은 Git 및 Linux 프로젝트에서 일반적인 관행입니다.
Guildenstern

(이전 의견에서 계속됨) 사인 오프 란 특정 조건에서 커밋을 작성 했거나 위에서 언급 한 조건을 충족 한 사람이 작성한 것을 전달한다는 의미입니다. 따라서 인증 체인과 같은 것을 형성합니다.
Guildenstern

위의 업데이트 : 마지막 회신에서 무언가를 놓친 것으로 나타 났으 므로이 답변을 과소 평가했습니다. 저자는 "코드 조정"에 대해서는 부분적으로는 정확하지만 "사인 오프"트레일러를 잘못 강조합니다. 설명서에는 (예제에서와 같이) 브라켓 트레일러를 추가해야한다는 내용이 나와 있습니다. 따라서 사인 오프 와 연계 하여 통합 자 / 유지 보수 자와 같은 사람들이 작은 변화를 추가 할 수 있습니다. 그러나 사인 오프는 여전히 내가 설명한 것입니다.
Guildenstern

30

git 2.7.1 (2016 년 2 월 )은 David A. Wheeler ( )에 의해 커밋 b2c150d (2016 년 1 월 5 일 )를 분명히합니다 . ( Junio ​​C Hamano의해 합병 -- 커밋 7aae9ba , 2016 년 2 월 5 일)david-a-wheeler
gitster

git commit매뉴얼 페이지에 포함 된 내용 :

-s::
--signoff::

Signed-off-by커밋 로그 메시지 끝에 커미터별로 줄을 추가 합니다.
사인 오프의 의미는 프로젝트에 따라 다르지만 일반적으로 커미터가 동일한 라이센스로이 작업을 제출할 권한이 있으며 개발자 원산지 증명서에 동의한다는 것을 증명합니다 ( 자세한 내용 은 https://developercertificate.org 참조 ).


설명하는 설명서 확장 --signoff

--signoff의미가 무엇인지 자세하게 설명하기 위해 다양한 문서 (man page) 파일을 수정하십시오 .

이것은 "에서 영감을받은 : LWN 기사 '는 DCO에 겸손한 제안 바텀' (원산지 개발자 인증서) paulj는 지적"

내가 DCO와 함께이 문제가 있다는 것입니다 은 "추가 -s자식이 정말로 당신도 DCO 들었 의미하지 않는다 커밋에"인수를 ( 사람이 페이지는 DCO의 아무 곳이나 언급을하지 않습니다 ), 실제로 본 적이 될까요 않았다.git commit

그렇다면 어떻게 " signed-off-by" 의 존재가 발신자가 DCO에 동의하고 커밋했음을 의미 할 수 있습니까? 사실과 함께 SOB가없는 패치에 대한 목록의 "응답을 다시 보내서 signed-off-by커밋 할 수 있습니다 "라는 답장을 보았습니다 .

git의 문서를 확장하면 개발자가 --signoff그것을 사용할 때 이해했다고 쉽게 주장 할 수 있습니다.


이 사인 오프는 현재 (Git 2.15.x / 2.16, 2018 년 1 분기)에도 사용할 수 git pull있습니다.

W. Trevor King ( )의 commit 3a4d2c7 (2017 년 10 월 12 일)을 참조하십시오 . (의해 병합 - Junio C 하마노 -fb4cd88 커밋 2,017 06 십일)wking
gitster

pull: --signoff/--no-signoff" git merge"로 전달

병합은 걸릴 수 --signoff있지만 풀이 --signoff내려 가지 않으면 사용하기가 불편합니다. ' pull'를 사용하여 옵션을 가져 와서 전달하십시오.


2
문서를 참조하는 git commit documentation (마지막으로)에도 불구하고 -s 플래그는 지식과 동의 / 보증 자 / ??? 저는 SOB가 법적으로 매우 약하다고 생각합니다. SOB는 적어도 Linus가 사회적 문제를 해결하기 위해 다른 사람들이 고 관료 관료주의를 옹호한다는 점에서 발명했다고 생각합니다. 리누스는 아무것도 원하지 않았지만 닥 치기 위해 그 문제를 생각해 냈습니다. 내가 알 수있는 한, 변호사들은 당신에게 그것에 대한 많은 믿음을 투자하라고 조언하지 않을 것입니다. (저는 LWN에서 'paulj'입니다).
paulj

3
VonC, 당신은 진정한 Git 큐레이터입니다. Git 개발의 역사를 최종 사용자 대면 도구 및 문서로 추적하여 이와 같은 질문에 대해 체계적이고, 유익하며, 상호 참조 된 답변을 항상 가지고 있습니다. 감사합니다.
Guildenstern

3
@Guildenstern이 멋진 의견에 감사드립니다.
VonC

17

이 질문에 대한 좋은 답변이 있습니다. 더 광범위한 답변을 추가하려고 시도합니다. 즉, 현재 이러한 종류의 라인 / 헤더 / 트레일러가 무엇에 관한 것인지에 대해 설명하겠습니다. 특히 사인 오프 헤더에 대해서는별로 중요하지 않습니다 (유일한 헤더는 아닙니다).

“sign-off”(↑ 2)와 같은 헤더 또는 트레일러 (↑ 1)는 현재 Git 및 Linux와 같은 프로젝트에서 커밋을 위해 효과적으로 구조화 된 메타 데이터입니다. 이것들은 모두 메시지 본문의 "자유 형식"(구조화되지 않은) 부분 다음에 커밋 메시지의 끝에 추가됩니다. 이들은 일반적으로 콜론과 공백 ( ) 으로 구분되는 토큰-값 (또는 키-값 ) 쌍 :␣입니다.

앞서 언급했듯이“사인 오프”는 현재 실무에서 유일한 예고편이 아닙니다. 예를 들어 “Dirty Cow”와 관련된 이 commit을 참조하십시오 .

 mm: remove gup_flags FOLL_WRITE games from __get_user_pages()
 This is an ancient bug that was actually attempted to be fixed once
 (badly) by me eleven years ago in commit 4ceb5db9757a ("Fix
 get_user_pages() race for write access") but that was then undone due to
 problems on s390 by commit f33ea7f404e5 ("fix get_user_pages bug").

 In the meantime, the s390 situation has long been fixed, and we can now
 fix it by checking the pte_dirty() bit properly (and do it better).  The
 s390 dirty bit was implemented in abf09bed3cce ("s390/mm: implement
 software dirty bits") which made it into v3.9.  Earlier kernels will
 have to look at the page state itself.

 Also, the VM has become more scalable, and what used a purely
 theoretical race back then has become easier to trigger.

 To fix it, we introduce a new internal FOLL_COW flag to mark the "yes,
 we already did a COW" rather than play racy games with FOLL_WRITE that
 is very fundamental, and then use the pte dirty flag to validate that
 the FOLL_COW flag is still valid.

 Reported-and-tested-by: Phil "not Paul" Oester <kernel@linuxace.com>
 Acked-by: Hugh Dickins <hughd@google.com>
 Reviewed-by: Michal Hocko <mhocko@suse.com>
 Cc: Andy Lutomirski <luto@kernel.org>
 Cc: Kees Cook <keescook@chromium.org>
 Cc: Oleg Nesterov <oleg@redhat.com>
 Cc: Willy Tarreau <w@1wt.eu>
 Cc: Nick Piggin <npiggin@gmail.com>
 Cc: Greg Thelen <gthelen@google.com>
 Cc: stable@vger.kernel.org
 Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

위의 "사인 오프"트레일러 외에 다음이 있습니다.

  • "Cc"(패치에 대한 알림)
  • “Acked-by”(코드 소유자가 인정한“나에게 좋아 보인다”)
  • “검토 자”(검토 됨)
  • "보고 및 검증"(문제보고 및 테스트 (본인))

Gerrit와 같은 다른 프로젝트에는 자체 헤더와 관련 의미가 있습니다.

참조 : https://git.wiki.kernel.org/index.php/CommitMessageConventions

이야기의 교훈

이 특정 메타 데이터에 대한 초기 동기가 일부 법적 문제 (다른 답변으로 판단) 였음에도 불구하고 이러한 메타 데이터의 실습은 저작권 체인을 형성하는 경우를 다루는 것 이상으로 진행되었습니다.

[↑ 1] : man git-interpret-trailers
[↑ 2] : 이들은 때때로 "sob"(초기)이라고도합니다.


2
재미있는 사용 사례. +1
VonC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.