etc./StackOverFlow

로컬에서 일부 파일을 무시하도록 git을 구성하려면 어떻게 해야 합니까?

청렴결백한 만능 재주꾼 2022. 2. 17. 12:24
반응형

질문자 :Bjorn


다른 모든 사람의 전역 git 구성을 오염시키지 않고 로컬에서 파일을 무시할 수 있습니까? 내 자식 상태에 스팸인 추적되지 않은 파일이 있지만 로컬 지점에 있는 모든 작은 임의의 추적되지 않은 파일에 대해 자식 구성 변경을 커밋하고 싶지 않습니다.



관련 Git 문서에서 :

특정 리포지토리에 고유하지만 다른 관련 리포지토리와 공유할 필요가 없는 패턴(예: 리포지토리 내부에 있지만 한 사용자의 워크플로에만 해당하는 보조 파일)은 $GIT_DIR/info/exclude 파일로 이동해야 합니다.

.git/info/exclude .gitignore 파일과 형식이 동일합니다. 또 다른 옵션은 core.excludesFile 을 전역 패턴을 포함하는 파일의 이름으로 설정하는 것입니다.

참고: 이미 단계적 변경 사항이 있는 경우 무시 패턴을 편집한 후 다음을 실행해야 합니다.

 git update-index --assume-unchanged <file-list>

$GIT_DIR 에 대한 참고 사항 : 이것은 단순히 git 저장소의 경로를 나타내기 위해 git 매뉴얼 전체에서 사용되는 표기법입니다. 환경 변수가 설정되어 있으면 현재 있는 저장소의 위치를 재정의합니다. 이는 아마도 원하는 것이 아닐 것입니다.


편집 : 또 다른 방법은 다음을 사용하는 것입니다.

 git update-index --skip-worktree <file-list>

다음과 같이 되돌립니다.

 git update-index --no-skip-worktree <file-list>

Josh Lee

업데이트 : git update-index --skip-worktree [<file>...] 사용을 고려하십시오. @danShumway에게 감사드립니다! 두 옵션의 차이점에 대한 Borealid의 설명을 참조하십시오.


이전 답변:

추적된 파일에 대한 로컬 변경 사항을 무시해야 하는 경우(구성 파일에 대한 로컬 수정 사항이 있음) git update-index --assume-unchanged [<file>...] .


Florian Sesser

.gitconfig 파일의 [alias] 섹션에 다음 줄을 추가합니다.

 ignore = update-index --assume-unchanged unignore = update-index --no-assume-unchanged ignored = !git ls-files -v | grep "^[[:lower:]]"

이제 git ignore my_file 을 사용하여 로컬 파일의 변경 사항을 무시하고 git unignore my_file 을 사용하여 변경 사항 무시를 중지할 수 있습니다. git ignored 는 무시된 파일을 나열합니다.

이 답변은 http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html 에서 수집했습니다.


phatmann

다음과 같은 몇 가지 옵션이 있습니다.

  • 작업 디렉토리에 더러운(또는 커밋되지 않은) .gitignore 파일을 남겨두십시오(또는 topgit 또는 기타 패치 도구를 사용하여 자동으로 적용).
  • 하나의 트리에만 해당하는 경우 $GIT_DIR/info/exclude 파일에 넣습니다.
  • 실행 git config --global core.excludesfile ~/.gitignore 과에 패턴을 추가 ~/.gitignore . 이 옵션은 모든 트리에서 특정 패턴을 무시하려는 경우에 적용됩니다. 예를 들어 .pyc.pyo 파일에 이것을 사용합니다.

또한 해당되는 경우 패턴을 사용하고 파일을 명시적으로 열거하지 않는지 확인하십시오.


Emil Sit

나는 당신이 찾고 있다고 생각합니다 :

 git update-index --skip-worktree FILENAME

로컬 변경 사항을 무시합니다.

http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/ 이 솔루션에 대한 추가 설명입니다!

사용을 취소하려면:

 git update-index --no-skip-worktree FILENAME

Piotr Korlaga

$HOME/.gitignore 또는 ~/.gitignore 와 같이 홈 디렉토리에 .gitignore 파일을 추가하기만 하면 됩니다. 그런 다음 git에게 명령과 함께 해당 파일을 사용하도록 지시합니다.

 git config --global core.excludesfile ~/.gitignore

이것은 무시할 항목을 결정할 때 git이 참조하는 일반 .gitignore 파일입니다. 홈 디렉토리에 있으므로 사용자에게만 적용되며 프로젝트 .gitignore 파일을 오염시키지 않습니다.

나는 훌륭한 결과와 함께 수년 동안 이 접근 방식을 사용해 왔습니다.


JESii

이 프로세스를 더 간단하게 만들기 위해 몇 가지 git 별칭 을 설치할 수 있습니다. 이것은 .gitconfig [alias] 노드를 편집합니다.

 git config --global alias.ignore 'update-index --skip-worktree' git config --global alias.unignore 'update-index --no-skip-worktree' git config --global alias.ignored '!git ls-files -v | grep "^S"'

