2013-02-27 34 views
14

Birden çok alt modülü olan bir gitme yanıtım var. Bu alt modüllerden biri, kendi çoklu alt modüllerine sahiptir. Tek yapmam gereken, ana repo üzerinde eski bir işlem olup olmadığını kontrol etmek ve o sırada doğru kod durumunu almak için tüm alt modüllerdeki uygun taahhütleri kontrol etmesini sağlamak.Tüm alt modüller de dahil olmak üzere eski git taahhüdü nasıl tekrarlanır?

ls-tree komutu, her bir alt modemin hangi işlemi gerçekleştirdiğini bana söyleyebildiğinden, gerekli bilgiyi içerdiğini biliyorum. Bununla birlikte, her birini el ile kontrol etmem gerekiyor ki bu da acı verici bir şekilde zaman alıyor.

git checkout --recursive gibi bir şey arıyorum ama böyle bir komut var gibi görünmüyor.

Bunu yapmak için yine var mı?

+0

Not: 'git checkout --recurse-submodules' aslında şu anda var (2017). Ama sadece gelecek olan 2.14, düzgün çalışmasını sağlayacaktır. Bakınız [aşağıda cevabım] (https://stackoverflow.com/a/44249558/6309). – VonC

cevap

17

Bunu başarmak için iki komutları gerekir:

git checkout *oldcommit* 
git submodule update --recursive 
+1

Çok teşekkürler! Tabii ki basit bir şey olduğu ortaya çıktı. –

4

daha alt modül eski kasada orada olup olmadığına bağlı olarak, bir daha deprem olmaz submodules başlatmak için aşağıdakileri yapmanız gerekebilir yeni kaydedilmesini:

git checkout *oldcommit* 
git submodule init 
git submodule update --recursive 
6

Not: birden fazla submodules (ve submodüller içindeki submodules) varsa, Git 2.14 (Q3 2017) yardımcı olacaktır (daha yeni olduğunu 2013 den OP)

superproject kaydedilen tamamlama göre tüm başlatıldı Altmodüllerin içeriğini güncelleyecektir --recurse-submodules kullanma
git checkout --recurse-submodules 

.
Bir alt modüldeki yerel değişikliklerin üzerine yazılırsa, -f kullanılmadığı sürece ödeme başarısız olur.

"git checkout --recurse-submodules"

kendisi submodules baktığı altmodülün ile oldukça işe yaramadı. Git 2.14 ile olacak.

+0

Neden "-F" her zaman gerekli olduğunu anlamıyorum. '-f 'olmadan alt modülleri güncellemez. – linquize

+0

@linquize '-f' yalnızca alt modüldeki herhangi bir yerel modifikasyonunuz varsa gerekli olmalıdır. – VonC

İlgili konular