programing

Gitdiff는 하위 프로젝트가 더럽다고 말합니다.

stoneblock 2023. 5. 29. 09:15

Gitdiff는 하위 프로젝트가 더럽다고 말합니다.

저는 방금 약간의 차이를 보였으며, 약 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

이것은 무엇을 의미합니까?어떻게 고치죠?

10년 후인 2021년 1월 업데이트:

서브모듈git diff(man) 커밋 시 추적되지 않은 크러스트가 있는 서브모듈 작업 트리를 보여줍니다.<objectname>-dirty"지만당연기대는한하▁"" "입니다.-dirty인디케이터는 작업 트리에 추적되지 않은 파일이 있는 것을 더러움의 원인으로 간주하지 않는 ""와 git describe --dirty(man)일치할 것입니다.
Git 2.31(2021년 1분기)을 통해 불일치가 해결되었습니다.

Sangeeta Jain()sangu09의 커밋 8ef9312(2020년 11월 10일)를 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 0806279, 2021년 1월 25일 커밋)

추적되지 않은 파일이 있는 하위 모듈을 "로 표시하지 diff않음-dirty"

사인 오프 바이: Sangeeta Jain

를 Gitdiff로 합니다.-dirty하위 모듈 디렉터리에 추적되지 않은 파일만 있는 경우에도 마찬가지입니다.
이는 해당 상태의 하위 모듈 디렉터리에서 실행할 때 표시되는 내용과 일치하지 않습니다.

만들다--ignore-submodules=untracked구성 변수 또는 명령줄 옵션이 없을 때의 기본값으로, 명령이 '를 제공하지 않습니다.-dirty되지 않은 파일이 있는 접미사를 하여 작업 트에 않파있는일하이대지다접과 시킵니다.git describe --dirty하위 모듈 작업 트리에서 실행됩니다.

그리고 만들기도 합니다.--ignore-submodules=none사용자가 커밋되지 않은(추적되지 않은) 파일이 있는 하위 모듈을 삭제하지 않도록 하기 위한 기본 설정입니다.

git config이제 관리 페이지에 다음 항목이 포함됩니다.

기본적으로 추적되지 않음으로 설정되어 추적되지 않은 하위 모듈은 무시됩니다.


원답 (2011)

Mark Longair의 블로그 게시물 Git Submodules Descluded에서 언급했듯이,

Git 버전 1.7.0 이상에는 Git 하위 모듈의 동작에 대한 성가신 변경 사항이 포함되어 있습니다.
이전에는 서브모듈의 HEAD가 잘못된 커밋을 가리킨 경우에만 서브모듈에 수정된 파일 또는 추적되지 않은 파일이 있는 경우 서브모듈이 더티로 간주되었습니다.

