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.