ฉันควรใช้อดีตกาลหรือปัจจุบันในการคอมไพล์ข้อความ? [ปิด]


531

ฉันอ่านหนึ่งครั้งว่าคอมไพล์ข้อความควรอยู่ในกาลปัจจุบันที่จำเป็นเช่น "เพิ่มการทดสอบสำหรับ x" ฉันมักจะพบว่าตัวเองใช้อดีตกาลเช่น "เพิ่มการทดสอบสำหรับ x" ซึ่งรู้สึกเป็นธรรมชาติมากขึ้นสำหรับฉัน

นี่คือ John Resig ล่าสุดที่กระทำการแสดงทั้งสองในหนึ่งข้อความ

ปรับแต่ง jQuery เพิ่มเติมบางผลลัพธ์ในการทดสอบการจัดการ แก้ไขลำดับของผลการทดสอบที่คาดไว้

มันสำคัญไหม ฉันควรใช้แบบไหน


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

คำถามที่คล้ายกัน: stackoverflow.com/questions/1753808/…
wip


ดูเพิ่มเติมที่github.com/agis-/git-style-guide
Agis

3
@Eonil ถ้ามันปิดเพราะมีความคิดเห็นตามที่นี่มันจะถูกปิดเพราะเป็นความเห็นที่นั่นเช่นกัน
วงล้อประหลาด

คำตอบ:


601

การตั้งค่าสำหรับข้อความการผูกมัดในปัจจุบันที่มีความจำเป็นและมีสไตล์นั้นมาจาก Git เอง จากDocumentation / SubmittingPatchesใน repo Git:

อธิบายการเปลี่ยนแปลงของคุณในอารมณ์ที่จำเป็นเช่น "make xyzzy do frotz" แทน "[แพทช์นี้] ทำให้ xyzzy do frotz" หรือ "[I] เปลี่ยน xyzzy เป็น frotz" ราวกับว่าคุณกำลังสั่งให้ codebase เปลี่ยน พฤติกรรม.

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


90
ฉันคิดว่านี่เป็นตัวเลือกที่ยอดเยี่ยม ลองคิดดูสิว่าคอมมิชชั่นคืออะไรในรูปแบบต่าง ๆ : ชุดคำสั่งสำหรับวิธีการเปลี่ยนจากสถานะก่อนหน้าเป็นสถานะใหม่ เช่นเดียวกับที่ diff บอกว่า "เพิ่มบรรทัดนี้ที่นี่ลบบรรทัดนี้ที่นี่" ข้อความคอมมิชชันพูดในแง่เชิงคุณภาพ "ทำการเปลี่ยนแปลงนี้" (ใช่คอมไพล์จัดเก็บการคอมมิชชันเพียงแค่เป็นต้นไม้ที่มีเมตาดาต้า แต่สำหรับมนุษย์ส่วนสำคัญของการคอมมิตคือ diff)
Cascabel

124
คุณอาจเห็นการกระทำเป็นชุดคำสั่งสำหรับวิธีการเปลี่ยนจากสถานะก่อนหน้าเป็นสถานะใหม่ แต่ฉันเห็นว่ามันเป็นจุดตรวจสอบในวิวัฒนาการของรหัส สำหรับฉันข้อความคอมมิชชันคือบันทึกของสิ่งที่ได้ทำกับโค้ดตั้งแต่คอมมิชชันก่อนหน้า และสำหรับบันทึกที่ผ่านมากาลทำให้รู้สึกมากขึ้น หากคุณคิดว่าข้อความการส่งข้อความควรเป็นชุดของคำแนะนำดังนั้นกาลที่สำคัญคือหนทางที่จะไป ฉันไม่คิดอย่างนั้นจริงๆ
karadoc

10
@oschrenk: ไฟล์รุ่นต่อมาให้เหตุผล: "อธิบายการเปลี่ยนแปลงของคุณในอารมณ์ที่จำเป็นเช่น 'make xyzzy do frotz' แทน '[แพทช์นี้] ทำให้ xyzzy do frotz' หรือ '[I] เปลี่ยน xyzzy เป็น frotz 'ราวกับว่าคุณกำลังสั่งให้โค้ดเบสเปลี่ยนพฤติกรรมของมัน "
mipadi

