Apa perbedaan konseptual antara menggunakan submitule git dan subtree?
Apa skenario khas untuk masing-masing?
git
git-submodules
git-subtree
Nathan H
sumber
sumber
Jawaban:
Anda hanya menyimpan referensi di repo induk Anda ( gitlink , entri khusus dalam indeks )
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 defaultorigin/master
. Proyek utama Anda masih akan melacak hash KEPALA submodule bahkan jika--remote
digunakan sekalipun.Lihat contoh dalam jawaban ini .
sumber
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 agit config -f .gitmodules submodule.<path>.branch <branch>
).--remote
---remote
berfungsi juga jika-b
belum digunakanadd
. 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 (?)submodule adalah tautan;
subtree adalah salinan
sumber
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.
sumber
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
sumber
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags production refs/heads/master:refs/heads/master