Git: ร้ายแรง: Pathspec อยู่ใน submodule


147

ฉันกำลังพยายามให้ TravisCI ปรับใช้ไซต์คงที่ Hakyll ของฉันโดยอัตโนมัติตามคู่มือนี้

นี่คือวิธีการตั้งค่า repo ของฉัน ฉันมีสาขาต้นทางของฉันซึ่งมีไฟล์ hakyll และ markdown ของฉัน มันสร้าง html ใน_siteไดเรกทอรีซึ่งตั้งค่าเป็น submodule เชื่อมโยงกับmasterสาขาของฉัน

ฉันสร้างเว็บไซต์โดยไม่มีปัญหาจากนั้นcdเข้าสู่ไดเรกทอรี _site อย่างไรก็ตามเมื่อฉันลองgit add ./*ไฟล์ HTML ที่สร้างขึ้นใหม่ฉันได้รับข้อผิดพลาดต่อไปนี้:

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

เมื่อฉันลองgit add --allฉันได้รับข้อผิดพลาดนี้:

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

อะไรเป็นสาเหตุของสิ่งนี้และฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร

คุณสามารถดูพื้นที่เก็บข้อมูลที่นี่

คำตอบ:


432

การลบไดเรกทอรีออกจาก git และเพิ่มมันอีกครั้งทำงานให้ฉัน:

 git rm --cached directory
 git add directory

ใช้งานได้หากคุณลบ.gitไดเรกทอรีอย่างตั้งใจเพราะคุณต้องการเพิ่มdirectoryไปยังโครงการ git หลักของคุณ ในกรณีเฉพาะของฉันฉันได้คอมไพล์โคลนส่วนขยายและวิ่งgit add .โดยไม่ต้องคิดมากเกินไป Git ตัดสินใจสร้าง submodule ซึ่งฉันไม่ชอบ ดังนั้นผมจึงเอาออกและวิ่งเข้าไปในdirectory/.git Git: fatal: Pathspec is in submoduleฉันหาวิธีลบสิ่งที่ submodule ไม่ได้ แก้ไขด้วยสองบรรทัดด้านบน


8
สิ่งนี้แก้ไขปัญหาที่ฉันมีเมื่อฉันดึงโครงการลงในโครงการที่มีอยู่โดยไม่ได้ตั้งใจสร้าง submodule ฉันลองทำทุกข้อเสนอแนะอื่น ๆ ที่นั่น การลบไดเรกทอรีและเพิ่มปัญหาของฉันอีกครั้ง ขอบคุณ
RevNoah

ฉันมี. git และดูมัน! แต่เมื่อฉันต้องการส่งไฟล์บางไฟล์ที่อยู่ในโฟลเดอร์มันแสดงข้อผิดพลาด "blahblah ไม่ตรงกับไฟล์ใด ๆ ที่รู้จัก git"
Dr.jacky

ปัญหานี้ได้รับการแก้ไข ในกรณีของฉันฉันโคลนโครงการในเครื่องอื่น
AntonIva

ฉันมีปัญหาเดียวกันกับโครงการ Visual Studio ซึ่งฉันซิงค์กับ GitHub โฟลเดอร์ที่การพัฒนาส่วนใหญ่ของฉันไม่ได้ถูกติดตามและถ้าฉันลองเพิ่มมันฉันได้รับข้อผิดพลาดเดียวกัน วิธีนี้แก้ไขให้ฉันด้วย!
JohnRDOrazio

10

ดูเหมือนว่าgit addบริบทคือ repo หลัก ("parent" หมายถึงบริบทรวมถึง submodule) ซึ่งเป็นต้นเหตุของคำเตือน

ลองและเปลี่ยนบริบทด้วย:

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

อย่าลืมว่าถ้าใช้งานได้คุณจะต้องกลับไปที่ repo หลักและgit add _siteเนื่องจาก subrepo จะมีการเปลี่ยนแปลง

และคุณจะต้องผลักดันทั้งคู่


อัปเดตมกราคม 2560 (2 ปีขึ้นไป)

ด้วย Git 2.12 คุณจะไม่เห็นprefix_pathspec: Assertionอีกต่อไป

ดูกระทำ 2d81c48 (9 มกราคม 2017) โดยสเตฟานสนั่น (stefanbeller )
ช่วยโดย: เจฟฟ์คิง ( peff)และJunio C Hamano (gitster )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 00880a1 , 18 มกราคม 2017)

pathspec: ให้ข้อความที่ดีกว่าสำหรับpathspecข้อผิดพลาดที่เกี่ยวข้องกับ submodule

เรียกใช้ " git add a/b" เมื่อ " a" เป็นข้อผิดพลาดใน submodule อย่างถูกต้อง แต่ไม่มีข้อความแสดงข้อผิดพลาดที่มีความหมาย


ฉันได้รับerror: unknown option git-dir = .git'` นอกจากนี้ฉันไม่สามารถกระทำ repo ผู้ปกครองของฉันจากภายในเทรวิสที่จะทำให้เกิดวงวนไม่สิ้นสุดของเทรวิสที่ใช้ ...
jmite

@jmite ฉันได้แก้ไขคำตอบ: --git-dirและ--work-treeเป็นตัวเลือกของgitคำสั่งไม่ใช่git addคำสั่ง ลองอย่างน้อยgit addส่วนถ้าgit commitไม่เป็นจริง
VonC

ดูเหมือนว่าจะทำลายบางอย่างให้ฉัน แต่ฉันสามารถหาวิธีแก้ไขได้ที่นี่
CGTheLegend

4

ดูเหมือนว่าปัญหาของฉันคือฉันตั้งใจลบ.gitโฟลเดอร์ของ submodule


1
ฉันมีปัญหาเดียวกันทั้งหมด คุณสามารถแบ่งปันวิธีที่คุณแก้ไขได้หรือไม่?
แมตต์

ฉันแก้ไขมันโดยการเปลี่ยนสคริปต์เพื่อไม่ลบโฟลเดอร์. git ดังนั้นฉันขอแนะนำให้คุณตรวจสอบสคริปต์ของคุณดูว่าคุณมีโฟลเดอร์. git หรือไม่ในไดเรกทอรี
jmite

1
ฉันทำ แต่ฉันต้องการกำจัดเพราะ repo ระยะไกลไม่มีอยู่อีกต่อไป มันง่ายกว่าที่เราจะรวมซอร์สโค้ดตามที่เป็นอยู่
แมตต์

คุณเป็นทางออกที่ดีที่สุดคือดูการเปลี่ยน repos ระยะไกล ลองดูที่git remoteคำสั่ง
jmite

3

ดูเหมือนว่าคุณกำลังดำเนินการบน submodules ที่ไม่ได้กำหนดค่าเริ่มต้น (โดยทั่วไปคือ.gitไดเรกทอรีหายไป) ดังนั้นคุณควรเริ่มต้นก่อนและอัปเดต:

git submodule init
git submodule update

มิฉะนั้นถ้าคุณไม่ต้องการ submodule นี้อีกต่อไปให้ลบออกโดย:

git submodule deinit _site

หรือ:

git rm -f --cached _site

และเพิ่มอีกครั้ง:

git add _site

ตรวจสอบ submodules git submodule statusที่โดดเด่นในปัจจุบันของคุณโดย:

ดูเพิ่มเติมที่: ทำไมข้อผิดพลาดคอมไพล์ด้วย 'Assertion Fail' ในการเพิ่มคอมไพล์?


1

แก้ไข 100% สำหรับปัญหานี้แม้ว่าคุณจะมีไดเรกทอรี submodule มากกว่าหนึ่งรายการในโครงการ:

> git submodule foreach --recursive deinit -f --all -- <relative path>
> git add --all -f
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.