ฟีเจอร์ลงชื่อออกใน Git มีไว้เพื่ออะไร?


คำตอบ:


536

การออกจากระบบเป็นข้อกำหนดสำหรับการติดตั้งแพตช์ในเคอร์เนล Linux และโครงการอื่น ๆ สองสามโครงการ แต่โครงการส่วนใหญ่ไม่ได้ใช้งานจริง

มันได้รับการแนะนำในการปลุกของคดี SCO (และข้อกล่าวหาอื่น ๆ ของการละเมิดลิขสิทธิ์จาก SCOซึ่งส่วนใหญ่ที่พวกเขาไม่เคยเอาไปศาล) เป็นนักพัฒนาหนังสือรับรองแหล่งกำเนิด ใช้เพื่อบอกว่าคุณรับรองว่าคุณได้สร้างแพทช์ที่เป็นปัญหาหรือรับรองว่าคุณได้รับความรู้ที่ดีที่สุดมันถูกสร้างขึ้นภายใต้ใบอนุญาตโอเพนซอร์ซที่เหมาะสมหรือมอบให้กับคุณโดยบุคคลอื่น ภายใต้ข้อกำหนดเหล่านั้น สิ่งนี้สามารถช่วยสร้างเครือข่ายของคนที่รับผิดชอบต่อสถานะลิขสิทธิ์ของรหัสที่เป็นปัญหาเพื่อช่วยให้แน่ใจว่ารหัสลิขสิทธิ์ที่ไม่ได้เผยแพร่ภายใต้ลิขสิทธิ์ซอฟต์แวร์ฟรี (โอเพ่นซอร์ส) ไม่รวมอยู่ในเคอร์เนล


91
ควรสังเกตว่าความหมายที่อธิบายคือสิ่งที่กำหนดให้กับSigned-off-by:บรรทัดข้อความการคอมมิชชันโดยโครงการเคอร์เนล Linux (และโครงการ Git เอง) อย่างไรก็ตามสำหรับโครงการอื่น ๆ บรรทัดดังกล่าวไม่มีความหมายเว้นแต่ว่าโครงการจะกำหนดความหมายให้กับพวกเขา (เช่นโดยอธิบายไว้ในเอกสารประกอบของโครงการเช่น Linux's SubmittingPatchesหรือ Gm's SubmittingPatchesของ Git )
Chris Johnsen

39
เหตุใดจึงต้องทำสิ่งนี้ในข้อความยืนยัน ฉันคิดว่าคอมมิทมีนักเขียนแนบกับพวกเขาและพวกเขาเป็นส่วนหนึ่งของแฮช SHA1?
Leif Andersen

34
@Leif เพียงข้อมูลการประพันธ์ไม่เพียงพอ ฉันอาจจะเขียนโปรแกรมปะแก้ แต่ถ้าฉันใช้มันกับโค้ดบางตัวจาก Unix ฉันจะไม่ได้รับอนุญาตให้เผยแพร่ภายใต้ GPL (อย่างน้อยโดยไม่ต้องมีการลงชื่อออกจากบุคคลที่สูงกว่า) หรือแพทช์อาจทำให้มันอยู่ระหว่างผู้ดูแลหลาย ๆ คนก่อนที่จะคดเคี้ยวในเคอร์เนลทรี signoff บ่งชี้ถึงห่วงโซ่ของการดูแล อ่านใบรับรองแหล่งกำเนิดสินค้าที่ฉันเชื่อมโยง; นั่นคือความหมายเมื่อคุณเพิ่มบรรทัด signoff ส่วนหัว "ผู้แต่ง" อาจไม่ถูกต้องและไม่จำเป็นต้องหมายความถึงข้อตกลงกับทุกสิ่งในใบรับรองแหล่งกำเนิด
Brian Campbell

68
หากไม่มีคีย์ PGP จะสามารถสร้างการลงชื่อออกเป็นของแท้ได้อย่างไร
HRJ

