gitignore를 사용하지 않고 Git이 파일을 무시하도록하려면 어떻게해야합니까?


132

외부 이상한 제약으로 인해 .gitignore내 저장소를 수정할 수 없습니다 . 수정 이외의 파일과 디렉토리를 무시하는 방법이 .gitignore있습니까? 글로벌 구성과 같은 글로벌 솔루션이라도 모든 리포지토리에 적용됩니다.

답변:


178

gitignore 에 따르면 Git이 고려하는 다른 "무시 패턴 소스"에는 우선 순위가 있다는 것을 잊지 마십시오 .

  • 패턴을 지원하는 명령에 대해서는 명령 행에서 패턴을 읽습니다.
  • 경로와 동일한 디렉토리 또는 상위 디렉토리의 .gitignore 파일에서 패턴을 읽습니다. 상위 레벨 파일 (루트까지)의 패턴이 파일을 포함하는 디렉토리까지 하위 레벨 파일의 패턴으로 대체됩니다.
  • 패턴에서 읽을 $GIT_DIR/info/exclude.
  • 구성 변수에 의해 지정된 파일에서 패턴을 읽습니다 core.excludesfile.

마지막 두 가지는 문제에 대한 해결책이 될 수 있지만 다음과 같습니다.

  • 그들은 멀리 떨어진 저장소에 복제되지 않습니다
  • 다른 소스로 패턴을 재정의 할 수 있습니다.

(이 SO 질문 도 참조하십시오 )


다른 두 가지 솔루션에는 색인 업데이트 ( git update-index)가 포함됩니다.

그러나 다른 지점을 체크 아웃하거나을 방문하면 git pull"무시"상태가 재설정 될 수 있습니다. 따라서 다른 옵션은 다음과 같습니다.

이 둘의 차이점은 " Git-차이점 ' assume-unchanged'과 ' skip-worktree' "에 설명되어 있습니다.


당신은 사용할 수 있습니다 update-index --assume-unchanged@see stackoverflow.com/a/25253144/292408
엘리야 린

1
@ElijahLynn입니다. 당신도 있습니다 update-index --skip-work-tree. 나는 그 두 update-index명령을 보여주는 나의 오래된 답변에 대한 링크를 추가하기 위해 답변을 편집했습니다 .
VonC

140

수정 .git/info/exclude이 가능한 경우 동일한 규칙을 적용 할 수 있습니다. 그러나 해당 파일은 로컬 리포지토리에만 있습니다.


아마도 이것이 최선의 방법 인 것 같습니다. 로컬 저장소에서 파일을 제외합시다.
Abizern

1
하위 모듈에서 어떻게 작동합니까? .git하위 모듈 에는 디렉토리 가 없습니다 ...
zakdances

10
@yourfriendzak 하위 모듈의 .git폴더는 실제로 parent_repo/.git/modules/submodule_name입니다. 당신은 편집 할 것parent_repo/.git/modules/submodule_name/info/exclude
Kara Brightwell

25

무시할 파일을 GIT에 알리는 세 가지 방법이 있습니다.

  • .gitignore 파일들
  • $GIT_DIR/.git/info/exclude
  • core.excludesfile설정 을 통해 지정된 파일

후자의 두 가지 점으로 문제를 해결할 수 있습니다.

자세한 내용은 gitignore (5)를 참조하십시오 .


5

저장소에 로컬 파일이 있고 하위 디렉토리 위치가 융통성이있는 경우 파일을 tracked_dir1/tracked_dir2/untracked_dir/넣은 후 다음 tracked_dir1/tracked_dir2/untracked_dir/.gitignore과 같은 컨텐츠 를 추가 할 수 있습니다 .

*

$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>

4

비슷한 상황에 있었으므로 언급하지 않은 선호하는 솔루션을 추가하고 있습니다. git update-index --assume-unchanged이 경우 문제 는 추적되지 않은 파일에 대해서는 그렇게 할 수 없다는 것입니다. 당신은 말했다

저장소의 .gitignore를 수정할 수 없습니다.

변경 사항 .gitignore을 원점으로 푸시 할 수 없다는 것을 의미한다고 가정하겠습니다 . 즉 로컬에 비 추적 파일을 추가한다 할 수있는 경우라면 .gitignore, 다음 할 git update-index --assume-unchanged .gitignore로 변화되도록 .gitignore밀어되지 않습니다. 이제 추적되지 않은 파일을 무시하고 원격 .gitignore파일에 영향을 미치지 않습니다 .


3

추적 된 파일의 로컬 변경 사항을 무시하십시오. git update-index --assume-unchanged my-file.php

추적 된 파일의 로컬 변경 사항을 무시하십시오. git update-index --no-assume-unchanged my-file.php

출처: git help update-index

--[no-]assume-unchanged
           ...
           This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
           files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
           modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
           changed upstream, you will need to handle the situation manually.


1

또 다른 방법:

  • 로컬 편집 .gitignore
  • 그때 git update-index --assume-unchanged .gitignore
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.