มีข้อเสียในการเปิดใช้งาน git rerere หรือไม่?


107

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


เมื่อเปิดใช้งาน rerere อัตโนมัติและใช้ความละเอียดก่อนหน้านี้จะแสดงข้อความหรือไม่ ถ้าเป็นเช่นนั้นหน้าตาเป็นอย่างไร? เทีย!
joeytwiddle

1
@joeytwiddle ต่อบทความนี้มันจะเป็นรูปแบบResolved 'index.html' using previous resolution.
sampablokuper

คำตอบ:


69

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

git rerere forget <pathspec>

การตั้งค่าใหม่นี้การปรองดองที่ rerere <pathspec>ได้บันทึกไว้สำหรับความขัดแย้งในปัจจุบัน

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

แต่ถ้าคุณไม่คิดที่จะทำเช่นนั้นคุณอาจจะต้องรวมที่ไม่ถูกต้องลงในประวัติของคุณได้อย่างง่ายดาย ..


13
ด้วยเหตุนี้จึงrerereยังคงปล่อยให้ไฟล์ที่มีข้อขัดแย้งถูกทำเครื่องหมายว่ายังไม่ถูกผสานดังนั้นคุณต้องเพิ่มด้วยตนเอง (หวังว่าหลังจากตรวจสอบ / ทดสอบแล้ว) ก่อนที่จะดำเนินการ คุณสามารถใช้git checkout -m <path>ตรวจสอบเวอร์ชันเดิมที่ขัดแย้งกันและทำการแก้ไขซ้ำได้ตลอดเวลาหากจำเป็น
Cascabel

1
นั่นจะเข้าท่า! ดูเหมือนว่าคุณต้องการนามแฝงใหม่
Cascabel

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

3
@RyanThompson ยกเลิกการผสานไม่ส่งผลกระทบต่อ rerere (ฉันมักจะหวังว่ามันจะเป็นเช่นนั้น - บางครั้งฉันก็ยกเลิกการผสานเพราะตั้งค่าผิดจากนั้นก็ต้องทำความละเอียดเดียวกันทั้งหมดเมื่อฉันตั้งค่าถูกต้อง) สำหรับการลบการผสานออกจากประวัติทำไมคุณถึงเคย ทำอย่างนั้น?
Marnen Laibow-Koser

40

ดังที่ JC Hamano กล่าวไว้ในบทความ " Fun with rerere "

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

แม้แต่คนที่ใช้ rerere มาเป็นเวลานานก็มักจะไม่สังเกตเห็นจุดสุดท้าย

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


15
พวกที่ขัดแย้งกันยังคงต้องจับคู่; มันค่อนข้างยากที่จะให้ผลบวกลวง
Cascabel

3

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


4
เหมือนกันที่นี่ ไม่มีปัญหาในการใช้งาน 2 ปีขึ้นไป
Andrey Tarantsov

3

ฉันเลือกคอมมิต (ใน gitk) ที่มี แต่ไฟล์ไบนารี Cherrypick ล้มเหลวเนื่องจากความขัดแย้ง (ซึ่งสิ่งที่เกิดขึ้นเกี่ยวกับเรื่องนี้เป็นเรื่องธรรมดา) และฉันได้แก้ไขข้อขัดแย้งที่เก็บเชอร์รี่ไว้ ฉันรู้สึกประหลาดใจในภายหลังที่พบในสาขา rebased อื่นที่ dlls ของฉันไม่ทำงาน - เพียง แต่พบว่าพวกเขาไม่ได้ถูกนำเข้าไปใน rebase เนื่องจาก (ฉันคาดเดา) การแก้ปัญหาความขัดแย้งโดยอัตโนมัติ ดังนั้นนี่เป็นกรณีเดียวที่ฉันพบ (โดยเปิดใช้งาน rerere) ในการทำงานในพฤติกรรมที่ต่อต้านการใช้งานง่าย (แม้ว่าฉันจะแน่ใจว่าสอดคล้องกันอย่างสมบูรณ์)


1
Cure:git rerere forget path/to/compiled/bin.dll
Mr_and_Mrs_D

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