การควบคุมเวอร์ชันที่ดีที่สุดสำหรับนักพัฒนาเดี่ยว?


36

ฉันเป็นนักพัฒนาเพียงคนเดียวในที่ทำงานของฉันและในขณะที่ฉันเข้าใจถึงประโยชน์ของ VCS; ฉันพบว่ามันยากที่จะยึดมั่นในแนวปฏิบัติที่ดี ตอนนี้ฉันใช้ git เพื่อพัฒนาเว็บแอปเป็นส่วนใหญ่ (ซึ่งจะไม่เปิดแหล่งที่มาเนื่องจากการทำงานของฉัน)

เวิร์กโฟลว์ปัจจุบันของฉันทำการเปลี่ยนแปลงมากมายในไซต์การพัฒนาทดสอบแก้ไขทดสอบมีความสุขและยอมรับการเปลี่ยนแปลงจากนั้นจึงส่งคอมมิตไปยังไซต์สด (ดังนั้นหากฉันกำลังเปลี่ยนแปลงสิ่งใหม่ กระทำสัปดาห์ละครั้ง แต่ IDE ของฉันมีประวัติการเลิกทำที่ดีสำหรับสิ่งที่ไม่มีข้อผูกมัด)

โดยทั่วไปฉันใช้ git เฉพาะเมื่อสลับระหว่างเครื่อง (เช่นทำงาน dev คอมพิวเตอร์กับคอมพิวเตอร์ dev ที่บ้านหรือเป็นเครื่องถ่ายทอดสด) แต่ในระหว่างวันฉันไม่เห็นประโยชน์จริงๆ สิ่งนี้ทำให้ฉันมีรายการการเปลี่ยนแปลงที่ยาวมาก (และฉันมีปัญหาในการค้นหาข่าวสารที่ดีสำหรับการกระทำแต่ละครั้งและเมื่อใดก็ตามที่ฉันรีบเร่ง - ฉันมักจะฝากข้อความที่เส็งเคร็งเช่น

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

ฉันควรตรวจสอบให้แน่ใจว่าฉันส่งทุกเช้า / บ่ายก่อนที่ฉันจะหยุดทำงานเพื่อทานอาหารเย็นในขณะที่ยังสดอยู่ สิ่งที่ฉันขาดหายไปจากการมีนิสัย VCS ที่ไม่ดี?


2
อาจเป็นหนึ่งในสาเหตุที่ทำให้คุณรู้สึกว่า VCS ไม่เหมาะกับคุณเพราะคุณใช้ Git ในฐานะนักพัฒนาเดี่ยว? Git ดูเหมือนว่า overkill กับฉันสำหรับนักพัฒนาเดียวบางทีสิ่งที่เรียบง่ายกว่าที่มีคุณสมบัติน้อยลงเช่น SVN จะใช้งานง่ายขึ้นหรือไม่
maple_shaft

6
@maple_shaft: ฉันไม่ได้ใช้ Git แต่ Mercurial เป็นเรื่องง่ายเหมือนการโค่นล้มสำหรับงานนักพัฒนาเดี่ยวขั้นพื้นฐาน (เรียบง่ายกว่าเดิมเนื่องจากการสร้างพื้นที่เก็บข้อมูลนั้นง่ายกว่า)
David Thornley

15
ทำไม git ถึง overkill?
Tamás Szelei

1
@maple_shaft ประโยชน์ที่แท้จริงมาภายหลัง ไม่จำเป็นต้องชำระให้น้อยลง

3
เป็นมูลค่าการกล่าวขวัญว่าสำหรับ DVCS เช่น git และ mercurial เพื่อเก็บเกี่ยวผลประโยชน์จากการสำรองข้อมูลนอกสถานที่ของการควบคุมแหล่งที่มาของคุณ
ชักเย่อ

คำตอบ:


24

คุณหายไปมาก

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

สิ่งที่ฉันได้รับคือฉันสามารถย้อนกลับไปได้ทุกเมื่อที่ต้องการ ซึ่งเป็นจำนวนมาก นอกจากนี้ยังมีการสั่งซื้อสาขาช่วย

ฉันเดาว่ามันทำให้ฉันมีระเบียบมาก

ฉันใช้ svn และฉันรู้สึกแย่ แต่ไม่สามารถใช้เวลามากขึ้นในการเรียนรู้สิ่งอื่นใด

โชคดี.


+1 ฉันได้เริ่มต้นเมื่อเร็ว ๆ นี้โดยใช้ VCS ตัวเองและ GIT เป็นสิ่งที่สำหรับฉัน :)
Yati sagade

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

