Alt modülün deposunun kullanmak istediğiniz bir taahhüt içerdiğini varsayarsak (süper projenin mevcut durumundan referans alınan taahhütten farklı olarak), bunu yapmanın iki yolu vardır.
Birincisi, kullanmak istediğiniz alt modülün taahhüdünü zaten bilmenizi gerektirir. Doğrudan alt modülü ayarlayıp süper projeyi güncelleyerek “içten dışa” çalışır. İkincisi, alt modülü değiştiren süper projenin taahhüdünü bularak ve daha sonra farklı bir alt modül taahhüdüne atıfta bulunmak için süper projenin dizinini sıfırlayarak “dışarıdan, içeri” den çalışır.
Tersyüz
Zaten biliyorsanız alt modülü, kullanmak istediğiniz işlemek hangi cd
ardından, istediğiniz işlemek kontrol, alt modülün etmek git add
vegit commit
geri süper projede.
Misal:
$ git submodule update
fatal: reference is not a tree: e47c0a16d5909d8cb3db47c81896b8b885ae1556
Unable to checkout 'e47c0a16d5909d8cb3db47c81896b8b885ae1556' in submodule path 'sub'
Hata! Birisi, alt modülde yayınlanmamış bir taahhüt anlamına gelen bir süper proje taahhüdü yaptı sub
. Her nasılsa, alt modülün işlenmesini istediğimizi zaten biliyoruz 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
. Oraya git ve doğrudan kontrol et.
Alt Modüldeki Ödeme
$ cd sub
$ git checkout 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
Note: moving to '5d5a3ee314476701a20f2c6ec4a53f88d651df6c' which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 5d5a3ee... quux
$ cd ..
Bir taahhüdü kontrol ettiğimiz için, bu, alt modülde bağımsız bir HEAD üretir. Alt modülün bir dal kullandığından emin olmak istiyorsanız, komut satırında bir dal git checkout -b newbranch <commit>
oluşturmak ve kullanıma almak veya istediğiniz dalda ödeme yapmak için kullanın (örneğin, ipucunda istenen tamamlayıcı ile).
Süper projeyi güncelleyin
Alt modüldeki bir ödeme, süper projeye çalışma ağacında bir değişiklik olarak yansıtılır. Bu nedenle, süper projenin dizinindeki değişikliği aşamalı hale getirmeli ve sonuçları doğrulamalıyız.
$ git add sub
Sonuçları Kontrol Edin
$ git submodule update
$ git diff
$ git diff --cached
diff --git c/sub i/sub
index e47c0a1..5d5a3ee 160000
--- c/sub
+++ i/sub
@@ -1 +1 @@
-Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
Alt modül zaten belirtilen tamamlamada olduğundan alt modül güncellemesi sessizdi. İlk fark, dizin ile çalışma ağacının aynı olduğunu gösterir. Üçüncü fark, tek aşamalı değişikliğin sub
alt modülü farklı bir işleme taşıdığını göstermektedir.
işlemek
git commit
Bu, sabitlenmiş alt modül girişini gerçekleştirir.
Dıştan içe
Alt modülden hangi taahhüdü kullanmanız gerektiğinden emin değilseniz, size yol göstermek için süper projedeki geçmişe bakabilirsiniz. Sıfırlamayı doğrudan süper projeden de yönetebilirsiniz.
$ git submodule update
fatal: reference is not a tree: e47c0a16d5909d8cb3db47c81896b8b885ae1556
Unable to checkout 'e47c0a16d5909d8cb3db47c81896b8b885ae1556' in submodule path 'sub'
Bu yukarıdakiyle aynı durumdur. Ancak bu sefer, alt modüle daldırmak yerine süper projeden düzeltmeye odaklanacağız.
Süper Projenin Errant Taahhüdünü Bulun
$ git log --oneline -p -- sub
ce5d37c local change in sub
diff --git a/sub b/sub
index 5d5a3ee..e47c0a1 160000
--- a/sub
+++ b/sub
@@ -1 +1 @@
-Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
+Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
bca4663 added sub
diff --git a/sub b/sub
new file mode 160000
index 0000000..5d5a3ee
--- /dev/null
+++ b/sub
@@ -0,0 +1 @@
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
Tamam, kötü gidiyor gibi görünüyor ce5d37c
, bu yüzden alt modülü üst öğesinden ( ce5d37c~
) geri yükleyeceğiz .
Alternatif olarak, alt modülün taahhüdünü yama metninden ( 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
) alabilir ve bunun yerine yukarıdaki “iç, dış” işlemini kullanabilirsiniz.
Süper projede ödeme
$ git checkout ce5d37c~ -- sub
Bu için alt modül girişi sıfırlamak sub
en işlemek ne kadar ce5d37c~
süper projede.
Alt Modülü Güncelle
$ git submodule update
Submodule path 'sub': checked out '5d5a3ee314476701a20f2c6ec4a53f88d651df6c'
Alt modül güncellemesi tamamlandı (ayrılmış bir HEAD olduğunu gösterir).
Sonuçları Kontrol Edin
$ git diff ce5d37c~ -- sub
$ git diff
$ git diff --cached
diff --git c/sub i/sub
index e47c0a1..5d5a3ee 160000
--- c/sub
+++ i/sub
@@ -1 +1 @@
-Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
İlk fark sub
, şimdi aynı olduğunu gösteriyor ce5d37c~
. İkinci fark, indeks ve çalışma ağacının aynı olduğunu gösterir. Üçüncü fark, sadece aşamalı değişikliğin sub
alt modülün farklı bir işleme taşınması olduğunu gösterir .
işlemek
git commit
Bu, sabitlenmiş alt modül girişini gerçekleştirir.