Git alt modülü yeni taahhütler gösterir, alt modül durumu taahhüt edilecek bir şey söylemez


47

Bir git havuzunda, bir github deposuna referans vermek için .gitmodules dosyamı kurdum:

[submodule "src/repo"]
    path = src/repo
    url = repourl

bu depoda 'git status' olduğunda şunu gösterir:

On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   src/repo (new commits)

Repo'da src / repo ve git durumuna bakarsam, taahhüt edilecek bir şey olmadığını söyler.

Üst düzey git repo neden şikayet ediyor?

Yanıtlar:


42

Bunun nedeni, her bir alt modül için işleyen (bir dal veya etiket değil, tam olarak SHA-1 karmasında temsil edilen bir iş) olan Git kayıtlarının kontrol edilmesi gerektiğidir. Alt modül dir içindeki bir şeyi değiştirirseniz, Git onu algılar ve bu değişiklikleri üst düzey depoda yapmaya zorlar.

Git'in git diffneyin değiştiğini değiştirdiğini göstermek için üst seviye depoda çalıştırın . Alt modülünüzde zaten bazı taahhütlerde bulunduysanız (bu nedenle alt modülde "temiz"), alt modülün karma değişimini rapor eder.

$ git diff
diff --git a/src/repo b/src/repo
index b0c86e2..a893d84 160000
--- a/src/repo
+++ b/src/repo
@@ -1 +1 @@
-Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea
+Subproject commit a893d84d323cf411eadf19569d90779610b10280

Aksi halde -dirty, üst düzey depoda gerçekleştiremediğiniz veya işleyemediğiniz karma değişiklikleri gösterir . git statusayrıca alt modülün izlenmemiş / değiştirilmiş içeriğe sahip olduğunu iddia ediyor.

$ git diff
diff --git a/src/repo b/src/repo
--- a/src/repo
+++ b/src/repo
@@ -1 +1 @@
-Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea
+Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea-dirty

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)

    modified:   src/repo (untracked content)

no changes added to commit (use "git add" and/or "git commit -a")

Alt modül için hangi taahhüt kayıtlarının kontrol edilmesi gerektiğini güncellemek için, alt modüldeki değişiklikleri taahhüt etmenin yanı sıra, alt modülü kabul etmeye gitmeniz gerekir:

git add src/repo

1
Ana depoya herhangi bir taahhüt eklemek istemiyorsam ne olur? Benim kullanım durumum - Bir ana havuzum var, sonra da bir havuz olan wiki'm var (GitHub ve Bitbucket'te olduğu gibi). Şimdi wikiwiki dizinine alt modül olarak ekledim . Değişikliklerimin (yani wiki dizinindeki) değişikliklerimin hiçbirinin ana / kod havuzumda yansıtmasını istemiyorum . Sadece eklemek gerekir yolunu skinTenimde ana deponun? Nasıl devam etmeliyim? wiki.gitmodules .gitignore
yadav_vi

14
Benim durumumda tek yapmam gereken alt modülün kendisini ana depodan güncellemekti. Gibi bir şey:git submodule update src/repo
Agustín Amenabar

19

Aynı problem sınıfına girdim ve kabul edilen cevabın yorumlar bölümünde @AugustinAmenabar tarafından sunulan çözümü kullanabildim . Kurulumum biraz daha karmaşıktı, bu yüzden --recursivetüm bağımlılıkları güncellemek için bayrak ekledim .

git submodule update src/repo --recursive

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.