7
@HRJ ความจริงของการลงชื่อเข้าใช้นั้นเป็นของคุณจริงๆ ไม่ได้อยู่ที่ผู้เขียนไม่ได้ลงนามเอง หากมีใครบางคนในภายหลัง (ส่วนใหญ่ผู้ที่ลงชื่อออก) โต้แย้งว่ามันไม่ถูกต้องคุณควรมีอีเมลหรือบางสิ่งที่พิสูจน์ว่าเขาเห็นด้วย ผู้ดูแลอาจบอกว่าเขาไม่ได้ทำตัวกลมกลืนถ้าหยดนั้นไม่ได้ลงนามใน GPG (IMHO เป็นการป้องกันที่อ่อนแอ แต่ ... ) ในกรณีนี้ผู้ใช้สามารถใช้ -S เพื่อปิดวงกลม ขณะนี้มี -S และ -s คุณมีห่วงโซ่การดูแลตามคำพูดของ commiter ว่ารหัสที่เขียนโดยผู้เขียนบางคนได้รับอนุญาตให้ใช้โดยผู้ที่ลงชื่อบางคนสูงกว่า
ดร. 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
ไม่ซ้ำซ้อนโดยauthorเขตข้อมูลของคอมไพล์หรือไม่ ฉันมักจะคิดว่านั่นเป็นสาเหตุที่มีการแยกauthorและcommitterเขตข้อมูล ผู้เขียนเป็นนักเขียนแพทช์และผู้สื่อสารเป็นคนที่ใช้และผลักดันแพทช์
Leif Gruenwoldt

10
มันเป็นการรับรองว่าใครเป็นผู้สร้างการกระทำจริงๆ ฉันหมายถึงเท่าที่ -S (--gpg-sign) ทำเพราะฉันไม่คิดอย่างนั้น ฉันคิดว่าทุกคนสามารถเพิ่มบรรทัด "ลงชื่อออกโดย" ด้วยชื่อและอีเมลใด ๆ ในขณะที่ลายเซ็น GPG มีความน่าเชื่อถือมากขึ้น แต่บางทีฉันผิด
hdl

1
“ การลงชื่อออกเป็นบรรทัดที่ท้ายข้อความยืนยันซึ่งรับรองว่าใครเป็นผู้เขียนข้อความ วัตถุประสงค์หลักคือเพื่อปรับปรุงการติดตามว่าใครทำอะไรโดยเฉพาะอย่างยิ่งกับแพตช์” - เกือบผิดอย่างแน่นอน (โดยเฉพาะประโยคแรก) ตามตัวอย่างให้ดูตัวอย่างb2c150d3aa (เชื่อมโยงกับคำตอบของ VonC)ซึ่งมีสองส่วนหัวที่ลงชื่อออกโดย; หนึ่งโดยผู้เขียนและหนึ่งโดยผู้ดูแล นี่คือการปฏิบัติทั่วไปในโครงการ Git และ Linux
Guildenstern

(ต่อจากความคิดเห็นก่อนหน้า) ในการลงชื่อออกหมายความว่าคุณได้มอบหมายการกระทำภายใต้เงื่อนไขบางอย่างหรือว่าคุณกำลังส่งผ่านสิ่งที่ได้รับการประพันธ์โดยคนที่มี (stribed เพื่อ) ตอบสนองเงื่อนไขดังกล่าวข้างต้น ดังนั้นมันจึงเป็นรูปแบบของการรับรองโซ่
Guildenstern

อัปเดตด้านบน: ปรากฎว่าฉันพลาดบางสิ่งบางอย่างในคำตอบสุดท้ายของฉันดังนั้นฉันจึงประเมินคำตอบนี้ต่ำเกินไป ผู้เขียนถูกต้องบางส่วนเกี่ยวกับ“ การปรับรหัส” แต่ให้ความสำคัญกับตัวอย่าง“ ลงชื่อออก” ผิด เอกสารประกอบบอกว่าคุณควรเพิ่มตัวอย่างที่มีวงเล็บ (ดังในตัวอย่างในคำตอบ) ซึ่งแจ้งเกี่ยวกับเรื่องนั้น ดังนั้นการลงชื่อออกร่วมกับที่สามารถนำมาใช้เพื่อเพิ่มการเปลี่ยนแปลงเล็ก ๆ โดยคนเช่น integrator / ผู้ดูแล แต่การออกจากระบบยังคงทำหน้าที่เป็นหลักตามที่ฉันได้อธิบายไว้
Guildenstern

