Git alt modülü itme


128

Bir alt modülü değiştirirsem, yürütmeyi alt modül kaynağına geri gönderebilir miyim, yoksa bu bir klon gerektirir mi? Klonlanırsa, bir klonu başka bir depoda saklayabilir miyim?


4
Git 2.7 (Ocak 2016) ile yalnızca bir kez ayarlamanız gerekecek git config push.recurseSubmodules on-demand. O zaman her şeyi (ana depo ve alt modüller) git pushitmek için basit bir yeterli olacaktır . Bkz aşağıda benim Düzenlenen cevabı .
VonC

Lütfen yapmaya çalıştığınız şey için örnek kod sağlayın.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Yanıtlar:


138

Bir alt modül, bazı ekstra meta verileri (gitlink ağaç girişi, .gitmodules dosyası) içeren başka bir depo içindeki bir git deposunun bir kopyasından başka bir şey değildir.

$ 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"

1
Evet ve itmeden önce senkronize edilmiş yerel şubenizden (varsa) değişiklikleri almayı unutmayın. Örneğin olur. gh-pagesbir github
deposunda

Your_submodule'unuzu eklemeden önce your_submodule'unuzu nasıl cd yapabilirsiniz anlamıyorum? Alt modül eklemenin en iyi yolunun "add" git komutunu kullanmak olduğunu düşünüyorum. Peki, alt modül eklemenin başka bir yolu var mı?
MrSo

1
@MrSo bence alt modül zaten orada, alt modüldeki bir şeyi değiştirmek için ona bağlanıyor.
HattrickNZ

108

Git1.7.11'de ( [ANNOUNCE] Git 1.7.11.rc1 ve sürüm notu , Haziran 2012) şunlardan bahsettiğine dikkat edin :

" git push --recurse-submodules" isteğe bağlı olarak süper projeye bağlı alt modüllerin geçmişlerine bakmayı ve onları dışarı atmayı öğrendi.

Muhtemelen bu yamadan ve --on-demandseçenekten sonra yapılır :

recurse-submodules=<check|on-demand>::

Gönderilecek revizyonlar tarafından kullanılan tüm alt modül işlemlerinin bir uzaktan izleme dalında mevcut olduğundan emin olun.

  • Eğer checkkullanılırsa, itilebilir revizyonuna bunların hepsi değişti alt modül kaydedilmesini bir uzaktan kumanda üzerinde kullanılabilir olduğunu kontrol edilecektir.
    Aksi takdirde, itme iptal edilecek ve sıfırdan farklı bir durumda çıkacaktır.
  • Eğer on-demandkullanılırsa, itilebilir revizyonuna bunların hepsi değişti submodules aktarılacak.
    İsteğe bağlı tüm gerekli revizyonları gerçekleştiremezse, aynı zamanda iptal edilecek ve sıfır olmayan durumla çıkacaktır.

Böylece (ana depodan) a ile her şeyi tek seferde itebilirsiniz:

git push --recurse-submodules=on-demand

Bu seçenek yalnızca bir seviye iç içe geçme için işe yarar. Başka bir alt modülün içindeki alt modülde yapılan değişiklikler itilmeyecektir.


Git 2.7 (Ocak 2016) ile, ana depoyu ve tüm alt modüllerini itmek için basit bir git itmesi yeterli olacaktır .

Bkz d34141c işlemek , f5c7cd9 işlemek , (3 Aralık 2015) f5c7cd9 işlemek (3 Aralık 2015) ve b33a15b taahhüt (17 Kasım 2015) tarafından Mike Crowe ( mikecrowe) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 5d35d72 tamamlama 2015 21 Ara)

push: recurseSubmodulesyapılandırma seçeneği ekle

--recurse-submodulesKomut satırı parametresi bir süredir var olan ama hiçbir yapılandırma dosyası eşdeğeri vardır.

İçin karşılık gelen parametrenin stilini takip ederek, bu parametre için bir varsayılan sağlamak için git fetchicat edelim push.recurseSubmodules.
Bu ayrıca --recurse-submodules=no, yapılandırmanın gerektiğinde komut satırında geçersiz kılınmasına izin vermek için eklenmesini gerektirir.

Bunu gerçekleştirmenin en basit yolu, pushkodu submodule-configbenzer şekilde kullanmaktır fetch.

git configDoküman artık şunlardır :

push.recurseSubmodules:

Gönderilecek revizyonlar tarafından kullanılan tüm alt modül işlemlerinin bir uzaktan izleme dalında mevcut olduğundan emin olun.

  • Değer ' check' ise Git, itilecek revizyonlarda değiştirilen tüm alt modül işlemlerinin alt modülün en az bir uzaktan kumandasında mevcut olduğunu doğrulayacaktır. Herhangi bir kaydetme eksikse, itme iptal edilecek ve sıfır olmayan bir durumla çıkılacaktır.
  • Değer ' on-demand' ise, itilecek revizyonlarda değiştirilen tüm alt modüller itilecektir. İsteğe bağlı tüm gerekli revizyonları gerçekleştiremezse, aynı zamanda iptal edilecek ve sıfır olmayan durumla çıkacaktır. -
  • Değer ' no' ise, itme sırasında alt modülleri yok saymanın varsayılan davranışı korunur.

Bu yapılandırmayı push sırasında ' --recurse-submodules=check|on-demand|no' belirterek geçersiz kılabilirsiniz .

Yani:

git config push.recurseSubmodules on-demand
git push

Git 2.12 (2017 1. Çeyrek)

git push --dry-run --recurse-submodules=on-demand aslında işe yarayacak.

Bkz. 0301c82 , commit 1aa7365 (17 Kasım 2016), Brandon Williams ( mbrandonw) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 12cf113 tamamlama 2016, 16 Ara)

push run with --dry-runaslında (Git 2.11 Aralık 2016 ve öncesi / öncesi), push alt modülleri isteğe bağlı olarak itecek şekilde yapılandırıldığında bir kuru çalıştırma gerçekleştirmez.
Bunun yerine, itilmesi gereken tüm alt modüller aslında uzaktan kumandalarına itilirken, süper proje için herhangi bir güncelleme kuru çalıştırma olarak gerçekleştirilir.
Bu bir hatadır ve kuru çalışmanın amaçlanan davranışı değildir.

Alt modülleri 'isteğe bağlı' yinelemeli olarak itecek şekilde yapılandırıldığında seçeneğe pushsaygı duymayı öğretin --dry-run.
Bu, --dry-runkuru çalıştırma gerçekleştirilirken alt modüller için bir itme gerçekleştiren alt işleme bayrağı ileterek yapılır .


Ve yine Git 2.12'de, üst düzey süper projeyi zorlamadan alt modülleri dışarı " --recurse-submodules=only" itmek için artık bir " " seçeneğiniz var .

Bkz 225e8bf işlemek , 6c656c3 taahhüt , 14c01bd taahhüt tarafından (19 Ara 2016) Brandon Williams ( mbrandonw) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 792e22e tamamlama 2017 31 Ara)


Bu şimdi mevcut değil mi?
CMCDragonkai

@CMCDragonkai evet bunu görebiliyorum olduğu git-scm.com/docs/git-push . Cevabı düzenledim.
VonC

Yinelemeli kaydetme var mı?
CMCDragonkai

1
her zaman 'git submodule foreach commit' yapabilirsiniz
reflog

.Gitmodules dosyamı bitbucket url'leri ile güncellemem gerekiyordu.
wclark
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.