자식 프로젝트는 하위 프로젝트가 더럽다고 말합니다.
방금 git diff를 실행했으며 약 10 개의 하위 모듈 모두에 대해 다음과 같은 결과가 나타납니다.
diff --git a/.vim/bundle/bufexplorer b/.vim/bundle/bufexplorer
--- a/.vim/bundle/bufexplorer
+++ b/.vim/bundle/bufexplorer
@@ -1 +1 @@
-Subproject commit 8c75e65b647238febd0257658b150f717a136359
+Subproject commit 8c75e65b647238febd0257658b150f717a136359-dirty
이것은 무엇을 의미 하는가? 어떻게 고치나요?
마크 Longair의 블로그 게시물에서 언급 한 바와 같이 망할 놈의 서브 모듈은 설명했다 ,
git 버전 1.7.0 이상에는 git 서브 모듈의 동작에 성가신 변화 가 포함되어 있습니다 .
서브 모듈은 수정 된 파일이나 추적되지 않은 파일이있는 경우 더티로 간주 되지만 이전에는 서브 모듈의 HEAD가 잘못된 커밋을 가리키는 경우에만 해당됩니다.
+
git 서브 모듈의 출력에서 더하기 부호 ( ) 의 의미 가 변경되었으며, 이것을 처음 접했을 때 변경 로그를 보거나 git에서 git bisect를 사용하여 무엇이 잘못되었는지 파악하는 데 약간의 시간이 걸립니다. .git에서 변경 사항을 찾으십시오. “지정된 버전에서는 더럽지 만”이라는 다른 기호를 사용하는 것이 사용자에게 훨씬 더 친절했을 것입니다.
다음과 같이 수정하면됩니다.
부모 repo로 돌아 가기 전에 diff가 "더러운"파일을 더 이상보고하지 않아야하는 각 하위 모듈 내에서 변경 / 진화를 커밋하거나 취소합니다. 서브 모듈의 모든 변경 사항을 서브 모듈
cd
의 루트 디렉토리로 되돌리려면git checkout .
dotnetCarpenter는 코멘트 당신이 할 수 있다고 :
git submodule foreach --recursive git checkout .
또는 "더러운"하위 모듈을 일시적으로 무시하려면을 추가
--ignore-submodules
하십시오git diff
.
Git 버전 1.7.2의 새로운 기능
으로 노암는 아래의 코멘트 , 이 질문은 Git 버전 1.7.2 이후, 당신은 더러운 서브 모듈을 함께 무시할 수, 그 언급 :
git status --ignore-submodules=dirty
또한, 서브 모듈을 제거하고 실행 git submodule init
하고 git submodule update
분명 트릭을 할 것입니다,하지만 항상 적절하거나 가능하지 않을 수 있습니다.
편집 :이 답변 (및 대부분의 다른 답변)은 더 이상 사용되지 않습니다. 대신 Devpool의 답변을 참조하십시오 .
원래 "git diff --ignore-submodules"및 "git status --ignore-submodules"를 전역 기본값으로 설정하는 구성 옵션은 없었습니다 (그러나 명령에 git 기본 플래그 설정 참조 ). 대안은 디폴트 설정하는 것입니다 ignore
당신이 (모두 무시하려는 각 개별 서브 모듈에 대한 설정 옵션 git diff
및 git status
중 하나에) .git/config
파일 (로컬 전용) 또는 .gitmodules
(자식에 의해 버전이 될 것이다). 예를 들면 다음과 같습니다.
[submodule "foobar"]
url = git@bitbucket.org:foo/bar.git
ignore = untracked
ignore = untracked
추적되지 않은 파일 만 ignore = dirty
무시하고 수정 된 파일도 무시하고 ignore = all
커밋도 무시합니다. 모든 하위 모듈에 와일드 카드를 사용하는 방법은 없습니다.
서브 모듈에 대한 포인터가 실제로 서브 모듈 디렉토리에있는 것이 아니기 때문입니다. 이 문제를 해결하려면 git submodule update
다시 실행해야 합니다.
git submodule foreach --recursive git checkout .
이것은 나를 위해 속임수를 쓰지 않았지만 서브 모듈에서 변경된 파일 목록 (내 경우에는 아무것도하지 않음)을 나에게주었습니다.
그래서 서브 모듈로 향할 수 있었고 git status는 내 HEAD가 분리되었음을 보여주었습니다-git checkout master, git status 수정 된 파일을 다시 한 번 git checkout> filename <, git pull 및 모든 것이 다시 잘 나타납니다.
하위 모듈에서 추적되지 않은 모든 파일을 무시하려면 다음 명령을 사용하여 해당 변경 사항을 무시하십시오.
git config --global diff.ignoreSubmodules dirty
로컬 git 구성에 다음 구성 옵션이 추가됩니다.
[diff]
ignoreSubmodules = dirty
자세한 내용은 여기를 참조하십시오
파일 모드 설정이 활성화되어 있고 하위 모듈 하위 트리에서 파일 권한을 변경 한 경우 하위 모듈이 더티로 표시 될 수 있습니다.
To disable filemode in a submodule, you can edit /.git/modules/path/to/your/submodule/config and add
[core]
filemode = false
If you want to ignore all dirty states, you can either set ignore = dirty
property in /.gitmodules file, but I think it's better to only disable filemode.
I ended up removing the submodule directory and initializing it once again
cd my-submodule
git push
cd ../
rm -rf my-submodule
git submodule init
git submodule update
In my case I wasn't sure what had caused this to happen, but I knew I just wanted the submodules to be reset to their latest remote commit and be done with it. This involved combining answers from a couple of different questions on here:
git submodule update --recursive --remote --init
Sources:
How do I revert my changes to a git submodule?
Easy way to pull latest of all git submodules
참고URL : https://stackoverflow.com/questions/4873980/git-diff-says-subproject-is-dirty
'IT story' 카테고리의 다른 글
부모 구성 요소의 CSS 파일에서 자식 구성 요소의 스타일을 지정하는 방법은 무엇입니까? (0) | 2020.05.05 |
---|---|
href 표현은 무엇입니까 (0) | 2020.05.05 |
ViewBag, ViewData 및 TempData (0) | 2020.05.05 |
왜 Func인가 (0) | 2020.05.05 |
서식을 손상시키지 않고 CSV 열에 쉼표를 포함시키는 방법이 있습니까? (0) | 2020.05.05 |