SORU
28 Ocak 2010, PERŞEMBE


Git submodule 'referans' hata ağacı değil kafa

Geçersiz bir taahhüt gösteren bir submodule ile bir projem var: submodule yerel kaldı ve ben başka bir repo dan almaya çalıştığımda: commit

$ git submodule update
fatal: reference is not a tree: 2d7cfbd09fc96c04c4c41148d44ed7778add6b43
Unable to checkout '2d7cfbd09fc96c04c4c41148d44ed7778add6b43' in submodule path 'mysubmodule'

Submodule KAFA ne olması gerektiğini biliyorum, bu yerel olarak, repo iterek olmadan değiştirmek için herhangi bir yoluyok2d7cfbd09fc96c04c4c41148d44ed7778add6b43 işliyorsun ?

Eğer açık... here's a similar situation buldum oluyorum emin değilim.

CEVAP
29 Ocak 2010, Cuma


Bu submodule. bir depo kullanmak istediğiniz tamamlama süper-proje mevcut durumundan başvurulan tamamlama (farklı) içeren varsayarak, bunu yapmak için iki yol vardır.

İlk kullanmak istediğiniz submodule itibaren taahhüt önceden bilmek gerekir. “İçeride,” doğrudan submodule sonra süper proje güncelleme ayarlayarak. dışarı çalışır İkinci “dışında,” submodule modifiye ve süper-proje sıfırlanmasını farklı bir submodule başvurmak için bir dizin olduğunu taahhüt super-proje taahhüt bularak. eserleri

İçeri, Dışarı

Eğer ki zaten siz biliyorsunuz işlemek istediğiniz submodule için kullanmak, cd submodule, kontrol işlemek istiyorsanız, o zaman git add git commit tekrar süper proje.

Örnek:

$ git submodule update
fatal: reference is not a tree: e47c0a16d5909d8cb3db47c81896b8b885ae1556
Unable to checkout 'e47c0a16d5909d8cb3db47c81896b8b885ae1556' in submodule path 'sub'

Oops, biri yayınlanmamış başvuran tamamlama submodule sub tamamlama süper bir proje yaptı. Her nasılsa, biz zaten submodule 5d5a3ee314476701a20f2c6ec4a53f88d651df6c taahhüt etmesini istiyoruz. Oraya git ve doğrudan göz atın.

Bu Submodule olarak ö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üt araştırıyoruz beri, bu submodule ayrılmış bir BAŞ üretir. İsterseniz emin olmak için submodule kullanarak bir şube, daha sonra git checkout -b newbranch <commit> oluşturun ve kontrol şubesinde taahhüt veya ödeme şube istediğiniz (örneğin bir istenen işlemek en ucu).

Süper proje güncelleştirin

Bu submodule bir kasada çalışan ağaç için bir değişiklik olarak süper proje yansıyor. Süper proje Endeksi değişim aşaması ve sonuçları doğrulamak için ihtiyacımız var.

$ 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

Submodule güncelleştirme submodule zaten belirtilen taahhüt olduğu için sessiz kaldı. İlk diff dizin ve worktree aynı olduğunu gösterir. Üçüncü diff tek aşamalı bir değişim farklı işlemek için sub submodule hareketli olduğunu gösterir.

Commit

git commit

Bu sabit submodule giriş tamamlar.


Önündeydi

Eğer submodule gelen kullanmalısınız taahhüt eminseniz, superproject tarih size rehberlik etmek bakabilirsiniz. Ayrıca reset doğrudan süper projesi ile yönetebilirsiniz.

$ git submodule update
fatal: reference is not a tree: e47c0a16d5909d8cb3db47c81896b8b885ae1556
Unable to checkout 'e47c0a16d5909d8cb3db47c81896b8b885ae1556' in submodule path 'sub'

Bu yukarıdaki ile aynı durum. Ama bu sefer süper projesi ile tamir yerine submodule içine daldırma odaklanacağız.

Süper proje Hatalı olduğunu Taahhüt bulabilirsiniz

$ 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, ce5d37c, üst submodule (ce5d37c~) geri alacağız çok kötü geçti gibi görünüyor.

Alternatif olarak, yama metin (5d5a3ee314476701a20f2c6ec4a53f88d651df6c) submodule. taahhüt almak ve yukarıdaki “işlemi yerine.” içinde kullanabilirsiniz

Süper proje içinde ödeme

$ git checkout ce5d37c~ -- sub

Bu taahhüt de ne olduğunu sub submodule giriş ce5d37c~ süper proje Sıfırla.

Bu Submodule güncelleştirin

$ git submodule update
Submodule path 'sub': checked out '5d5a3ee314476701a20f2c6ec4a53f88d651df6c'

Submodule güncelleme TAMAM (müstakil BAŞ gösterir) gitti.

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 ce5d37c~ aynı olduğunu gösterir. İkinci diff dizin ve worktree aynı olduğunu gösterir. Üçüncü diff tek aşamalı bir değişim farklı işlemek için sub submodule hareketli olduğunu gösteriyor.

Commit

git commit

Bu sabit submodule giriş tamamlar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jbignacio

    jbignacio

    13 Mart 2006
  • LearnCode.academy

    LearnCode.ac

    20 Aralık 2012
  • Rachel Talbott

    Rachel Talbo

    26 Ocak 2011