ในการควบคุมเวอร์ชันรวมศูนย์มันดีเสมอที่จะอัพเดทบ่อยไหม?


9

สมมติว่า:

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

เนื่องจากนี่คือการควบคุมเวอร์ชันรวมศูนย์คุณจะต้องอัปเดตการเช็คเอาต์ในพื้นที่ของคุณในบางจุด: อย่างน้อยหนึ่งครั้งก่อนที่จะยอมรับฟีเจอร์ใหม่

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

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

คุณจะอยู่หรือไม่ควรปรับปรุงบ่อยอยู่เสมอ


16
หากคุณไม่ได้แยกคุณจะไม่ได้รับประโยชน์จากหนึ่งในผลประโยชน์ที่ใหญ่ที่สุดของระบบควบคุมเวอร์ชัน
gahooa

CVCS ของคุณให้ความสะดวกในการดูข้อขัดแย้งของการอัปเดตที่อาจเกิดขึ้นโดยไม่แก้ไขไฟล์ในเครื่อง TortoiseSVN มีฟังก์ชั่นดังกล่าว
rwong


@ เพียงแค่คำถามคือความถี่ในการอัปเดตไม่ใช่การกระทำ
janos

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

คำตอบ:


24

ส่วนตัวแล้วฉันจะอัพเดทเวอร์ชั่นท้องถิ่นทุกวัน

ในสถานการณ์ที่คุณอธิบายฉันจะไปอีกไมล์หนึ่ง

  • การสร้างสาขาสำหรับคุณลักษณะใหม่ที่มีความยาว
  • ผสานบ่อยครั้งจากการฉีดไปยังสาขาใหม่นี้

ทางนี้,

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

ข้อเสียเปรียบที่ฉันเห็นพวกเขาคือ

  • การผสานจากหลักต้องทำด้วยตนเอง (หรือเขียนสคริปต์)
  • ต้องใช้ "การบริหาร" มากกว่านี้

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

6
มาจาก Sourcesafe (ที่เราไม่ได้ผสานเลย)ไปยัง TFS, git และ mercurial (ที่เรารวมบ่อย)ประสบการณ์ส่วนตัวของฉันคือการรวมมักจะสร้างปัญหาน้อยกว่ารอรวมใหญ่ ฉันยอมรับว่ามันต้องใช้ความคิดจากเพื่อนโปรแกรมเมอร์ ฉันทำตัวเป็นคนทำลายสถิติในที่ทำงานของฉัน แต่ทุกคนควรทำบ่อยและอัพเดทบ่อย ๆ
Lieven Keersmaekers

6

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

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

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

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


4

สัญลักษณ์แสดงหัวข้อ 3 ในคำถามนั้นผิด :

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

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

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

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

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


2

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

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


1

ฉันคิดว่ามันสะดวกกว่าที่จะใช้การควบคุมเวอร์ชันแบบกระจายในเครื่อง นั่นคือฉันใช้ git เป็นไคลเอนต์การโค่นล้ม นี่คือข้อดีที่:

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

0

หากคุณกำลังเพิ่มคุณสมบัติใหม่คุณสามารถสร้างไฟล์ต้นฉบับไฟล์ใหม่ (และไฟล์ส่วนหัวของอินเตอร์เฟสภายนอกที่ตรงกัน) ได้หรือไม่?

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

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

ในสถานการณ์ที่คุณอธิบายฉันรู้สึกว่ามันจะดีกว่าถ้ามีไฟล์ต้นฉบับที่เล็กกว่าไฟล์ที่ใหญ่กว่า


0

มันแตกต่างกันอย่างไรสำหรับการควบคุมเวอร์ชันรวมศูนย์กว่าการควบคุมแบบกระจาย?

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

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

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


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

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

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

การรอไม่สามารถลดความยากลำบากและความเสี่ยงลงได้ดังนั้นคุณจึงโต้เถียงกับการอัปเดตที่บ่อยขึ้น
AProgrammer

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

0

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

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

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