git 서브 모듈 내에서 파일을 추적 할 수 없습니다
-
23-08-2019 - |
문제
문제: 파일을 추가합니다 ./shells/smallApps/*
git에 ./.git/
파일이 없으면 ./.git/info/exclude
또한 .gitignore
-파일.
이 질문은 기반입니다 이 트레드 문제가 완전히 해결되지 않는 곳.
난 달린다
$git status ~/bin
# On branch master
nothing to commit (working directory clean)
$git ls-files ~/bin
Screen/dev/vim-open.screen
--- cut ---
나는 내 git에 "shells/smallapps/*"파일이 없다는 점에 유의하십시오.
$ls shells/smallApps/ ~/bin
devTodo extract
~/bin
실행하여 내 git에 추가하고 싶습니다.
$git add shells/smallApps/devTodo shells/smallApps/extract
fatal: Path 'shells/smallApps/devTodo' is in submodule 'shells/smallApps'
$git add .
어떤 이유로 든 파일이 내 git에 추가되지 않았다는 점에 주목합니다.
$git status ~/bin
# On branch master
nothing to commit (working directory clean)
.git/info/exclude 또는 .gitignore -files에 파일이 없습니다.
마지막 경고는 무엇을 의미합니까?
해결책
업데이트
Git이 파일을 무시하는 두 가지 일반적인 이유가 있습니다. gitignore
그리고 submodules
.
보다 구체적으로 말하면 다음 조건은 Git이 파일을 무시하게됩니다.git add
'호출 :
- 파일은 패턴과 일치합니다
$GIT_DIR/exclude
. - 파일은 패턴과 일치합니다
.gitignore
Repo 내부에 파일을 파일하십시오. - 파일은 사용자 별 패턴과 일치합니다
.gitignore
파일 ( 'git config --global core.excludesfile
'). - 파일은 하위 모듈의 일부입니다.
강제 ''git add
'무시 된 파일에서 :
호출하여 특정 파일이 무시되는지 확인할 수 있습니다.git add full/path/to/file
'.
Man Page는 그것을 나타냅니다 "명령 줄에 무시 된 파일이 명시 적으로 지정된 경우 명령은 무시 된 파일 목록으로 실패합니다."
파일을 무시하면 '파일을 추가하도록 강제로 추가 할 수 있습니다.git add --force full/path/to/file
'.
하위 모듈 참조를 제거하기위한 지침 :
이전 답변에서 언급했듯이 shells/smallApps
a 하위 모듈 저장소에서.
파일이 하위 모듈의 일부인 경우 상황이 더 복잡합니다. 메인 프로젝트 내에서 하위 모듈의 내용을 수정할 수 없습니다.
하위 모듈 참조를 제거하고 기본 repo에서 파일을 직접 추적하려면 수행해야 할 몇 가지 단계가 있습니다. 하위 모듈에서 ".git"디렉토리를 간단히 제거 할 수는 없습니다. 기본 저장소와 하위 모듈 사이에는 세 가지 링크가 있습니다.
- 그만큼
.gitmodules
메인 repo의 파일. - 입력
.git/config
당신의 메인 repo의. - 메인 리포 기록의 하위 모듈과 관련된 커밋.
이것에 따라 관련 질문, 하위 모드를 완전히 제거하려면 다음 단계를 수행해야합니다.
참고 : 다른 지점 이이 하위 모듈에 의존하면 제거하면 저장소가 손상 될 수 있습니다! 이것은 위험한 작업입니다 ...주의해서 사용하십시오.
- 관련 라인을 삭제합니다
.gitmodules
파일. - 관련 섹션을 삭제하십시오
.git/config
. - 운영
git rm --cached path_to_submodule
(후행 슬래시 없음). - 저지르다
하위 모듈의 일부였던 파일은 이제 추적되지 않았으며 원하는대로 보관하거나 삭제하기로 결정할 수 있습니다 (아래 언급 된 하나의 경고와 함께).
이 파일이 필요하지 않으면 단순히 파일을 삭제할 수 있습니다.
경고: 이 파일을 보관하려면 (원하는 것처럼 보이면) 수동으로 제거해야합니다. .git
하위 모듈 폴더의 디렉토리 :
cd path_to_submodule
rm .git
cd ..
git add path_to_submodule
git status
git commit
업데이트:
추가 정보 요청 :
이 문제를 디버깅하는 데 도움이 되려면 다음 전체 명령 세션의 출력을 게시하십시오.
cd to the top-level directory in your repo
ls -al
cat .git/config
find . -name ".git*"
git status
git add editors
git add shells
git status
지금까지 한 일에 대한 설명을 바탕으로 다음을 기대합니다.
- 아니
.gitmodules
어디서나 파일 - 단 하나
.git
디렉토리 (Repo의 루트에서 발견) - 아니
.git
디렉토리editors/vim/vimdoclet
- 아니
.git
디렉토리shells/smallApps
다른 팁
나는 당신이 가지고있는 것을 본다 git add
하위 모듈에 대해 말하는 것. Git 리포지토리 중첩이 있습니까? 이 작업을 수행:
$ find . -name .git
얼마나 .git
디렉토리가 나열되어 있습니까? 둘 이상의 것이 있다면 여러 개의 중첩 리포지토리가 있고 이는이 혼란의 원인이 될 수 있습니다.
이 질문을 GIT 메일리스트에 게시해야합니다 (git@vger.kernel.org
). 더 신속하고 완전한 응답을 얻을 수 있습니다.
거기에 게시하기로 결정한 경우 다음을 포함시켜야합니다.
- 달성하려는 것에 대한 설명.
- 발생한 문제에 대한 설명.
- 전체 세션 로그 표시 :
- Repo의 최상위 디렉토리로 CD
ls -al
cat .git/config
find . -name ".git*"
git status
git add editors
git add shells
git status