เป็นพฤติกรรมแบบคอมไพล์เท่านั้นหรือไม่
หลังจากสนทนากับเพื่อนร่วมงานฉันเพิ่งลองและSVN จัดการกับมันโดยไม่มีปัญหา: คุณได้รับการแก้ไข 2 บรรทัด
ความสามารถในการผสานของ VCS หลายตัวได้รับการทดสอบที่นี่เพื่อตลาดบาซ่าร์ดาร์คคอมไพล์และปรอท : https://github.com/mndrix/merge-this
ดูเหมือนว่ามีเพียง Darcs ที่ประสบความสำเร็จในการผสานกรณี "เส้นที่อยู่ติดกัน"
การใช้การเปลี่ยนแปลงที่อยู่ติดกันกับไฟล์ไม่ใช่ปัญหาที่ยาก ฉันคิดว่าพฤติกรรมนี้ได้รับการเลือกอย่างตั้งใจ
เหตุใดบางคนตัดสินใจว่าการแก้ไขบรรทัดที่อยู่ติดกันก่อให้เกิดความขัดแย้ง
ฉันจะคิดว่านี่คือการบังคับให้คุณมองไปที่มัน
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
Modif number 1, กับ master:
int max = MAX_ITEMS/2; // Do stuff only on the first half
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
Modif หมายเลข 2 ผสานจากสาขา:
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max/2; i++) // max/2: only on 1st half
do_stuff(i);
หลังจากผสานคุณไม่ต้องการ:
int max = MAX_ITEMS/2; // Do stuff only on the first half
for(unsigned int i = 0; i < max/2; i++) // max/2: only on 1st half
do_stuff(i);
เห็นพฤติกรรมนี้เป็นคุณสมบัติ
คุณสามารถเปลี่ยนพฤติกรรมการรวมคอมไพล์เป็นข้อได้เปรียบ เมื่อคุณต้องการให้มี 2 บรรทัดที่สอดคล้องกัน แต่คุณไม่สามารถตรวจพบได้ (ในเวลารวบรวมการทดสอบ แต่อย่างใด) คุณสามารถลองเข้าร่วมได้
เขียนสิ่งนี้ ... :
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
// Need to do something else
do_something_else(r);
...สำหรับสิ่งนี้:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
do_something_else(r); // Need to do something else
ดังนั้นเมื่อคุณรวม Modif 1 ... :
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i)/2; // we need only the half
do_something_else(r); // Need to do something else
... ด้วย Modif 2 ... :
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
if(r < 0) // do_stuff can return an error
handle_error(r);
do_something_else(r/2); // Need to do something else
... , คอมไพล์จะสร้างความขัดแย้งและคุณจะบังคับให้คุณดูมัน