Git: fatal: Pathspec alt modülde


147

Bu kılavuza göre TravisCI'yı Hakyll statik sitemi otomatik olarak dağıtmaya çalışıyorum .

Repo'mun nasıl oluşturulduğu aşağıda açıklanmıştır. Benim hakyll ve markdown dosyalarımı içeren kaynak şubem var. Html _sitebenim alt masterdalı bağlı bir alt modül olarak ayarlanan dizine oluşturur .

Siteyi sorunsuz bir şekilde, daha sonra cd_site dizinine inşa ediyorum . Ancak, git add ./*yeni oluşturulan HTML dosyalarını denediğimde , aşağıdaki hatayı alıyorum:

fatal: Pathspec './about.html' is in submodule '_site'

Denediğimde git add --allşu hatayı alıyorum:

git: pathspec.c:317: prefix_pathspec: Assertion `item->nowildcard_len <= item->len && item->prefix <= item->len' failed.

/home/travis/build.sh: line 245: 1566 Aborted git add --all

Buna neden olan nedir ve bundan nasıl kaçınabilirim?

Depoyu buradan görüntüleyebilirsiniz .

Yanıtlar:


432

Dizini git'ten kaldırmak ve tekrar eklemek benim için çalıştı:

 git rm --cached directory
 git add directory

Ana git projenize .giteklemek istediğiniz için dizini kasıtlı olarak kaldırdıysanız çalışır directory. Benim özel durumumda, git bir uzantıyı klonladım ve git add .fazla düşünmeden koştum . Git hoşlanmadığım bir alt modül oluşturmaya karar verdi. Ben de kaldırıldım directory/.gitve içine girdim Git: fatal: Pathspec is in submodule. Alt modülün nasıl kaldırılacağını bulamadım. Yukarıdaki iki çizgi ile düzeltildi.


8
Bu, bir projeyi yanlışlıkla bir projeyi aşağı çekerek mevcut bir projeye indirdiğim bir sorunu çözdü. Orada hemen hemen her öneri denemişti. Dizini kaldırıp tekrar eklemek sorunumu çözdü. Teşekkürler.
RevNoah

.Git'im var ve görüyorum! Ama bir klasörde bulunan bazı dosyaları işlemek istediğimde, "blahblah git bilinen herhangi bir dosya (lar) ile eşleşmedi" hatası gösteriyor
Dr.jacky

Bu sorunu düzeltti. Benim durumumda, projeyi başka bir makinede klonladım.
AntonIva

GitHub ile senkronize ettiğim bir Visual Studio projesinde de aynı sorunu yaşıyordum. Gelişimimin çoğunun gerçekleştiği klasör izlenmiyordu ve eklemeyi denersem aynı hatayı alıyordum. Bu çözüm benim için de düzeltildi!
JohnRDOrazio

10

git addBağlamın ana repo olduğu anlaşılıyor ("üst", alt modülü içeren olanı ifade ediyor), bu da uyarıyı tetikliyor.

Bağlamını aşağıdakilerle değiştirmeye çalışın:

cd _site
git --git-dir=.git --work-tree=. add . 
git --git-dir=.git --work-tree=. commit -m "new files"

Bu işe yararsa yine de ana repoya geri dönmek zorunda git add _sitekalacağınızı ve alt raporun değişeceğini unutmayın.

Ve ikisini de itmeniz gerekecekti.


Güncelleme Ocak 2017 (2+ yıl sonra)

Git 2.12 ile prefix_pathspec: Assertionartık görmeyeceksiniz .

Bkz 2d81c48 taahhüt tarafından (09 Oca 2017) Stefan Beller'in ( stefanbeller) .
Yardım eden: Jeff King ( peff) ve Junio ​​C Hamano ( gitster) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 00880a1 tamamlama 2017 18 Ara)

pathspec: modülle ilgili pathspechata için daha iyi mesaj ver

" git add a/b" When " a" komutunu çalıştırmak, önemli bir hata mesajı vermeden doğru şekilde yerleştirilmiş bir alt modüldür.


Ben olsun error: unknown option git-dir = .git'`. Ayrıca,
Travis'ten

@jmite Cevabı düzelttim: --git-dirve --work-tree, gitkomutun değil komutun seçenekleridir git add. Pratik git adddeğilse, en azından parçayı deneyin git commit.
VonC

Bu benim için bir şey kırıyor gibi görünüyor, ama burada
CGTheLegend

4

.gitSorunum , yanlışlıkla alt modülün klasörünü sildiğim gibi görünüyor .


1
Aynı problemim var. Nasıl çözdüğünü paylaşabilir misin?
matt

Komutumu değiştirerek .git klasörünü silmemek için çözdüm. Bu yüzden betiğinizi kontrol etmenizi, dizinde gerçekten .git klasörünüzün olup olmadığını kontrol etmenizi öneririm.
Ocak

1
Yapıyorum ama artık uzak repo olmadığı için ondan kurtulmak istiyorum. Kaynak kodunu olduğu gibi eklememiz daha kolay.
matt

O zaman uzak depoları değiştirmeye bakmak en iyisidir. git remoteKomuta bir göz atın .
jmite

3

Başlatılmamış alt modüller üzerinde çalıştığınız anlaşılıyor (temel olarak .gitdizinleri eksik ), bu yüzden önce onları başlatmalı ve güncellemelisiniz:

git submodule init
git submodule update

Aksi takdirde, bu alt modüle artık ihtiyacınız yoksa, tarafından kaldırabilirsiniz:

git submodule deinit _site

veya:

git rm -f --cached _site

ve tekrar ekleyin:

git add _site

Tarafından şu anki ödenmemiş submodules kontrol edin: git submodule status.

Ayrıca bkz: git git ekinde neden 'Onaylama başarısız' ile hata veriyor?


1

Proje içinde birden fazla alt modül dizininiz olsa bile bu sorun için% 100 düzeltme:

> git submodule foreach --recursive deinit -f --all -- <relative path>
> git add --all -f
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.