이 프로그램이 설치하는 바로 가기는 다음과 같습니다.

  • git ignore config.xml
    • config.xml 변경 사항을 보지 못한 척하여 실수로 변경 사항을 커밋하는 것을 방지합니다.
  • git unignore config.xml
    • config.xml 대한 변경 사항을 다시 승인하기 시작하여 이러한 변경 사항을 다시 커밋할 수 있습니다.
  • git ignored
    • git은 위에서 설명한 방식으로 "무시"하고 있는 모든 파일을 나열합니다.

나는 phatmann의 답변 을 참조하여 이것을 만들었습니다. --assume-unchanged 버전을 제공합니다.

내가 제시하는 버전은 로컬 변경 사항을 무시하기 위해 --skip-worktree 차이점에 대한 자세한 설명은 Borealid의 답변 을 참조하세요 --skip-worktree 의 목적은 개발자가 변경 사항을 커밋할 위험 없이 파일을 변경하는 것 입니다.

여기에 제시된 git ignored git ls-files -v S 태그로 시작하는 항목만 표시하도록 목록을 필터링합니다. S 태그는 상태가 "작업 트리 건너뛰기"인 파일을 나타냅니다. 으로 표시 파일 상태의 전체 목록은 git ls-files 다음에 대한 설명서를 참조 -t 에 옵션 git ls-files .


Birchlabs

이것은 로컬 제외 파일에 행을 추가하는 일종의 간단한 솔루션입니다.

 echo YOURFILE_OR_DIRECTOY >> .git/info/exclude

Yuseferi

--assume-unchanged 및 --skip-worktree 둘 다 로컬에서 파일을 무시 하는 올바른 방법 이 아닙니다... 이 답변 과 git update-index 설명서 의 참고 사항을 확인하십시오. 어떤 이유로든 계속 자주 변경되는 파일(및/또는 복제본에서 다른 복제본으로 변경) 및 변경 사항을 커밋해서는 안 되며, 이러한 파일을 처음부터 추적 해서는 안 됩니다(SHOULD NOT).

그러나 로컬에서 파일을 무시하는 두 가지 적절한 방법이 있습니다(둘 다 추적되지 않은 파일에서 작동함). .gitignore의 로컬 대안이지만 현재 클론에만 해당하는 .git/info/exclude 파일에 파일 이름을 넣습니다. 또는 전역 .gitignore(예: pyz, pycache 등과 같은 일반적인 보조 파일에만 적절하게 사용해야 함)를 사용하고 해당 파일은 컴퓨터의 모든 git repo에서 무시됩니다.

위의 것을 일종의 자동화(제외 또는 전역 .gitignore에 추가)로 만들려면 다음 명령을 사용할 수 있습니다(bash 프로필에 추가).

  • 클론 로컬 제외(상대 경로를 사용하기 때문에 명령을 호출할 때 저장소의 루트에 있어야 함)에 따라 ##FILE-NAME##을 .git/info/exclude
  • 전역 .gitignore, 먼저 여기에 전역 .gitignore를 만든 다음 ##FILE-NAME##을 ~/.gitignore

리눅스

 alias git-ignore='echo $1 >> ##FILE-NAME##' alias git-show-ignored='cat ##FILE-NAME##' git-unignore(){ GITFILETOUNIGNORE=${1//\//\\\/} sed -i "/$GITFILETOUNIGNORE/d" ##FILE-NAME## unset GITFILETOUNIGNORE }

MacOS sed inplace 수정을 위해서는 .bak이 필요합니다(즉, sed를 대체하기 위해 파일 확장자를 추가해야 합니다. 즉, 무언가를 바꾸기 전에 백업해야 함), 따라서 .bak 파일을 삭제하려면 rm filename.bak을 추가했습니다)

 alias git-ignore='echo $1 >> ##FILE-NAME##' alias git-show-ignored='cat ##FILE-NAME##' git-unignore(){ GITFILETOUNIGNORE=${1//\//\\\/} sed -i.bak "/$GITFILETOUNIGNORE/d" ##FILE-NAME## rm ##FILE-NAME##.bak unset GITFILETOUNIGNORE }

그런 다음 다음을 수행할 수 있습니다.

git-ignore example_file.txt
git-unignore example_file.txt


Ahmed Kareem

추적되지 않는 파일이 추적되지 않는 (몇 개) 폴더에 있는 경우 특히 추적되지 않는 파일을 무시하려면 추적되지 않는 .gitignore * 뒤에 새 행이 오는 한 줄에 입력하십시오. 추적되지 않은 파일이 몇 개의 폴더에 있는 경우 정말 간단하고 간단한 솔루션입니다. 나를 위해 모든 파일은 추적되지 않은 단일 폴더 vendor 에서 제공했으며 위의 내용은 제대로 작동했습니다.


aak318

하위 모듈에서 로컬로 파일을 무시하려는 경우:

my-parent-repo/.git/modules/my-submodule/info/exclude .gitignore 파일과 동일한 형식으로 편집합니다.


drkvogel

리포지토리에 .gitignore 파일이 없는 경우 간단한 해결책은 .gitignore 파일을 만들고 무시할 파일 목록에 .gitignore


Gavin S. Yancey

출처 : http:www.stackoverflow.com/questions/1753070/how-do-i-configure-git-to-ignore-some-files-locally

반응형