44
ข้อความการส่งข้อความควรมีความจำเป็นนำเสนอความตึงเครียดเพราะคุณหรือคนอื่น ๆ อาจจบลงด้วยการทำrebaseหรือcherry-pickในกรณีนั้นการกระทำนั้นอาจถูกนำไปใช้นอกบริบทดั้งเดิม ดังนั้นข้อความคอมมิชชันควรเขียนแบบสแตนด์อโลนโดยไม่คาดหวังว่าผู้อ่านจะสามารถดูข้อความการกระทำโดยรอบได้ เมื่อคุณกำลังหยิบแพทช์เชอร์รี่คุณควรที่จะใช้ "แก้ไขอัลกอริทึม quicksort" หรือ "การเรียง: ปรับปรุงประสิทธิภาพ" แทน "แก้ไขข้อผิดพลาด # 124" หรือ "แก้ไขการเรียงลำดับเพื่อปรับปรุงประสิทธิภาพ"
Mikko Rantalainen

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

357

โครงการของคุณควรมักจะใช้อดีตกาล ไม่ว่าในกรณีใดโครงการควรใช้รูปแบบเดียวกันเสมอเพื่อความมั่นคงและชัดเจน

ฉันเข้าใจข้อโต้แย้งอื่น ๆ ที่โต้แย้งว่าใช้กาลปัจจุบัน แต่มักจะไม่ใช้ หัวข้อย่อยต่อไปนี้เป็นข้อโต้แย้งทั่วไปสำหรับการเขียนในปัจจุบันและการตอบสนองของฉัน

  • การเขียนในกาลปัจจุบันบอกบางคนว่าการใช้ความมุ่งมั่นจะทำอะไรมากกว่าสิ่งที่คุณทำ

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

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

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

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

ในที่สุดสำหรับโครงการที่ไม่เผยแพร่เช่น 99.99% ของเวลาที่บุคคลจะอ่านข้อความยืนยันสำหรับการอ่านประวัติ - ประวัติถูกอ่านในกาลที่ผ่านมา 0.01% ของเวลาที่จะตัดสินใจว่าควรใช้การคอมมิชชันนี้หรือรวมเข้ากับสาขา / พื้นที่เก็บข้อมูลของพวกเขาหรือไม่

  • ความมั่นคง นั่นเป็นวิธีในหลาย ๆ โครงการ (รวมถึงคอมไพล์เอง) นอกจากนี้เครื่องมือคอมไพล์ที่สร้างคอมมิท (เช่นการรวมคอมไพล์หรือย้อนกลับคอมไพล์) ก็ทำได้เช่นกัน

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

  • ผู้คนไม่เพียง แต่อ่านประวัติศาสตร์รู้ว่า "เกิดอะไรขึ้นกับ codebase นี้" แต่ยังต้องตอบคำถามเช่น "เกิดอะไรขึ้นเมื่อฉันเลือกการกระทำนี้" หรือ "สิ่งใหม่ ๆ จะเกิดขึ้นกับฐานรหัสของฉันเพราะสิ่งเหล่านี้ ฉันอาจจะหรืออาจจะไม่รวมในอนาคต "

ดูจุดแรก 99.99% ของเวลาที่บุคคลจะอ่านข้อความยืนยันสำหรับการอ่านประวัติ - ประวัติถูกอ่านในอดีตกาล 0.01% ของเวลาที่จะตัดสินใจว่าควรใช้การคอมมิชชันนี้หรือรวมเข้ากับสาขา / พื้นที่เก็บข้อมูลของพวกเขาหรือไม่ 99.99% เต้น 0.01%

  • มักจะสั้นกว่า

ฉันไม่เคยเห็นข้อโต้แย้งที่ดีที่บอกว่าใช้กาล / ไวยากรณ์ที่ไม่เหมาะสมเพราะมันสั้นกว่า คุณอาจบันทึกโดยเฉลี่ย 3 ตัวอักษรสำหรับข้อความมาตรฐาน 50 ตัว ที่ถูกกล่าวว่ากาลปัจจุบันโดยเฉลี่ยอาจจะสั้นกว่าไม่กี่ตัวอักษร

  • คุณสามารถตั้งชื่อให้คำมั่นสัญญากับชื่อตั๋วในตัวติดตามปัญหา / ฟีเจอร์ของคุณได้อย่างต่อเนื่อง (ซึ่งไม่ได้ใช้อดีตกาลแม้ว่าบางครั้งในอนาคต)

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