1
ฉันมีโครงการเดี่ยวหลายโครงการ: บางโครงการบน Github บางโครงการไม่ ฉันมักจะใช้คอมไพล์แม้ว่าฉันจะสร้างบางอย่างเพื่อจุดประสงค์ในการเรียนรู้ API / เครื่องมือเฉพาะ มันบังคับใช้นิสัยที่ดีสำหรับโครงการจริงที่มีประโยชน์มากกว่าดังที่ @ jbcolmenares อธิบาย
sarumont

2
ฉันจะตอบโต้ "ไม่สามารถใช้เวลาเรียนรู้สิ่งอื่น" กับhginit.comได้อีก นับเวลาที่คุณโกรธที่ svn เป็นเวลาหนึ่งสัปดาห์จากนั้นใช้เวลาในการอ่าน hginit ในสัปดาห์หน้า
tdammers

@tdammers จะดู
cauchy

18

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

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

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


"จะเกิดอะไรขึ้นถ้าคอมพิวเตอร์ของคุณล่ม" - ไฟล์จะถูกบันทึกลงดิสก์บ่อยครั้งและมีการสำรองข้อมูลทุกคืน (ถ้าคุณหมายถึงหากฮาร์ดดิสก์แตก) อย่างไรก็ตาม +1 สำหรับการค้นหาข้อผิดพลาดแบบไบนารีอาจมีประโยชน์ ฉันค่อนข้างดีที่ได้อย่างรวดเร็วพบ 95% ของข้อบกพร่องของฉัน; แต่ทุกขณะนี้แล้วจะมีข้อผิดพลาดที่แปลกประหลาดอย่างแท้จริงเกิดขึ้นจากการเปลี่ยนแปลงที่ไม่สำคัญในส่วนอื่นของโปรแกรม
dr jimbob

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

1
@Dima: คุณจะต้องผลักดันและไม่เพียง แต่มุ่งมั่นที่จะมีการสำรองข้อมูลของคุณ
ปลดเปลื้อง

@liberforce ระบบควบคุมเวอร์ชันบางรุ่นอาจไม่มีการใช้งานแบบพุช คำตอบนี้มาจากปี 2012 ฉันใช้การโค่นล้มในเวลานั้นซึ่งไม่ได้กระจาย ดังนั้นอย่าผลักดัน
Dima

2
@Dima: แน่นอน แต่ OP ใช้งานคอมไพล์ดังนั้นคำแนะนำอาจทำให้เข้าใจผิดเนื่องจากคุณไม่ได้พูดว่าคุณกำลังพูดถึง SVN อยู่
ปลดเปลื้อง

10

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

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

นอกจากนี้เนื่องจากคุณสลับระหว่างพีซีคุณควรมีสาขาอย่างน้อยสองแห่ง:

  • สาขา "พร้อมที่จะไป" ที่ใช้งานได้เสมอ (ยกเว้นข้อบกพร่องที่คุณกำลังทำงานในสาขาการพัฒนาแน่นอน)
  • สาขาการพัฒนาที่อาจอยู่ในสถานะที่ไม่สามารถเรียกใช้ได้เป็นครั้งคราว (เช่นระหว่างที่คุณเดินทางกลับจากที่ทำงาน;)

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

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

7

การเปลี่ยนแปลงในแต่ละบรรทัดควรมีความมุ่งมั่นไหม?

หากนั่นคือสิ่งที่แก้ไขข้อผิดพลาดแน่นอน

สิ่งที่ฉันขาดหายไปจากการมีนิสัย VCS ที่ไม่ดี?

ฉันทำงานกับผู้ชายที่มี "นิสัย VCS ไม่ดี" เขารักที่จะทำงานด้วยตัวเองทั้งหมดและเขาเป็นผู้รับผิดชอบสายผลิตภัณฑ์ที่นำเสนอบางอย่างเช่น $ 1,000,000 / ปี เขาจะส่งมอบก็ต่อเมื่อเจ้านายจู้จี้เขา แล้ววันหนึ่งฮาร์ดดิสก์ของเขาก็พัง หลังจากได้รับการติดตั้งใหม่สำหรับเขาเราพบว่าการเช็คอินครั้งสุดท้ายของเขาคือเมื่อ 6 เดือนก่อน เนื่องจาก VCS เป็น Source Safe คุณสามารถเดาได้ว่ามีอะไรผิดพลาด - การส่งครั้งล่าสุดเกิดความเสียหาย เราต้องย้อนกลับไปนานกว่าหนึ่งปีเพื่อรับสายผลิตภัณฑ์รุ่นที่ไม่เสียหาย เขาไม่ได้ถูกไล่ออกแม้ว่าเขาควรจะเป็น

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

