ทำไม DVCSes ถึงมีความหวาดกลัวอย่างไม่มีเหตุผลเกี่ยวกับการเปลี่ยนแปลงที่ไม่มีข้อผูกมัด?


10

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

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

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

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

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


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

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

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

จริงๆ? "XYZ ที่มีความเสถียรสำหรับการผสานจากเมนเฟรม" เป็นภาระบางอย่างหรือไปที่ประวัติศาสตร์ที่สุภาพเกินไป?
Telastyn

1
คุณจะส่งกระดาษเพื่อการตีพิมพ์โดยไม่ต้องมีการแก้ไขอย่างน้อยเพื่อความชัดเจน? จากนั้นอย่าส่งซีรี่ส์ส่งมอบชุดแรกของคุณเพื่อเผยแพร่ ทุกคนที่จะอ่านโค้ดของคุณได้รับความนิยมอย่างยิ่ง: ย้อนกลับไปและสร้างซีรี่ย์ที่คุณจะต้องเขียนถ้าคุณมีความสุขุมที่จะทำแบบนั้นตั้งแต่แรก rebase Interactive เป็นไม่ยาก ..
jthill

คำตอบ:


4
  1. ในการกระทำของโลก DVCS นั้นมีราคาถูกและประวัติศาสตร์นั้นไม่แน่นอน งานระหว่างทำอาจเป็น "สกปรก" ตามที่คุณต้องการ: และฉันไม่เห็นเหตุผลใด ๆ กับ "วางสถานะปัจจุบันของฉันในเซ็ตการแก้ไขสำหรับการจัดเก็บ"
  2. ประวัติ SVN เป็นเส้นตรงดังนั้นคุณต้องรวมร่างของคุณเข้ากับการเปลี่ยนแปลงจากการแก้ไขใหม่ DVCS ใช้ (ตามปกติ) DAG และส่วนหัวเพิ่มเติม (คอมมิชชัน + ดึง + ขึ้น) สำหรับประวัติที่แยกไว้นั้นปลอดภัยกว่าการผสานกับการทำงานที่ปรับเปลี่ยนได้ทันทีกับการเปลี่ยนแปลงภายนอกที่ดึงออกมา
  3. เมื่อคุณสลับ (ไปยังบางโหนด ) แก้ไข WC ในการโค่นล้มคุณจะได้รับการรวมที่เป็นไปได้เพิ่มเติมหนึ่งรายการ(ตรงกันข้ามกับ "commit to old" - "switch" - "ผสาน 1 rev. range") ... และเรารู้ว่า: ผสาน ใน SVN ไม่ใช่เครื่องมือที่สมบูรณ์แบบในขณะที่ไม่มีปัญหาสำหรับ DVCS

ประวัติย่อ

มันไม่ได้เป็นความหวาดกลัวมัน (บางครั้งรุนแรง) การบังคับตามมารยาทที่ดี "กระทำบ่อย" (บางครั้งผู้ใช้ SVN กลัวสไตล์นี้)

ในที่สุดhg qnew|qpop|qpushราคาย่อมเยาว์สำหรับความเรียบร้อยและเป็นระเบียบ


1

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

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

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

git stash
git pull
git stash pop

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

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