Saya memiliki proyek super git yang mereferensikan beberapa submodul dan saya mencoba mengunci alur kerja agar anggota proyek saya lainnya dapat bekerja di dalamnya.
Untuk pertanyaan ini, katakanlah superproject saya dipanggil supery
dan submodulnya dipanggil subby
. (Kemudian adalah penyederhanaan dari apa yang saya coba lakukan ... Saya sebenarnya tidak menggunakan cabang untuk versi, tapi saya pikir akan lebih mudah untuk meletakkan sebagai pertanyaan.)
Cabang master saya supery
memiliki tag v1.0
proyek git yang subby
dirujuk sebagai submodul. Cabang supery
yang disebut one.one
dan mengubah referensi submodule ke titik ke tag v1.1
dari subby
.
Saya dapat bekerja di dalam masing-masing cabang ini tanpa hambatan, tetapi jika saya mencoba memperbarui one.one
cabang dengan perubahan dari master
cabang, saya menerima beberapa konflik dan saya tidak tahu bagaimana menyelesaikannya.
Pada dasarnya setelah menjalankan beberapa git pull . master
saat di subby
cabang, sepertinya itu membuat submodul tambahan.
Sebelum tarik / gabung, saya mendapatkan respons yang diinginkan git submodule
dari one.one
cabang:
$ git checkout master
$ git submodule
qw3rty...321e subby (v1.0)
$ git checkout one.one
$ git submodule
asdfgh...456d subby (v1.1)
Tapi setelah ditarik, itu menambahkan submodul tambahan saat saya menjalankan git submodule
:
$ git pull . master
Auto-merged schema
CONFLICT (submodule): Merge conflict in subby - needs qu3rty...321e
Automatic merge failed; fix conflicts and then commit the results.
$ git submodule
qw3rty...321e subby (v1.0)
asdfgh...456d subby (v1.1)
zxcvbn...7890 subby (v1.1~1)
Bagaimana cara menghapus / mengabaikan referensi submodule yang tidak diinginkan dan melakukan konflik dan perubahan saya? Atau apakah ada parameter yang dapat saya gunakan dengan dokumen asli saya git pull
yang akan mengabaikan submodul saya?
sumber
added by us: ../Mono.Cecil
masukgit status
tetapigit add
dangit rm
gagalMono.Cecil: needs merge, pathspec 'Mono.Cecil/' did not match any files
karena itu hanya folder kosong dan git hanya benar-benar menangani file.git checkout
memberi sayaMono.Cecil: needs merge, error: you need to resolve your current index first
,git submodule update
memberiSkipping unmerged submodule Mono.Cecil
dangit checkout master Mono.Cecil
AKHIRNYA memperbaikinya. Masalah dasar:git status
saran salah, jadi pilih cabang dan ambil salinan foldernya dengancheckout
!git checkout --ours SUBMOD
dangit add SUBMOD
dan lainnya, tetapi akhirnyagit checkout master SUBMOD
memperbaiki konflik. Komentar ini mungkin harus menjadi jawaban, bukan komentar ... :)Yah, ini tidak secara teknis mengelola konflik dengan submodul (yaitu: simpan ini tetapi bukan itu), tetapi saya menemukan cara untuk terus bekerja ... dan yang harus saya lakukan hanyalah memperhatikan
git status
output saya dan mengatur ulang submodul:Itu akan mengatur ulang submodul ke komit pra-tarik. Yang dalam hal ini persis seperti yang saya inginkan. Dan dalam kasus lain di mana saya membutuhkan perubahan yang diterapkan ke submodule, saya akan menangani mereka dengan alur kerja submodule standar (master checkout, tarik ke bawah tag yang diinginkan, dll).
sumber
Saya sedikit kesulitan dengan jawaban atas pertanyaan ini dan tidak beruntung dengan jawaban di posting SO yang serupa . Jadi inilah yang berhasil untuk saya - mengingat bahwa dalam kasus saya, submodul dikelola oleh tim yang berbeda, sehingga konflik tersebut berasal dari versi submodule yang berbeda di master dan cabang lokal saya dari proyek yang saya kerjakan:
git status
- catat folder submodule dengan konflikSetel ulang submodul ke versi yang terakhir kali dilakukan di cabang saat ini:
git reset HEAD path/to/submodule
Pada titik ini, Anda memiliki versi submodule bebas konflik yang sekarang dapat Anda perbarui ke versi terbaru di repositori submodul:
Dan sekarang Anda bisa melakukannya
commit
dan kembali bekerja.sumber
Pertama, temukan hash yang Anda inginkan untuk referensi submodule Anda. lalu lari
yang telah berhasil bagi saya untuk mendapatkan submodul saya ke referensi hash yang benar dan melanjutkan pekerjaan saya tanpa mendapatkan konflik lebih lanjut.
sumber
Saya mengalami masalah ini dengan
git rebase -i origin/master
ke cabang. Saya ingin mengambil ref submodule versi master, jadi saya cukup melakukannya:git reset master path/to/submodule
lalu
git rebase --continue
Itu memecahkan masalah saya.
sumber
Mendapat bantuan dari diskusi ini. Dalam kasus saya,
bekerja untuk saya :)
sumber
Di direktori induk saya, saya melihat:
Jadi saya baru saja melakukan ini
sumber