ข้อดีและข้อเสียของการเซ็นสัญญาและแท็กใน Git คืออะไร


109

ดังนั้นมีคนดูงานของฉันและเขาก็บอกฉันว่าฉันควรเซ็นสัญญาและแท็กเข้ารหัส เมื่อถูกถามว่าทำไมเขาไม่รู้จะอธิบายให้ฉันฟังและพูดว่า "มันเป็นเรื่องดีที่ต้องทำ"

พยายามหลีกเลี่ยงสถานการณ์ลิงชิมแปนซีที่เห็นได้ชัดทำไมฉันถึงต้องทำอย่างนั้นจริงๆ? มีข้อดีที่แตกต่างและไม่มีข้อเสียจริง ๆ มากมายจริง ๆ หรือไม่

อะไรคือเหตุผลเชิงปฏิบัติที่จะทำให้ฉันต้องการลงชื่อในทุกการกระทำและแท็กที่ฉันทำ


3
ฉันคิดว่ามันมีทางเดินกระดาษที่ผูกมัดให้คุณ ฉันไม่เคยเซ็นสัญญาก่อนหน้านี้ทั้งกับ git หรือระบบควบคุมแหล่งอื่น ๆ หากเพื่อนของคุณเชื่อว่ามีความเสี่ยงที่จะหลอกลวง บริษัท ของคุณอาจมีปัญหาด้านความปลอดภัยที่ใหญ่กว่า
James

@ James: มันไม่ใช่งานของ บริษัท แต่ฉันมีส่วนร่วมในโครงการโอเพ่นซอร์สและปิด
Madara Uchiha

@James: "ปัญหาความปลอดภัยที่ใหญ่กว่า" --- ชอบอะไรนะ การเซ็นชื่อเป็นวิธีการทางเทคนิคในการแก้ปัญหาเหรอ
zerkms

8
mikegerwitz.com/papers/git-horror-story.htmlเป็นจุดเริ่มต้นสำหรับกรณีการใช้งานของ commits และแท็กที่ลงนามแล้ว

1
@James เมื่อคุณส่งมอบโดยใช้บัญชี SVN ของคุณคุณลงนามในการส่งมอบ เมื่อคุณคอมมิทกับ git global config คุณเป็นผู้มีอำนาจเพียงคนเดียวที่ยืนยันว่าคุณเป็นผู้แต่ง
Florian Margaine

คำตอบ:


102

(ส่วนใหญ่มาจากเรื่องสยองขวัญของ Git: ความสมบูรณ์ของพื้นที่เก็บข้อมูลที่มีการเซ็นสัญญา - อ่านได้ดีมากและมีข้อมูลมากกว่าที่ฉันจะตอบได้)

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

เช่นเดียวกับตัวอย่าง:

$ git config --global user.name 'Madara Uchiha'
$ git config --global user.email muchiha@example.com

ที่นั่นฉันได้เปลี่ยนการตั้งค่าคอมไพล์ของฉันเพื่อแกล้งฉันว่าคุณ และตอนนี้ฉันสามารถออกไปและปล่อยให้คนที่มุ่งมั่นอย่างใดเข้ามาในการสร้างการผลิตและดูเหมือนว่าคุณได้ทำมัน

ด้วยการลงนามในการกระทำ (และแท็ก) คุณสามารถพิสูจน์ได้ว่าการกระทำและแท็กบางอย่างมาจากคุณ นั่นคือกุญแจสำคัญในทุกสิ่ง - โดยการเซ็นสัญญาคุณได้บอกว่ามันเป็นงานของคุณ

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