기호의 (더하의기미의호기(의미▁(▁the더▁of▁meaning)+에서 )이이 git 사용하여 사항을 등하는 데 git 하 위 모 듈 의 출 접 력 이 되 변 로 를 그 나 며 gitbitgit을 사용하여 변경 사항을 찾는 등 무엇이 잘못되고 있는지 파악하는 데 약간의 시간이 걸립니다.사용자들이 "지정된 버전이지만 더럽다"에 대해 다른 기호를 도입하는 것이 훨씬 더 친절했을 것입니다.

다음 방법으로 해결할 수 있습니다.

  • 상위 repo로 돌아가기 전에 각 하위 모듈 내의 변경/배포를 커밋하거나 실행 취소합니다(diff가 더 이상 "잘못된" 파일을 보고하지 않아야 함).하위 모듈의 모든 변경 사항을 취소하려면 다음과 같이 하십시오.cd한 후 하위모루디로이동수작다니행합업을여하리터렉트의를 수행합니다.git checkout .

dotnetCarpenter에서 수행할 수 있는 설명:git submodule foreach --recursive git checkout .

  • 또는 추가--ignore-submodules의 신에게에.git diff이러한 "잘못된" 하위 모듈을 일시적으로 무시합니다.

Git 버전 1.7.2의 새로운 기능

Noam이 아래에서 언급했듯이, 이 질문은 Git 버전 1.7.2 이후 다음과 같이 더러운 하위 모듈을 무시할 수 있음을 언급합니다.

git status --ignore-submodules=dirty

하위 모듈의 추적되지 않은 모든 파일을 무시하려면 다음 명령을 사용하여 변경 내용을 무시합니다.

git config --global diff.ignoreSubmodules dirty

로컬 Git 구성에 다음 구성 옵션이 추가됩니다.

[diff]
  ignoreSubmodules = dirty

자세한 내용은 여기에서 확인할 수 있습니다.

에 를 합니다.git submodule init그리고.git submodule update분명히 속임수를 쓸 것이지만 항상 적절하거나 가능한 것은 아닐 수도 있습니다.

편집: 이 답변(및 대부분의 다른 답변)은 쓸모가 없습니다. 대신 데브풀의 답변을 참조하십시오.


원래 "를 만들 수 있는 구성 옵션이 없었습니다.git diff --ignore-submodules그리고 "git status --ignore-submodulesglobal default(명령에 대한 git default flags 설정을 참조하십시오)다른 방법은 기본값을 설정하는 것입니다.ignore각 둘 다 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " )git diff그리고.git status), ), 에서 를 참조하십시오..git/config 전용) 파일(로컬 전용).gitmodules(git로 버전이 변경됨).예:

[submodule "foobar"]
    url = git@bitbucket.org:foo/bar.git
    ignore = untracked

ignore = untracked되지 않은 파일만 하려면 추되지않무됩면니하다시파일만은적.ignore = dirty합니다.ignore = all커밋도 무시합니다.모든 하위 모듈에 대해 와일드카드를 지정할 수 있는 방법은 없습니다.

서브모듈에 대한 포인터가 서브모듈 디렉토리에 실제로 있는 포인터가 아니기 때문입니다.이 문제를 해결하려면 실행해야 합니다.git submodule update실행:

하위 모듈 디렉터리를 제거하고 다시 초기화했습니다.

cd my-submodule
git push
cd ../
rm -rf my-submodule
git submodule init
git submodule update
git submodule foreach --recursive git checkout .

이것은 저에게 도움이 되지 않았지만 서브모듈에서 변경된 파일 목록(제 경우 하나만)을 제공했습니다.

그래서 하위 모듈로 이동할 수 있었고 Git 상태는 HEAD가 분리되었다는 것을 보여주었습니다 -> Git checkout master, Git status to 다시 수정된 파일을 보기 위해 Git checkout > filename<, Git pull 및 모든 것이 다시 정상입니다.

파일 모드 설정이 활성화되어 있고 하위 모듈 하위 트리에서 파일 권한을 변경한 경우 하위 모듈이 더티로 표시될 수 있습니다.

하위 모듈에서 파일 모드를 사용하지 않도록 설정하려면 /.git/modules/path/to/your/submodule/config를 편집하고 추가할 수 있습니다.

[core]
  filemode = false

모든 더티 상태를 무시하려면 다음 중 하나를 설정할 수 있습니다.ignore = dirty속성은 /.gitmodules 파일에 있지만, 파일 모드만 비활성화하는 것이 좋을 것 같습니다.

저의 경우, 무엇이 이 문제를 일으켰는지 확신할 수 없었지만, 하위 모듈을 최신 원격 커밋으로 재설정하고 이 작업을 완료하기를 원할 뿐입니다.여기에는 다음과 같은 몇 가지 다른 질문의 답변이 포함되었습니다.

git submodule update --recursive --remote --init

출처:

변경 내용을 Git 하위 모듈로 되돌리려면 어떻게 해야 합니까?

모든 Git 하위 모듈 중 최신 Git을 쉽게 풀 수 있는 방법

귀하의 레포'에 대한 적절한 권한이 있습니까?

내 솔루션은 다음과 관련이 없습니다.git하지만 저는 같은 오류 메시지와 서브모듈의 더러운 상태를 보고 있었습니다.

은 근적인원파파다니입일에 입니다..git:root,그렇게git권한이 쓰기액권없습다니이한스세다없▁did니,▁access습권▁therefore▁not▁write쓰.git사용자로 실행할 때 하위 모듈의 더티 상태를 변경할 수 없습니다.

당신도 같은 문제를 가지고 있습니까?

에서 리지토의루폴다사음용다니합을서에더트리를 합니다.find 데이터베이스에서 합니다.트에서 소유한 파일을 나열합니다[선택 사항].

find .git -user root

솔루션 [리눅스]

.git사용자를 소유자로 지정할 폴더

sudo chown -R $USER:$USER .git

# alternatively, only the files listed in the above command...
sudo find .git -user root -exec chown $USER:$USER {} +

어떻게 이런 일이 일어났습니까?

저의 경우 도커 컨테이너에서 서브모듈로 라이브러리를 구축했습니다. 도커 데몬은 전통적으로 다음과 같이 실행됩니다.root그래서 생성된 파일은 다음에 속합니다.root:root소유권

내 사용자는 해당 서비스를 통해 프록시를 통해 루트 권한을 가지고 있으므로 사용자는 해당 서비스를 사용하지 않았습니다.sudo무엇이든, 내 깃 저장소는 여전히 소유한 변경 사항이 있습니다.root.

이것이 누군가에게 도움이 되길 바랍니다, 여기서 나가세요.

하위 모듈 재귀성을 확인합니다.제 문제는 제 서브모듈이 그의 내부에 있는 다른 서브모듈을 잘못 가리키고 있다는 것이었습니다.

언급URL : https://stackoverflow.com/questions/4873980/git-diff-says-subproject-is-dirty