ประวัติ (เช่นกระทำข้อความ) เขียนเป็นสิ่งที่ทำในอดีต (เช่นปัญหาได้รับการแก้ไข)


79
ฉันได้ยินครั้งแรกในวันนี้เกี่ยวกับความชอบที่ควรจะเป็นสำหรับสไตล์ที่จำเป็น สำหรับฉันมันฟังดูแปลกประหลาดและแปลกประหลาดมากจนฉันตัดสินใจค้นหาความคิดเห็นเพิ่มเติม ฉันยินดีที่ได้เห็นฉันไม่ใช่คนเดียวที่คิดว่าอดีตกาลนั้นเป็นธรรมชาติสำหรับการส่งข้อความ :)
karadoc

56
git ที่สร้างขึ้นโดยอัตโนมัติการรวมและรีบูตยอมรับข้อความมีความจำเป็นและนำเสนอกาล ("ผสาน" ไม่ใช่ "ผสาน"; "Rebase" ไม่ใช่ "Rebased") ดังนั้นคุณอาจต้องการจับคู่นี้กับข้อความคอมมิทของคุณเองเพื่อความมั่นคง
mjs

13
ดูเหมือนว่าความแตกต่างระหว่างการมุ่งเน้นไปที่การเปลี่ยนแปลงซอฟต์แวร์ - "แก้ไข X ด้วยการทำ Y" - หรือที่เก็บ - "ทำ Y เพื่อแก้ไข X" +1 สำหรับการโต้เถียงที่ดี แต่ฉันคิดว่า repo มักจะมุ่งเน้นไปที่ตัวเองมากกว่าซอฟต์แวร์ที่เกิดขึ้น
l0b0

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

35
ความจำเป็นไม่ใช่ "ใหม่ตั้งแต่ git" ChangeLog นั้นมีมานานก่อนคอมไพล์และการใช้สิ่งจำเป็นนั้นเป็นสไตล์ที่แนะนำในโครงการ GNU เสมอ gnu.org/prep/standards/html_node/Style-of-Change-Logs.html
adl

81

ผมเขียนคำอธิบายฟูลเลอร์ใน365git

การใช้ความจำเป็นและกาลปัจจุบันเป็นสิ่งหนึ่งที่ใช้เวลาเล็กน้อยในการทำความคุ้นเคย เมื่อฉันเริ่มพูดถึงมันก็พบกับการต่อต้าน ตามปกติในบรรทัดของ“ ข้อความยืนยันจะบันทึกสิ่งที่ฉันได้ทำ” แต่ Git เป็นระบบควบคุมเวอร์ชันแบบกระจายซึ่งมีหลายที่ที่อาจเกิดการเปลี่ยนแปลงได้ แทนที่จะเขียนข้อความที่พูดในสิ่งที่คุณทำ พิจารณาข้อความเหล่านี้เป็นคำแนะนำสำหรับสิ่งที่ใช้กระทำจะทำ แทนที่จะมีความมุ่งมั่นกับชื่อ:

Renamed the iVars and removed the common prefix.

มีแบบนี้:

Rename the iVars to remove the common prefix

ซึ่งบอกใครบางคนว่าการใช้ความมุ่งมั่นจะทำอะไรมากกว่าสิ่งที่คุณทำ นอกจากนี้หากคุณดูประวัติที่เก็บของคุณคุณจะเห็นว่าข้อความที่สร้าง Git นั้นเขียนไว้ในกาลนี้เช่นกัน -“ ผสาน” ไม่ใช่“ ผสาน”,“ Rebase” ไม่ใช่“ Rebased” ดังนั้นการเขียนในกาลเดียวกันจะทำให้สิ่งต่าง ๆ สอดคล้องกัน ในตอนแรกมันรู้สึกแปลก ๆ แต่มันก็สมเหตุสมผล (รับรองเมื่อมีการสมัคร) และในที่สุดก็กลายเป็นธรรมชาติ

ต้องบอกว่าทั้งหมด - รหัสของคุณที่เก็บของคุณ: ดังนั้นตั้งค่าแนวทางของคุณเองและยึดมั่นกับพวกเขา

