git menggabungkan dua cabang dengan struktur direktori berbeda

Saya memiliki cabang fitur dan cabang master dan saya ingin menggabungkan cabang master ke cabang fitur. Masalahnya adalah: struktur direktori kedua cabang tersebut tidak sama.

Struktur direktori cabang fitur adalah seperti:

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

Struktur direktori cabang master:

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

Sekarang di cabang master saya memperbarui folder 'umum' dan 'statis'. Lalu, saya akan menggabungkan cabang master ke cabang fitur untuk memperbarui folder 'umum' dan 'statis' di bawah 'app1'. Namun, karena struktur kedua cabang tersebut tidak sama, git akan menganggap kedua folder tersebut sebagai baru. Bagaimana cara melakukan penggabungan untuk memperbarui cabang fitur?


person Nai    schedule 18.05.2017    source sumber


Jawaban (1)


Struktur direktori kedua cabang tidak terlalu relevan, kecuali dibandingkan dengan komit merge base.

Git melakukan penggabungan dengan membandingkan komit dasar gabungan dengan dua komit di ujung cabang. Jadi pertanyaan Anda salah dibingkai: ini seharusnya berkaitan dengan bagaimana komit dasar gabungan dibandingkan dengan dua komit tip. Tentu saja, jika kedua komit ujung cabang memiliki tata letak direktori yang berbeda, paling banyak salah satunya dapat cocok dengan tata letak direktori basis gabungan. Namun mungkin saja tidak ada yang cocok dengan tata letak tersebut.

Saat Git melakukan dua perbedaan, dari penggabungan dasar ke tip#1 dan kemudian dari penggabungan dasar ke tip#2, Git mengaktifkan deteksi penggantian nama di kedua perbedaan. Jika deteksi penggantian nama dengan benar menemukan semua file yang diganti namanya, Git akan menggabungkan file dengan benar. Sejauh Git gagal mengidentifikasi dengan benar file dengan konten yang sama dengan nama berbeda, Anda harus menggabungkan file secara manual.

Anda dapat membantu Git dalam mendeteksi penggantian nama menggunakan argumen -X find-renames=<n> atau -X rename-threshold=<n>. Angka n ini adalah argumen "indeks kesamaan" yang sama yang dapat Anda teruskan ke git diff sebagai -M atau --find-renames. (Nama rename-threshold adalah nama lama, diubah relatif baru sehingga opsi git merge akan cocok dengan git diff.) Perhatikan bahwa ada batasan pada berapa banyak file yang akan dideteksi oleh Git untuk melakukan penggantian nama juga. Batas default ini lebih tinggi untuk git merge (sekarang 1000) dibandingkan untuk git diff (sekarang 400). (Batas ini lebih kecil di versi Git yang lebih lama, sebelum 1.7.5, namun semuanya dapat dikonfigurasi; lihat diff.renameLimit dan merge.renameLimit di dokumentasi git config. Lihat juga Bagaimana cara menggabungkan perubahan di Git di file yang saya pindahkan?)

person torek    schedule 18.05.2017