ฉันควรจะทำบ่อยแค่ไหน?

ฉันแบ่งออกเป็นสองสามตัวชี้วัด:

  • คุณเต็มใจเสียงานมากแค่ไหนหากคอมพิวเตอร์ของคุณเสียชีวิต หรือถูกขโมย

  • หากสิ่งนี้แก้ไขข้อผิดพลาด Bug_1234 ให้ตรวจสอบรหัสด้วยความคิดเห็น "แก้ไขข้อผิดพลาด Bug_1234"

  • หากนี่คือการส่งมอบ / เหตุการณ์สำคัญทางตรรกะให้ตรวจสอบด้วยความคิดเห็นเช่น "Bug_1234, form_xyz" (หรือ Task_1234 ตามความเหมาะสม)

  • เช็คอินรหัสทุกเย็นวันศุกร์ก่อนเดินทางกลับ ทำเช็คอิน (หรือเลิกทำการเช็คเอาต์) ของทุกอย่างก่อนออกเดินทาง

  • เมื่อใดก็ตามที่นโยบายของ บริษัท กำหนด


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

5

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

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


4

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

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

ผลประโยชน์อื่น ๆ จะเกิดขึ้นเมื่อพัฒนาทีม - คอมเม้นท์ง่าย ๆ , คอมมิวนิตี้ง่ายขึ้น, เกี่ยวข้องกับความมุ่งมั่นในการแก้ไขบั๊ก ฯลฯ

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


4

ฉันเป็นนักพัฒนาเดี่ยวด้วยฉันใช้ SVN และฉันก็ชอบ ฉันได้เขียนเครื่องมือเพื่อแปลงโครงสร้างของฐานข้อมูลของฉันและข้อมูลการทดสอบในนั้นเป็น xml เพื่อให้ฉันสามารถรวมไว้ในการควบคุมแหล่งที่มา

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

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

ซึ่งหมายความว่าฉันมักจะกระทำเมื่อรหัสแหล่งที่มาของฉันจะต้องมีการมุ่งมั่น; มันไม่มีเหตุผลที่จะต้องทำตอนเช้าหรือตอนเย็น มันเป็นสถานะที่รหัสอยู่ในการกำหนดหรือไม่ว่าถึงเวลาที่จะกระทำ

ข้อความที่คุณใส่ในที่เก็บไม่สำคัญมาก ถ้าคุณไม่สามารถคิดอะไรที่มีความหมายได้มันก็ยังดีกว่าที่จะผูกมัดด้วยข้อความเปล่ามากกว่าที่จะไม่ทำอะไรเมื่อคุณควร

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


1

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

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

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

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

นอกจากนี้คุณยังสามารถปลดปล่อยพลังgit bissectที่จะบอกคุณถึงความมุ่งมั่นที่ว่าข้อผิดพลาดที่น่ารังเกียจนี้ หากความมุ่งมั่นมีความยาว 2,000 บรรทัดมันก็ยังช่วยได้ แต่ก็ไม่มาก ...

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

เกี่ยวกับคำถามอื่น ๆ ของคุณ:

  • อย่ากระทำสิ่งที่คุณไม่ได้รวบรวมเว้นแต่คุณจะยินดีที่จะเขียนประวัติศาสตร์ของคุณสำหรับการใช้ (นั้นgit rebase --interactive)
  • การเปลี่ยนแปลงในบรรทัดเดียวควรได้รับการยอมรับหากมีจุดประสงค์แยกต่างหาก (แก้ไขข้อบกพร่องหรือไม่เกี่ยวข้องกับการเปลี่ยนแปลงที่ไม่ผูกมัดของคุณในปัจจุบัน) ใช้git add --patchเพื่อจัดเวทีเหล่านั้น
  • ไม่จำเป็นต้องบังคับตัวเองให้กระทำก่อนอาหารค่ำเว้นแต่คุณจะมีสิ่งสำคัญที่คุณไม่สามารถสูญเสียได้ ในกรณีดังกล่าวคุณอาจต้องการแยกงานที่อยู่ระหว่างดำเนินการแยกต่างหาก
  • กระทำและผลักดันไปยังพื้นที่เก็บข้อมูลระยะไกลคือการสำรองข้อมูล หากคุณกระทำและผลักดันสัปดาห์ละครั้งเท่านั้นคุณสามารถทำสิ่งที่เลวร้ายที่สุดได้ในกรณีที่เสียงานไปหนึ่งสัปดาห์

