Saya sedang mengerjakan proyek open source di GitHub.
Ini memiliki subdirektori / Vendor di mana ia memiliki salinan beberapa perpustakaan eksternal. Pemelihara asli proyek memperbarui direktori ini dengan salinan perpustakaan eksternal yang lebih baru sesekali.
Seorang pengembang mengirimi saya permintaan tarik dengan ide untuk mengganti salinan ini dengan submitule git .
Dan saya sedang mempertimbangkan apakah itu ide yang bagus atau tidak.
Git submodule Pros:
- Submodules dirancang khusus untuk skenario serupa
- Ini menghapus kemungkinan komit tidak disengaja kepada Vendor yang akan ditimpa saat pembaruan berikutnya
Git submodule Cons:
- Sepertinya git submodule mendorong kompleksitas dari pengelola ke orang yang akan mengkloning / menarik proyek (langkah-langkah tambahan yang diperlukan setelah Anda mengkloning untuk mulai bekerja dengan proyek: "git submodule init", "git submodule update"
Apa pendapat Anda tentang ini?
Satu hal lagi. Masalah ini adalah perpustakaan ukuran yang cukup kecil dengan dependensi eksternal yang sangat terbatas. Saya pikir alat build apa pun akan berlebihan untuk saat ini.
git clone --recursive
dan kemudian tidak harus melakukan perintah submodule. Tidak ada orang lain yang menyebutkan berita gembira ini; kebanyakan orang yang saya kenal yang memiliki submodule mengiklankan ini di README.Jawaban:
Alternatif untuk submodule adalah menggunakan
git subtree
. Ini memberikan manfaatgit submodule
tetapi tanpa mendorong kompleksitas kepada pengguna akhir. Repositori pihak ketiga digabungkan ke dalam pohon proyek utama, tetapi ada metadata yang disimpan sedemikian rupa sehingga Anda bisa:Untuk pengguna Git yang tidak cukup canggih untuk memahami submodul, pendekatan subtree membuat mendapatkan klon proyek Anda tidak lebih sulit daripada klon lainnya. Sebuah uraian singkat dari dokumentasi:
Saya telah membuat proyek di tempat kerja menggunakan submodula, dan masalah dengan menjaga agar submodula selalu mutakhir di klon semua orang terlalu banyak pekerjaan. Saya baru-baru ini berubah menggunakan subtree di mana-mana dan masalah-masalah itu hilang.
Perhatikan bahwa git-subtree adalah bagian dari
git/contrib
direktori, dan harus diinstal secara terpisah.sumber
Salah satu kelemahan menggunakan submodula adalah bahwa tarbal atau arsip zip di Github (dan banyak layanan lainnya) tidak termasuk sumber submodul. Artinya, arsip tidak mandiri. Ini menjadi masalah jika repositori kecil dan tidak benar-benar memiliki skrip build, seperti situs HTML statis tergantung pada pustaka JavaScript.
sumber
Ini adalah tempat yang ideal untuk menggunakan submodula. Mereka mengurangi ukuran dan kompleksitas repositori Anda dan membuatnya lebih mudah untuk memperbarui perpustakaan eksternal ke versi baru.
Mereka tidak sulit untuk mengetahui cara menggunakan, dan mereka cukup umum digunakan dalam situasi ini, jadi buat catatan di README proyek bahwa Anda menggunakan submodul dan apa yang harus dilakukan, dan orang-orang harus dapat mengetahui itu keluar. Pertama kali saya menemukan repositori dengan submodule, saya mendapatkannya dan berjalan dalam 10 hingga 15 menit dan tidak pernah memiliki masalah dengan mencari tahu apa yang harus dilakukan sejak itu.
sumber
Menggunakan submodul mencegah Anda membuat perubahan lokal pada kode & menciptakan ketergantungan pada repositori eksternal. Jika Anda yakin Anda tidak akan pernah ingin menyesuaikan perpustakaan atau membuat perbaikan bug lokal dan dapat memastikan bahwa server eksternal akan selalu tersedia ketika Anda ingin mengkloning salinan baru mereka adalah cara untuk pergi.
Singkatnya - apakah Anda hanya ingin menggunakan libs atau Anda menganggapnya bagian dari basis kode Anda? Jika itu bukan kode 'Anda', mengapa mereka berada dalam kontrol versi dan bukan hanya sesuatu yang Anda perlukan untuk menginstal?
sumber