Jika saya memodifikasi submodule, dapatkah saya mendorong komit kembali ke asal submodule, atau akankah itu memerlukan kloning? Jika clone, dapatkah saya menyimpan clone di dalam repositori lain?
Jika saya memodifikasi submodule, dapatkah saya mendorong komit kembali ke asal submodule, atau akankah itu memerlukan kloning? Jika clone, dapatkah saya menyimpan clone di dalam repositori lain?
Jawaban:
Sebuah submodule hanyalah klon dari repo git di dalam repo lain dengan beberapa data meta tambahan (entri pohon gitlink, file .gitmodules)
$ cd your_submodule
$ git checkout master
<hack,edit>
$ git commit -a -m "commit in submodule"
$ git push
$ cd ..
$ git add your_submodule
$ git commit -m "Updated submodule"
gh-pages
cabang untuk dokumentasi pada repo github :)
Perhatikan bahwa sejak git1.7.11 ( [ANNOUNCE] Git 1.7.11.rc1 dan catatan rilis , Juni 2012) menyebutkan:
"
git push --recurse-submodules
" belajar secara opsional melihat ke dalam sejarah submodul yang terikat pada superproyek dan mendorongnya keluar.
Mungkin dilakukan setelah tambalan ini dan --on-demand
opsi:
recurse-submodules=<check|on-demand>::
Pastikan semua komitmen submodule yang digunakan oleh revisi untuk didorong tersedia di cabang pelacakan jarak jauh.
- Jika
check
digunakan, itu akan diperiksa bahwa semua submodule melakukan yang diubah dalam revisi yang akan didorong tersedia pada remote.
Kalau tidak, push akan dibatalkan dan keluar dengan status tidak nol.- Jika
on-demand
digunakan, semua submodula yang diubah dalam revisi yang akan didorong akan didorong.
Jika sesuai permintaan tidak dapat mendorong semua revisi yang diperlukan, maka itu juga akan dibatalkan dan keluar dengan status tidak nol.
Jadi, Anda dapat mendorong semuanya sekaligus (dari induk repo) a:
git push --recurse-submodules=on-demand
Opsi ini hanya berfungsi untuk satu tingkat sarang. Perubahan pada submodule di dalam submodule lain tidak akan didorong.
Dengan git 2.7 (Januari 2016), dorongan git sederhana akan cukup untuk mendorong repo induk ... dan semua submodulanya.
Lihat komit d34141c , komit f5c7cd9 (03 Des 2015), komit f5c7cd9 (03 Des 2015), dan komit b33a15b (17 Nov 2015) oleh Mike Crowe ( mikecrowe
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 5d35d72 , 21 Des 2015)
push
: tambahkanrecurseSubmodules
opsi konfigurasiThe
--recurse-submodules
baris perintah parameter telah ada selama beberapa waktu tetapi tidak memiliki file konfigurasi setara.Mengikuti gaya parameter yang sesuai untuk
git fetch
, mari kita adakanpush.recurseSubmodules
untuk menyediakan default untuk parameter ini.
Ini juga membutuhkan penambahan--recurse-submodules=no
untuk memungkinkan konfigurasi ditimpa pada baris perintah saat diperlukan.Cara paling mudah untuk mengimplementasikan ini tampaknya adalah
push
menggunakan kodesubmodule-config
dengan cara yang serupafetch
.
The git config
doc sekarang termasuk :
push.recurseSubmodules
:Pastikan semua komitmen submodule yang digunakan oleh revisi untuk didorong tersedia di cabang pelacak jarak jauh.
- Jika nilainya adalah '
check
', maka Git akan memverifikasi bahwa semua submodule melakukan perubahan pada revisi yang akan didorong tersedia pada setidaknya satu remote submodule. Jika ada komit yang hilang, push akan dibatalkan dan keluar dengan status tidak nol.- Jika nilainya adalah '
on-demand
' maka semua submodula yang diubah dalam revisi yang akan didorong akan didorong. Jika sesuai permintaan tidak dapat mendorong semua revisi yang diperlukan, maka itu juga akan dibatalkan dan keluar dengan status tidak nol. -- Jika nilainya adalah '
no
' maka perilaku default mengabaikan submodul saat mendorong dipertahankan.Anda dapat mengganti konfigurasi ini saat mendorong dengan menentukan '
--recurse-submodules=check|on-demand|no
'.
Begitu:
git config push.recurseSubmodules on-demand
git push
Git 2.12 (Q1 2017)
git push --dry-run --recurse-submodules=on-demand
akan benar-benar bekerja.
Lihat komit 0301c82 , komit 1aa7365 (17 Nov 2016) oleh Brandon Williams ( mbrandonw
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 12cf113 , 16 Des 2016)
push run with --dry-run
tidak benar-benar (Git 2.11 Des. 2016 dan lebih rendah / sebelum) melakukan dry-run ketika push dikonfigurasi untuk mendorong submodules sesuai permintaan.
Sebaliknya semua submodules yang perlu didorong sebenarnya didorong ke remote mereka sementara setiap pembaruan untuk proyek super dilakukan sebagai dry-run.
Ini adalah bug dan bukan perilaku yang diinginkan dari dry-run.Ajari
push
untuk menghormati--dry-run
opsi ketika dikonfigurasikan untuk secara push mendorong submodul 'on-demand'.
Ini dilakukan dengan mengedarkan--dry-run
flag ke proses anak yang melakukan push untuk submodules saat melakukan dry-run.
Dan masih di Git 2.12, Anda sekarang memiliki --recurse-submodules=only
opsi " " untuk mendorong submodula keluar tanpa mendorong proyek tingkat atas .
Lihat komit 225e8bf , komit 6c656c3 , komit 14c01bd (19 Des 2016) oleh Brandon Williams ( mbrandonw
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 792e22e , 31 Jan 2017)
git config push.recurseSubmodules on-demand
. Maka sederhanagit push
akan cukup untuk mendorong semuanya (repo utama dan submodula). Lihat jawaban saya yang diedit di bawah .