Apa perbedaan konseptual antara menggunakan submitule git dan subtree?
Apa skenario khas untuk masing-masing?
Apa perbedaan konseptual antara menggunakan submitule git dan subtree?
Apa skenario khas untuk masing-masing?
Jawaban:
Bagaimana jika saya ingin tautannya selalu mengarah ke KEPALA repo eksternal?
Anda dapat membuat submodule untuk mengikuti KEPALA cabang dari repo remote submodule, dengan:
o git submodule add -b <branch> <repository> [<path>]
. (untuk menentukan cabang yang akan diikuti)
o git submodule update --remote
yang akan memperbarui konten submodule ke HEAD terbaru dari <repository>/<branch>
, secara default origin/master
. Proyek utama Anda masih akan melacak hash KEPALA submodule bahkan jika --remote
digunakan sekalipun.
add -b
dan --remote
kemudian pada perintah pembaruan, sesuai dengan dokumentasi pembaruan submodule . Dalam hal itu, apakah -b
benar - benar masih diperlukan untuk mengikuti KEPALA master?
-b
digunakan untuk menghasilkan metadata .gitmodule yang tepat untuk submodule (setara dengan a git config -f .gitmodules submodule.<path>.branch <branch>
).
--remote
- --remote
berfungsi juga jika -b
belum digunakan add
. Dalam kedua kasus pembaruan akan menyebabkan komit di induk repo menampung submodule, sehingga tautan tidak benar-benar "selalu menunjuk ke KEPALA" dengan cara yang sangat otomatis .... baik saya tidak mendapatkannya, atau klaim itu lebih baik dihapus dari jawaban asli (?)
Perbedaan konseptual adalah:
Dengan git submodules Anda biasanya ingin memisahkan repositori besar menjadi yang lebih kecil. Cara mereferensikan submodule adalah gaya-maven - Anda mereferensikan komit tunggal dari repositori (submodule) lain. Jika Anda memerlukan perubahan di dalam submodule Anda harus membuat komit / dorongan dalam submodule, kemudian referensi komit baru di repositori utama dan kemudian komit / tekan referensi yang diubah dari repositori utama. Dengan begitu Anda harus memiliki akses ke kedua repositori untuk bangunan lengkap.
Dengan git subtree Anda mengintegrasikan repositori lain ke dalam milik Anda, termasuk riwayatnya. Jadi setelah mengintegrasikannya, ukuran repositori Anda mungkin lebih besar (jadi ini bukan strategi untuk menjaga repositori lebih kecil). Setelah integrasi, tidak ada koneksi ke repositori lain, dan Anda tidak perlu mengaksesnya kecuali Anda ingin mendapatkan pembaruan. Jadi strategi ini lebih untuk penggunaan ulang kode dan riwayat - Saya pribadi tidak menggunakannya.
git subtree
Anda masih bisa mendorong - jika Anda mau - kan?
sub-modul yang
mendorong repo utama ke remote tidak mendorong file sub-modul
sub-tree
mendorong repo utama ke remote mendorong file sub-tree
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags production refs/heads/master:refs/heads/master