0

ฉันควรจะทำบ่อยแค่ไหน?

ในฐานะนักพัฒนาเดี่ยวฉันมักจะผูกมัดเมื่อใดก็ตามที่ฉันรู้สึกว่าฉันได้ทำการเปลี่ยนแปลงที่สำคัญหลังจากการทดสอบขั้นพื้นฐานและเมื่อฉันออกจากโครงการในตอนท้ายของคืน

การเปลี่ยนแปลงในแต่ละบรรทัดควรมีความมุ่งมั่นไหม?

ไม่เว้นแต่ว่าการเปลี่ยนแปลงในบรรทัดเดียวจะเปลี่ยนคุณลักษณะหรือข้อบกพร่องเป็นอย่างมาก

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

อาจจะไม่. อย่างน้อยสำหรับฉันฉันทำการทดสอบและการเขียนโค้ดส่วนใหญ่ใน 'สำเนาการทำงาน' และกระทำหลังจากที่ฉันมีความสุขกับการเปลี่ยนแปลงของฉัน ในหลาย ๆ IDE มันจะแสดงให้ฉันเห็นสิ่งที่เปลี่ยนแปลงก่อนที่ฉันจะทำการส่งมอบและให้โอกาสฉันแนบบันทึกการกระทำนั้น

ฉันควรตรวจสอบให้แน่ใจว่าฉันส่งทุกเช้า / บ่ายก่อนที่ฉันจะหยุดทำงานเพื่อทานอาหารเย็นในขณะที่ยังสดอยู่ สิ่งที่ฉันขาดหายไปจากการมีนิสัย VCS ที่ไม่ดี?

ฉันไม่คุ้นเคยกับ VCS มากนักหรือเป็นสาเหตุของนิสัยที่ไม่ดี ฉันคิดว่าฉันได้แบ่งปันความคิดเห็นของฉันเป็นส่วนใหญ่เพื่อตอบคำถามแรก

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


I am not very familiar with VCS or what bad habits it causes.โชคดีนะคุณ!
yannis

1
ฉันไม่แน่ใจว่าฉันอ่านอย่างไม่ถูกต้องหลายครั้งได้อย่างไร แต่ฉันอ่านว่า 'VSS' ในที่มาของ Visual ปลอดภัย ฉันค่อนข้างคุ้นเคยกับระบบควบคุมเวอร์ชันต่าง ๆ รวมถึง SVN และ GIT และใช้พวกเขาเป็นนักพัฒนาเดี่ยวบ่อยครั้ง แต่อาจมีนิสัยที่ไม่ดีอยู่บ้างฉันคิดว่าฉันไม่ได้ใช้มันในบริบทของนักพัฒนาหลายคน .
dbuell

ดีที่ฉันได้ต่อสู้กับ SourceSafe เป็นเวลานานกว่า 3 ปีความคิดเห็นของฉันยังคงยืน: โชคดี! เพื่อให้ตัวอย่าง VSS6 สามารถจัดการกับที่เก็บประมาณ 200mb - 300mb หลังจากนั้นถ้าคุณโชคดีไฟล์บางไฟล์อาจเสียหายแบบสุ่ม แน่นอนว่ามีหลายวิธีแก้ไขและวิธีแก้ปัญหาและ VSS ไม่เคยตั้งใจให้ MS เป็น vcs แบบเต็มเป่า แต่ลองคิดว่าตัวเองโชคดีที่คุณไม่ต้องจัดการกับมัน ...
yannis

0

ฉันเป็นผู้ที่ติดนิสัยและพบว่าเหมาะกับฉัน แต่เป็นที่ยอมรับว่าข้อความการส่งข้อความของฉันมักจะเป็นเช่นนั้นเสมอ

Age:  9 mins [*] Working on implementing and testing PaintSystem.
Age: 17 mins [*] Working on implementing and testing PaintSystem.
Age: 37 mins [*] Working on implementing and testing PaintSystem.
Age: 52 mins [*] Working on implementing and testing PaintSystem.

