git รวมสองสาขาเข้าด้วยกันด้วยโครงสร้างไดเร็กทอรีที่แตกต่างกัน

ฉันมีสาขาคุณลักษณะและสาขาหลัก และฉันต้องการรวมสาขาหลักเข้ากับสาขาคุณลักษณะ ปัญหาคือ: โครงสร้างไดเร็กทอรีของทั้งสองสาขาไม่เหมือนกัน

โครงสร้างไดเร็กทอรีของสาขาคุณลักษณะมีลักษณะดังนี้:

|── app1
│   ├── common
│   └── static
└── app2

โครงสร้างไดเรกทอรีของสาขาหลัก:

|── app1
│── common
│── static
└── app2

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


person Nai    schedule 18.05.2017    source แหล่งที่มา


คำตอบ (1)


โครงสร้างไดเร็กทอรีของทั้งสองสาขาไม่มีความเกี่ยวข้องโดยเฉพาะ ยกเว้น เมื่อเปรียบเทียบกับการคอมมิต merge base

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

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

คุณสามารถช่วยเหลือ Git ได้บ้างในการตรวจจับการเปลี่ยนชื่อโดยใช้อาร์กิวเมนต์ -X find-renames=<n> หรือ -X rename-threshold=<n> หมายเลข n นี้เป็นอาร์กิวเมนต์ "ดัชนีความคล้ายคลึง" เดียวกันกับที่คุณสามารถส่งไปยัง git diff เป็น -M หรือ --find-renames (ชื่อ rename-threshold เป็นชื่อเก่า ซึ่งมีการเปลี่ยนแปลงเมื่อเร็วๆ นี้เพื่อให้ตัวเลือกของ git merge ตรงกับ git diff) โปรดทราบว่ามีการจำกัด จำนวน ไฟล์ที่ Git จะทำการตรวจจับการเปลี่ยนชื่อเช่นกัน ขีดจำกัดนี้มีค่าเริ่มต้นสูงกว่าสำหรับ git merge (1,000 ตอนนี้) มากกว่าสำหรับ git diff (400 ตอนนี้) (ขีดจำกัดเหล่านี้มีขนาดเล็กกว่าใน Git เวอร์ชันเก่าก่อน 1.7.5 แต่ทั้งหมดสามารถกำหนดค่าได้ ดู diff.renameLimit และ merge.renameLimit ใน เอกสารประกอบ git config ดูเพิ่มเติมที่ ฉันจะรวมการเปลี่ยนแปลงใน Git ในไฟล์ที่ฉันย้าย?)

person torek    schedule 18.05.2017