Saya memiliki dua proyek SVN yang digunakan dari repositori SVN lain menggunakan svn: externals .
Bagaimana saya bisa memiliki struktur tata letak repositori yang sama di Git?
Saya memiliki dua proyek SVN yang digunakan dari repositori SVN lain menggunakan svn: externals .
Bagaimana saya bisa memiliki struktur tata letak repositori yang sama di Git?
git submodule
sekarang dapat ditirusvn:external
(sejak Maret 2013).Jawaban:
Git memiliki dua pendekatan yang mirip dengan, tetapi tidak persis setara dengan svn: eksternal:
Subtree menggabungkan masukkan kode proyek eksternal ke dalam sub-direktori terpisah dalam repo Anda. Ini memiliki proses terperinci untuk diatur dan kemudian sangat mudah bagi pengguna lain, karena secara otomatis disertakan ketika repositori diperiksa atau dikloning. Ini bisa menjadi cara yang nyaman untuk memasukkan ketergantungan dalam proyek Anda.
Mudah untuk menarik perubahan dari proyek lain, tetapi rumit untuk mengirimkan perubahan kembali. Dan jika proyek lain harus bergabung dari kode Anda, sejarah proyek akan digabung dan dua proyek secara efektif menjadi satu.
Git submodules ( manual ) tautan ke komit tertentu di repositori proyek lain, seperti svn: eksternal dengan
-r
argumen. Submodules mudah diatur, tetapi semua pengguna harus mengelola submodula, yang tidak secara otomatis disertakan dalam checkout (atau klon).Meskipun mudah untuk mengirimkan perubahan kembali ke proyek lain, hal itu dapat menyebabkan masalah jika repo telah berubah. Oleh karena itu umumnya tidak pantas untuk mengirimkan perubahan kembali ke proyek yang sedang dalam pengembangan aktif.
sumber
svn:externals
. Dengan revisi 1.5, sintaks diubah ke format yang lebih fleksibel. Apa yang ditambahkan adalah pengalamatan URL relatif.Seperti yang saya sebutkan dalam " Pembaruan versi baru submodule Git ", Anda dapat mencapai fitur eksternal SVN yang sama dengan submitula Git 1.8.2:
Ini cukup untuk submodule untuk mengikuti cabang (seperti dalam komit TERBARU dari cabang terpencil dari repo hulu submodule ). Yang perlu Anda lakukan adalah:
Itu akan memperbarui submodule.
Detail lebih lanjut ada di "
git submodule
pelacakan terbaru ".Untuk mengonversi submodule yang ada menjadi satu pelacakan cabang : lihat semua langkah di " Git submodules: Tentukan cabang / tag ".
sumber
svn:externals
?--depth
tetapi itu tidak benar-benar mengatasi masalah.Saya punya solusi alternatif untuk masalah - gil (git links) tool
Hal ini memungkinkan untuk menggambarkan dan mengelola dependensi repositori git yang kompleks.
Juga memberikan solusi untuk masalah dependensi submodules git rekursif .
Pertimbangkan Anda memiliki dependensi proyek berikut: grafik dependensi repositori sampel git
Kemudian Anda dapat mendefinisikan
.gitlinks
file dengan deskripsi relasi repositori:Setiap baris menggambarkan tautan git dalam format berikut:
Akhirnya Anda harus memperbarui repositori sampel root Anda:
Sebagai hasilnya, Anda akan mengkloning semua proyek yang diperlukan dan menghubungkannya satu sama lain dengan cara yang benar.
Jika Anda ingin mengkomit semua perubahan dalam beberapa repositori dengan semua perubahan dalam repositori terkait anak Anda dapat melakukannya dengan satu perintah:
Perintah pull, push bekerja dengan cara yang sama:
Alat Gil (git links) mendukung perintah berikut:
Lebih lanjut tentang masalah ketergantungan submodul git rekursif .
sumber
gil
.