힘내 : 치명적 : Pathspec이 서브 모듈에 있습니다


145

이 안내서 에 따라 TravisCI가 Hakyll 정적 사이트를 자동으로 배포하도록 노력하고 있습니다.

내 레포가 설정되는 방법은 다음과 같습니다. 내 hakyll 및 markdown 파일이 포함 된 소스 분기가 있습니다. 그것은 html을 _site디렉토리에 빌드하며 , 이는 내 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

이 문제의 원인은 무엇이며 어떻게 피할 수 있습니까?

여기서 저장소를 볼 수 있습니다 .

답변:


430

git에서 디렉토리를 제거하고 다시 추가하면 나를 위해 일했습니다.

 git rm --cached directory
 git add directory

메인 git 프로젝트 .git에 추가 directory하고 싶기 때문에 의도적으로 디렉토리를 제거한 경우에 작동합니다 . 내 경우에는 git이 확장을 복제 git add .하고 너무 많이 생각하지 않고 실행했습니다 . Git은 내가 싫어하는 서브 모듈을 만들기로 결정했다. 그래서 나는 제거 directory/.git하고 만났다 Git: fatal: Pathspec is in submodule. 하위 모듈을 제거하는 방법을 찾을 수 없습니다. 위의 두 줄로 수정되었습니다.


8
이로 인해 실수로 기존 프로젝트로 프로젝트를 가져와 하위 모듈을 만드는 문제가 해결되었습니다. 나는 다른 모든 제안을 시도했습니다. 디렉토리를 제거하고 다시 추가하면 내 문제가 해결되었습니다. 감사.
RevNoah

나는 .git을 가지고 그것을 본다! 그러나 폴더에있는 일부 파일을 커밋하려면 "blahblah가 git로 알려진 파일과 일치하지 않습니다"라는 오류가 표시됩니다.
Dr.jacky

문제가 해결되었습니다. 내 경우에는 다른 컴퓨터에서 프로젝트를 복제했습니다.
AntonIva

GitHub와 동기화되는 Visual Studio 프로젝트에서 동일한 문제가 발생했습니다. 대부분의 개발이 진행되는 폴더는 추적되지 않았으며 추가하려고하면 동일한 오류가 발생했습니다. 이 솔루션은 나를 위해 그것을 고쳤다!
JohnRDOrazio

10

git add컨텍스트가 상위 저장소 ( "부모"는 하위 모듈을 포함하는 것을 의미) 인 것으로 보이며 경고를 트리거합니다.

다음을 사용하여 컨텍스트를 변경하십시오.

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

이 작업이 효과가 있으면 하위 git add _site리포지토리 로 돌아 가야하고 하위 하위 리포지토리에 변경 사항이있을 수 있으므로 잊지 마십시오.

그리고 둘 다 밀어야합니다.


2017 년 1 월 업데이트 (2 년 이상 후)

Git 2.12에서는 prefix_pathspec: Assertion더 이상 볼 수 없습니다.

Stefan Beller ( )의 commit 2d81c48 (2017 년 1 월 9 일)을 참조하십시오 . 도움 : Jeff King ( )Junio ​​C Hamano ( ) . (의해 병합 - Junio C 하마노 -00880a1 커밋 2,017 18 일월)stefanbeller
peffgitster
gitster

pathspec: 서브 모듈 관련 pathspec오류에 대한 더 나은 메시지 제공

git add a/b" a"가 하위 모듈 인 경우 " "를 실행 하면 오류가 발생하지만 의미있는 오류 메시지가 표시되지 않습니다.


내가 얻을 error: unknown option 자식-DIR = .git'`. 또한 Travis 내에서 부모 저장소를 커밋 할 수 없으므로 Travis가 무한 반복 실행됩니다.
jmite

@jmite 나는 대답을 수정했습니다 : --git-dir및 명령 --work-treegit명령이 아니라 옵션입니다 git add. 실용적이지 않은 git add경우 적어도 부분을 시도하십시오 git commit.
VonC

이것은 나를 위해 뭔가를 깰 것 같다, 그러나 나는 해결책을 찾을 수 있었다 여기
CGTheLegend

4

내 문제는 실수로 .git하위 모듈 의 폴더를 삭제하는 것 같습니다 .


1
나는 정확히 같은 문제가 있습니다. 어떻게 해결했는지 알려 주실 수 있습니까?
matt

.git 폴더를 삭제하지 않도록 스크립트를 변경하여 해결했습니다. 따라서 스크립트를 확인하고 실제로 디렉토리에 .git 폴더가 있는지 확인하는 것이 좋습니다.
jmite

1
나는하지만 원격 저장소가 더 이상 존재하지 않기 때문에 제거하고 싶습니다. 소스 코드를 그대로 포함시키는 것이 더 쉽습니다.
matt

가장 좋은 방법은 원격 저장소 변경을 보는 것입니다. git remote명령을 살펴보십시오 .
jmite

3

초기화되지 않은 서브 모듈 (기본적으로 .git디렉토리가 없음)에서 작동하는 것처럼 들리 므로 먼저 초기화하고 업데이트해야합니다.

git submodule init
git submodule update

그렇지 않으면이 서브 모듈이 더 이상 필요하지 않으면 다음과 같이 제거하십시오.

git submodule deinit _site

또는:

git rm -f --cached _site

다시 추가하십시오.

git add _site

현재 미해결 서브 모듈을 확인하십시오 : git submodule status.

참조 : 왜와 자식 erroring 자식 추가에 '어설 션 실패'입니다.?


1

프로젝트 내에 하위 모듈 디렉토리가 둘 이상있는 경우에도이 문제를 100 % 수정하십시오.

> git submodule foreach --recursive deinit -f --all -- <relative path>
> git add --all -f
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.