อย่างไรก็ตามหากคุณตัดสินใจที่จะไปทางนี้git rebase -iด้วยตัวเลือก reword จะเป็นสิ่งที่ดีที่จะตรวจสอบ


7
คุณได้ผสมสองแนวทางที่ต่างกัน: โครงการโอเพ่นซอร์สของ Git และการใช้ Git เป็นประจำ ลิงก์ที่ให้นั้นไม่ได้พูดถึงความตึงเครียดเลย เอกสาร Git อย่างเป็นทางการกล่าวถึงขีด จำกัด 50 ตัวเท่านั้น Git เป็น VCS แบบกระจายที่มีหลายสถานที่ที่จะได้รับการเปลี่ยนแปลงจาก ... พิจารณาข้อความเหล่านี้เนื่องจากคำแนะนำสำหรับสิ่งที่การใช้การยอมรับจะทำ สิ่งนี้ใช้ได้กับโครงการเพียงไม่กี่โครงการที่มีการกระจายโครงการจริง การกระทำของ Git 99.999% จะไม่ถูกนำไปใช้ในลักษณะดังกล่าวด้วยตนเอง ในโครงการส่วนใหญ่ประวัติเป็นบันทึกการเปลี่ยนแปลงซึ่งควรจะอยู่ในกาลที่ผ่านมา
Matt Quigley

4
"และควรข้ามจุดหยุดเต็ม"
takeshin

30

ติดกับความตึงเครียดในปัจจุบันเพราะความจำเป็น

  • มันดีที่มีมาตรฐาน
  • มันจับคู่ตั๋วในตัวติดตามบั๊กซึ่งโดยธรรมชาติมีรูปแบบ "ใช้บางอย่าง", "แก้ไขบางอย่าง" หรือ "ทดสอบบางอย่าง"

16

คุณเขียนข้อความเพื่อใคร และผู้อ่านนั้นมักจะอ่านข้อความก่อนหรือโพสต์ความเป็นเจ้าของกระทำตัวเอง?

ฉันคิดว่าได้รับคำตอบที่ดีจากทั้งสองมุมมองบางทีฉันอาจจะขาดคำแนะนำว่ามีคำตอบที่ดีที่สุดสำหรับทุกโครงการ คะแนนแยกอาจแนะนำมาก

คือการสรุป:

  • เป็นข้อความที่คนส่วนใหญ่มักจะอ่านในบางจุดก่อนที่พวกเขาจะสันนิษฐานการเปลี่ยนแปลง: ข้อเสนอของสิ่งที่การเปลี่ยนแปลงจะทำกับรหัสที่มีอยู่ของพวกเขา

  • ข้อความส่วนใหญ่เป็นวารสาร / บันทึกถึงคุณ (หรือทีมของคุณ) แต่โดยทั่วไปแล้วการอ่านจากมุมมองของการสันนิษฐานการเปลี่ยนแปลงและค้นหากลับไปค้นพบสิ่งที่เกิดขึ้น

บางทีสิ่งนี้จะนำไปสู่แรงจูงใจสำหรับทีม / โครงการของคุณไม่ว่าจะด้วยวิธีใด


10

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


27
สำหรับบางคนสิ่งต่าง ๆ เช่นนั้นมีความสำคัญไม่น้อย
Wesley Murch

2
@mog ลิงก์ไม่ได้แสดงความคิดเห็นใด ๆ เกี่ยวกับปัจจุบันและอดีต
ceving

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

ฉันไม่ได้บอกว่าอย่าเขียนข้อความยืนยันที่ดี ฉันกำลังบอกว่ามันไม่สำคัญว่าคุณจะใช้อดีตกาลหรือปัจจุบัน
Michael Baldry

1
คุณจะรู้ได้อย่างไรว่าคนที่ไม่สามารถตีความข้อความการส่งข้อความโต้ตอบของคุณนั้นเป็นสาเหตุของบุคคลนั้นไม่สามารถมีความสามารถเพียงพอหรือคุณไม่สามารถเขียนข้อความยืนยันที่ดีได้
Haris

7

มันขึ้นอยู่กับคุณ. เพียงใช้ข้อความยืนยันตามที่คุณต้องการ แต่จะง่ายกว่าถ้าคุณไม่สลับระหว่างเวลาและภาษา

และถ้าคุณพัฒนาในทีม - มันควรจะพูดคุยและตั้งค่าคงที่

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