ดังนั้นฉันจึงไม่สามารถพูดได้อย่างแน่นอนว่าการทำอย่างสม่ำเสมอและเป็นนิสัยให้กับสาขาของฉัน (Mercurial) ได้รับการสนับสนุนอย่างละเอียดในบันทึกการกระทำที่มีรายละเอียดมากที่สุด บางครั้งฉันจะส่งรหัสไปครึ่งทางถ้าพูดภรรยาของฉันขอให้ฉันออกไปทานอาหารเย็นที่จุดนี้ฉันจะรีบคัดลอกและใช้ข้อความ "การทำงานบน [... ]" ก่อนหน้านี้

รูปแบบบันทึกการกระทำของฉันมักจะชอบ "Working on [...] Working on [...] Working [...] Completed [...] Started working on [...] Working on [...] Completed [...] Started working on [...]"

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

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

การเปลี่ยนแปลงในแต่ละบรรทัดควรมีความมุ่งมั่นไหม?

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

TBH ความมุ่งมั่นของฉันมากมายซึ่งตาม"Working on [...]"รูปแบบการบันทึกไม่ใช่การสร้างแบบจำลองการเปลี่ยนแปลงที่สอดคล้องกัน (ทำไมฉันไม่สามารถสร้างข้อความได้ดีกว่า"Working on [...]") แต่เพียงผลลัพธ์ของฉันที่มีชีวิตเช่นทำให้ตัวเองดื่มกาแฟ "Completed [...]"ข้อความบ่งบอกถึงการสิ้นสุดของหน่วยงานที่และมีผมมักจะเขียนข้อความที่มีรายละเอียดมากขึ้นพร้อมกับครั้งแรก"Started working on [...]"ข้อความประเภทเมื่อฉันเพียงแค่เริ่มต้นทำงานในสิ่งที่ หากคุณเฉลี่ยทำเหมือนทุก ๆ 15 นาทีดังนั้นข้อความ "กำลังทำงานบน [... ]" เหล่านั้นจะคล้ายกันมากขึ้นเรื่อย ๆ สำหรับสิ่งที่บางคนอาจกระทำในการรวมกลุ่มอย่างใดอย่างหนึ่งด้วยข้อความที่มีรายละเอียดมากขึ้น

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

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

ฉันควรตรวจสอบให้แน่ใจว่าฉันส่งทุกเช้า / บ่ายก่อนที่ฉันจะหยุดทำงานเพื่อทานอาหารเย็นในขณะที่ยังสดอยู่

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

โอ้และบางครั้งฉันก็เมาเล็กน้อยหลังจากออกไปและมันก็เป็นความคิดที่ดีที่จะลองเขียนโค้ดที่ซับซ้อนในขณะที่เมา (แม้ว่าจะไม่เสมอไป) ครั้งหนึ่งฉันมากับระบบเมนูบริบทที่ดีจริงๆหลังจากที่มีช่วงเวลาที่ยูเรก้าขณะเมา แต่ฉันมีเพียง 6 เบียร์เท่านั้นและมันก็ไม่ได้ซับซ้อนขนาดนั้นในการเขียนโค้ด) ถ้าฉันพยายามที่จะทำอย่างน้อยที่สุดฉันก็ยอมรับรหัสที่เขียนอย่างมีสติก่อนที่ฉันจะกลับไปใช้แทนที่จะผสมรหัสเมากับรหัสที่เงียบขรึมซึ่ง ณ จุดที่บันทึกการคอมมิทของฉันอาจอ่านได้"Reverting back to code written before Jagermeister shots."ฉันก็ไม่ทำเช่นนี้ บ่อยมากเว้นแต่ฉันจะได้รับแรงบันดาลใจจากโค้ดเมาเหล้า แต่ในกรณีที่หายากเหล่านั้นมันช่วยฉันได้จริง ๆ ก่อนที่จะออกไปและเมา


กฎง่ายๆสำหรับคุณ: หากคุณมีข้อความที่เหมือนกันสองข้อความติดต่อกันแสดงว่าคุณเกือบทำผิด พวกเขาควรจะยอมรับหรือคุณควรคิดออกว่ามีอะไรที่แตกต่างกันและเขียนข้อความบันทึกที่สะท้อนถึงความแตกต่างนั้น (เช่น "กำหนดข้อมูลสีใหม่" และ "ตั้งค่าข้อมูลสีอย่างถูกต้อง" แทนที่จะ "ทำงานกับระบบสี" x2)
Marnen Laibow-Koser
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.