IT TIP

Git 하위 모듈 내에 추가 된 .gitignore 파일

itqueen 2020. 12. 25. 10:41
반응형

Git 하위 모듈 내에 추가 된 .gitignore 파일


나는 최근에 내 dotfile을에서 Git 리포지토리에 살도록 재구성했으며 ~/Dropbox/dotfiles병원체를 사용하여 모든 Vim 애드온을 ~/Dropbox/dotfiles/home/.vim/bundle. 이 애드온은 Git 하위 모듈로 추가되었습니다.

이제 문제는 Vim을 실행할 때 모든 애드온에 대한 문서를 자동으로 생성하여 각 하위 모듈 디렉토리에 넣습니다. 이것은 내가 피하고 싶은 서브 모듈에 추적되지 않은 콘텐츠를 추가합니다.

ruby-1.8.7-p330@gs ~/Dropbox/dotfiles ‹master*› $ git st
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   home/.vim/bundle/fuzzyfinder (untracked content)
#   modified:   home/.vim/bundle/l9 (untracked content)
#   modified:   home/.vim/bundle/matchit (untracked content)
#   modified:   home/.vim/bundle/ruby (untracked content)
#   ...
no changes added to commit (use "git add" and/or "git commit -a")

하위 모듈 내의 .gitignore모든 doc폴더 를 무시하기 위해 Git 저장소의 루트에 파일 을 추가하려고했지만 작동하지 않는 것 같습니다.

home/.vim/bundle/**/doc

내 질문 : Git 하위 모듈 내부의 파일과 폴더를 무시하거나 Vim이 Git 저장소 외부의 폴더에 문서를 생성하도록 구성하는 방법이 있습니까?

편집 : Randy Morris가 지적했듯이 이것은 병원균에 의해 다른 위치에 태그 생성 의 중복 일 수 있습니다.


.gitignore각 하위 모듈 내에 추가해야합니다 .
상기 하위 모듈은 중첩 된 Git 저장소와 같기 때문에 자체 무시 규칙을 처리하고 해당 상태는 .gitignore상위 저장소의 영향을받지 않습니다 ( 여기에 설명 됨 ).

Randy Morris 가 주석에서 언급 했듯이 vim 특정 설정에 대해서는 SO 질문 " 병원균에 의해 다른 위치에 태그 생성 "을 참조하십시오 .


참고 : Nick 이이 주석에서 언급하고 " 병원균에 의해 다른 위치에 태그 생성 "에 대한 답변에 설명 된대로 구성은 다음과 같습니다.

[submodule "path/to/submodule"]
    path = path/to/submodule
    url = http://github.com/username/repo.git
    ignore = untracked  # <====

작동하고 해당 하위 모듈을 git status.
그러나 " ignore = untracked" 는 최소한 Git1.7.2를 의미 합니다.


참고 : nurettin 은 주석에서 언급합니다 .

ignore = dirty 나를 위해 해냈어

aee9c7d 커밋 세부 사항에게 차이 untrackeddirty.

  • " dirty": 수퍼 프로젝트와 서브 모듈에 기록 된 커밋의 차이 만 HEAD수정으로 간주되며 서브 모듈 의 작업 트리에 대한 모든 변경 사항은 무시 됩니다.
    이 값을 사용하면 하위 모듈에서 작업 트리 변경 사항을 전혀 검색하지 않으므로 큰 하위 모듈에서 성능 이점이 있습니다 .

  • " untracked": 하위 모듈 작업 트리에서 추적되지 않은 파일 만 무시되며 하위 모듈에서 변경 HEAD및 / 또는 수정 된 파일은 수정 된 것으로 표시됩니다.


VonC가 추천하는 ignore = untracked작품이지만, 모든 하위 모듈에 대해 변경해야합니다.

문제를 완전히 해결하려면 모든 git repo에서 전역 gitignore 패턴을 구성한 git config --global core.excludesfile ~/.gitignore_global다음 doc/tags$ HOME / .gitignore_global에 추가하면 됩니다.

https://help.github.com/articles/ignoring-files를 참조 하십시오 .


Ben의 대답은 좋은 시작입니다. 그러나 이러한 특정 무시 규칙의 경우 전역 설정이 마음에 들지 않습니다.

각 하위 모듈에 대한 로컬 구성과 하위 모듈 루트 저장소의 중앙 무시 파일을 선호합니다.

cd .vim/bundle
echo "doc/tags" > .gitignore_submodules
git submodule foreach git config --local core.excludesfile "../.gitignore_submodules"

여기서 기본적인 문제는 '추적 된'변경 사항을 무시하려는 것입니다. .gitignore저장소에 대한 '추적되지 않은'변경 사항 만 무시합니다. 확인하기 위해 (추적 된) 저장소의 일부 파일을 수정하고 파일에 추가 할 수도 있습니다 .gitignore. 작업 git status수행 하면 파일이 여전히 '수정 됨'으로 나열되는 것을 볼 수 있습니다. 하위 모듈 저장소도 기본 저장소에 의해 추적되는 것으로 간주되므로 단순히 상위 저장소에 gitignore를 추가하면 작동하지 않습니다. 다른 제안대로 .gitignore개별 저장소 규칙을 추가 하거나 최신 git 버전을 사용하는 경우 git status --ignore-submodules.

참조 URL : https://stackoverflow.com/questions/5127178/gitignore-files-added-inside-git-submodules

반응형