มีการถกเถียงกันว่าควรลงนามมอบอำนาจทุกครั้งหรือไม่ จากการลงนาม GPG สำหรับคอมมิทคอม? (ย้อนหลังใน '09), Linus เขียนว่า:

การลงนามแต่ละการกระทำนั้นโง่โดยสิ้นเชิง หมายความว่าคุณทำให้เป็นอัตโนมัติและคุณทำให้ลายเซ็นมีค่าน้อยลง นอกจากนี้ยังไม่ได้เพิ่มคุณค่าที่แท้จริงใด ๆ ตั้งแต่วิธีการทำงานของห่วงโซ่ DAG คอมไพล์ของ SHA1 คุณเพียงแค่ต้องการลายเซ็นเดียวเพื่อให้การกระทำทั้งหมดเข้าถึงได้จากสิ่งนั้น ดังนั้นการลงนามในแต่ละการกระทำจึงไม่มีจุด

มากขึ้นเกี่ยวกับความคิดในการเข้าสู่ระบบคอมไพล์สามารถอ่านได้ที่นั่น

ที่กล่าวว่ามันทำให้ทางเข้าไปในคอมไพล์อย่างไรก็ตาม

ดูเหมือนว่าจะมีฉันทามติส่วนใหญ่ว่าการลงนามในสัญญานั้นไม่จำเป็น แต่การลงชื่อแท็กนั้นดีมาก โพสต์บล็อกที่เชื่อมโยงที่ด้านบนแสดงให้เห็นว่าควรลงนามทุกอย่าง อย่างที่ฉันพูดมีการถกเถียงกันว่าการกระทำทุกอย่างเป็นสิ่งจำเป็นหรือไม่

กุญแจสำคัญในการอภิปราย "ลงชื่อทุกกระทำ" อาจเกี่ยวข้องกับขั้นตอนการทำงานที่คุณใช้ คนส่วนใหญ่ทำคอมมิชชันใน repo ท้องถิ่นของพวกเขาแล้วกดชุดนั้น มันควรจะเพียงพอที่จะติดแท็กคอลเลกชันสุดท้าย (สมมติว่าคุณตรวจสอบให้แน่ใจว่าการเปลี่ยนแปลงทั้งหมดถูกต้อง) หากคุณกำลังทำงานในสภาพแวดล้อมที่มีการคอมมิชชันเดี่ยวจำนวนมากความแตกต่างระหว่างแท็กและการคอมมิชชันจะน้อยลง ... ชัดเจน - และการเซ็นสัญญาอาจมีประโยชน์มากกว่า


5
อาจจะเพียงพอ (เพียงติดแท็กสุดท้าย) แต่ทำไมคุณไม่ติดแท็กทุกการกระทำ?
hayd

3
ในฐานะคนขี้เกียจขี้เกียจที่ไม่ได้ใช้แท็กฉันกำลังอัปเดตความคิดเห็นก่อนหน้านี้ ในการกำหนดค่า git บนเวิร์กสเตชันของฉันฉันมีcommit.gpgsign = trueและฉันสามารถตรวจสอบไม่มีข้อเสีย แม้ว่ามันอาจจะโง่ แต่ก็ไม่ได้ดูแพงเกินไป
pnovotnak

3
ฉันจะไปกับ @pnovotnak กับอันนี้ทำไมคุณไม่ทำอย่างนั้น? ฉันหมายความว่าฉันเซ็นสัญญาและนักพัฒนาคนอื่นไม่ได้อยู่ในโครงการเดียวกันใครสนใจ? แต่ถ้าแฮ็กเกอร์พยายามที่จะขโมยข้อมูลประจำตัวของฉันฉันก็สามารถชี้ให้เห็นการลงนาม ดูเหมือนว่าการเซ็นชื่อมีข้อได้เปรียบเท่านั้น ฉันยอมรับว่าลายเซ็นของคุณมีค่าน้อยลง แต่คุณแลกเปลี่ยนสิ่งนี้โดยไม่ต้องคิดถึงมัน ความปลอดภัยโดยทั่วไปฟรี
Jappie Kerk

2
ความคิดเห็นส่วนตัวของฉันคือการเซ็นทุกการกระทำเป็นสิ่งที่ดี ฉันค่อนข้างแน่ใจว่าการกระทำที่มีลายเซ็นของฉันนั้นมาจากฉันในขณะที่มันเป็นเรื่องเล็กน้อยที่จะปลอมตัวเป็นผู้แต่งด้วยวานิลลา ฉันค่อนข้างจะเรียกมันว่าการตรวจสอบฟรีมันเป็นคนที่คุณคิดว่ามันจะไม่ใช่ความปลอดภัย
berto

1
@JosiahYoder ไม่ Github จะไม่ปฏิเสธเนื่องจากอีเมลไม่ได้ให้บริการ สมมติว่าคุณกำลังโฮสต์รหัสของคุณในบริการอื่น (เช่น: Bitbucket) และคุณต้องการย้ายพื้นที่เก็บข้อมูลของคุณไปยังผู้ให้บริการรายอื่น มันจะป้องกันผู้ใช้จากการถ่ายโอนพื้นที่เก็บข้อมูล (หลายกระทำโดยผู้ใช้หลายคน) หรือการสร้างมิเรอร์ ฯลฯ มันเป็นคุณสมบัติของ DVCS
Ricky Notaro-Garcia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.