30

คอมไพล์ 2.7.1 (กุมภาพันธ์ 2016) ชี้แจงว่าในการกระทำ b2c150d (5 มกราคม 2016) โดยเดวิดเอวีลเลอร์ (david-a-wheeler )
(ผสานโดยJunio ​​C Hamano - gitster-ในการกระทำ 7aae9ba , 5 กุมภาพันธ์ 2016)

git commitหน้าคนตอนนี้รวมถึง:

-s::
--signoff::

เพิ่มSigned-off-byบรรทัดโดยคอมมิทเตอร์ในตอนท้ายของข้อความบันทึกการกระทำ
ความหมายของการออกจากระบบขึ้นอยู่กับโครงการ แต่โดยทั่วไปแล้วมันรับรองว่าผู้เดินทางมีสิทธิ์ที่จะส่งงานนี้ภายใต้ใบอนุญาตเดียวกันและตกลงที่จะมอบใบรับรองผู้พัฒนาแหล่งกำเนิดสินค้า (ดูhttps://developercertificate.orgสำหรับข้อมูลเพิ่มเติม)


ขยายเอกสารอธิบาย --signoff

แก้ไขไฟล์เอกสาร (man page) ต่างๆเพื่ออธิบายรายละเอียดเพิ่มเติมว่าอะไร --signoffหมายอย่างไร

สิ่งนี้ได้รับแรงบันดาลใจจาก " บทความ lwn 'Bottomley: ข้อเสนอเล็กน้อยใน DCO' " (ใบรับรองนักพัฒนาแหล่งกำเนิด) ที่ paulj ตั้งข้อสังเกตไว้:

ปัญหาที่ฉันมีกับ DCO คือว่ามีการเพิ่ม " -s" อาร์กิวเมนต์คอมไพล์กระทำไม่จริงหมายความว่าคุณเคยได้ยินแม้แต่ของ DCO ( หน้าคนทำให้การพูดถึงที่ใดก็ได้ DCO ไม่มี ) ไม่เคยคิดว่ามันเห็นจริงgit commit

ดังนั้นการมีอยู่ของ " signed-off-by" ในทางใดที่บ่งบอกว่าผู้ส่งเห็นด้วยและตกลงกับ DCO อย่างไร เมื่อรวมกับความจริงแล้วฉันได้เห็นคำตอบในรายการไปยังชุดข้อมูลแก้ไขที่ไม่มี SOB ซึ่งไม่ได้พูดอะไรมากไปกว่า "ส่งอีกครั้งด้วยsigned-off-byเพื่อให้ฉันสามารถยืนยันได้"

การขยายเอกสารของ git จะทำให้ง่ายขึ้นในการโต้แย้งว่านักพัฒนาเข้าใจ--signoffเมื่อใช้


โปรดทราบว่าขณะนี้การลงนามนี้ (สำหรับ Git 2.15.x / 2.16, Q1 2018) มีให้git pullเช่นกัน

ดูกระทำ 3a4d2c7 (12 ตุลาคม 2017) โดยดับบลิวเทรเวอร์คิง (wking )
(ผสานโดยJunio ​​C Hamano - gitster- in fb4cd88 , 06 พ.ย. 2017)

pull: ส่ง--signoff/--no-signoffไปที่ " git merge"

การผสานสามารถทำได้--signoffแต่ไม่จำเป็นต้องดึงผ่าน--signoffลงมาจึงไม่สะดวกที่จะใช้ อนุญาตให้ ' pull' ใช้ตัวเลือกและส่งผ่าน


2
ถึงแม้จะมีเอกสารคอมไพล์คอมมิชชัน (ในที่สุด) การอ้างอิงเอกสารแฟล็ก -s ยังต้องการแสดงความรู้และข้อตกลง / การยอมรับ / ??? ฉันเชื่อว่า SOB นั้นอ่อนแอตามกฎหมายมาก อย่างน้อยก็ฉันคิดว่าอย่างน้อยก็มีการคิดค้นโดย Linus เพื่อแก้ปัญหาสังคมที่คนอื่นกำลังเรียกร้องให้ระบบราชการสูงค่าใช้จ่าย ไลนัสไม่ต้องการอะไร แต่มาพร้อมกับสิ่งนั้นเพื่อปิดมัน เท่าที่ฉันสามารถบอกได้ทนายความจะไม่แนะนำให้คุณลงทุนมากหากมีศรัทธาในมัน (ฉันคือ 'paulj' บน LWN)
paulj

3
VonC คุณเป็นผู้ดูแล Git ตัวจริง คุณมักจะมีคำตอบที่มีโครงสร้างข้อมูลและอ้างอิงที่ดีในคำถามเช่นนี้ - ติดตามประวัติของการพัฒนา Git ไปจนถึงเครื่องมือและเอกสารที่ผู้ใช้หันมาใช้ในที่สุด ขอบคุณมากสำหรับสิ่งนั้น
Guildenstern

3
@Guildenstern ขอบคุณสำหรับความคิดเห็นที่ดีนี้
VonC

17

มีคำตอบที่ดีสำหรับคำถามนี้ ฉันจะพยายามเพิ่มคำตอบที่กว้างขึ้นนั่นคือเกี่ยวกับสิ่งที่บรรทัด / หัว / ตัวอย่างเหล่านี้เกี่ยวกับการปฏิบัติในปัจจุบัน ไม่มากเกี่ยวกับส่วนหัวการลงชื่อออกโดยเฉพาะ (ไม่ใช่เพียงส่วนหัวเดียว)

ส่วนหัวหรือตัวอย่าง (↑ 1) เช่น“ sign-off” (↑ 2) คือในการปฏิบัติปัจจุบันในโครงการเช่น Git และ Linux โครงสร้างข้อมูลเมตาได้อย่างมีประสิทธิภาพสำหรับการกระทำ สิ่งเหล่านี้จะถูกผนวกเข้ากับส่วนท้ายของข้อความยืนยันหลังจากส่วน "รูปแบบอิสระ" (ไม่มีโครงสร้าง) ของเนื้อความของข้อความ คู่เหล่านี้คือโทเค็น - ค่า (หรือคีย์ - ค่า ) โดยทั่วไปจะคั่นด้วยโคลอนและเว้นวรรค ( :␣)

เช่นเดียวกับที่ฉันกล่าวถึง“ การลงชื่อออก” ไม่ใช่ตัวอย่างเดียวในการปฏิบัติปัจจุบัน ดูตัวอย่างการกระทำนี้ที่เกี่ยวข้องกับ“ Dirty Cow”:

 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>

นอกเหนือจากตัวอย่าง“ การลงชื่อออก” ในตัวอย่างข้างต้นแล้วยังมี:

  • “ สำเนาถึง” (ได้รับแจ้งเกี่ยวกับชุดข้อมูลแก้ไข)
  • “ Acked-by” (ยอมรับโดยเจ้าของรหัส“ ดูดีสำหรับฉัน”)
  • “ สอบทานโดย” (สอบทานแล้ว)
  • “ รายงานและทดสอบโดย” (รายงานและทดสอบปัญหา (ฉันถือว่า))

โครงการอื่น ๆ เช่น Gerrit มีส่วนหัวและความหมายที่เกี่ยวข้องสำหรับพวกเขา

ดู: https://git.wiki.kernel.org/index.php/CommitMessageConventions

นิทานสอนใจ

มันเป็นความประทับใจของฉันที่แม้ว่าแรงจูงใจเริ่มต้นสำหรับเมตาดาต้านี้โดยเฉพาะคือประเด็นทางกฎหมาย (ตัดสินโดยคำตอบอื่น ๆ ) การฝึกฝนเมตาดาต้าดังกล่าวมีความก้าวหน้าเกินกว่าจะจัดการกับกรณีของการสร้างเครือข่ายผู้ประพันธ์

[↑ 1]: man git-interpret-trailers
[↑ 2]: บางครั้งก็เรียกว่า "สะอื้น" (ชื่อย่อ) ดูเหมือนว่า


2
กรณีการใช้งานที่น่าสนใจ +1
VonC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.