git에서 수정되었지만 커밋되지 않은 파일을 무시합니까?


182

git에게 수정 (삭제)되었지만 커밋해서는 안되는 파일을 무시하도록 지시 할 수 있습니까?

상황은 repo에 전혀 관심이없는 것들이 들어있는 하위 디렉토리가 있으므로 자동 완성 등 (IDE에서) 표시되지 않도록 삭제했습니다.

그러나 이제 폴더를 .gitignore에 추가하면 아무것도 변경되지 않고 모든 항목이 git 상태에 의해 삭제 된 것으로 표시됩니다.

자식을 무시할 수있는 방법이 있습니까?

(또는 git-svn을 사용하면서 로컬 git에 변경 사항을 적용하고 svn repo로 전달되지 않았는지 확인할 수 있습니까?)


repo 인덱스에서 수정되지 않은 것으로 표시하는 대신 인덱스에서 완전히 제거 할 수 있습니다. 따라서 작업 디렉토리에 파일이 여전히 있지만 repo 색인은 완전히 제거 될 수 있으며 git은 파일이 전혀 존재하지 않는다고 볼 수도 없습니다. 아래 답변에서 링크를 참조하십시오.
MaurerPower

답변:


274

밖으로 체크 자식 업데이트 인덱스 man 페이지 와 --assume - 변경 비트 및 관련합니다.

내가 당신의 문제가있을 때 나는 이것을

git update-index --assume-unchanged dir-im-removing/

또는 특정 파일

git update-index --assume-unchanged config/database.yml

3
무시 된 모든 파일을 어떻게 든 나열 할 수 있습니까?
Zitrax

21
당신은 파일로 백업받을 수 있습니다git update-index --no-assume-unchanged config/database.yml
데니스 Kniazhev

1
의 단점이없는 최신 솔루션은 아래 Dave L의 답변을 참조하십시오 --assume-unchanged.
벤 Challenor

2
매번이 명령을 수동으로 실행하는 대신이를 저장소 구성 파일에 추가 할 수 있습니까?
Tim Boland

1
다음 커밋을 위해 수정 된 것으로 나타 납니까? 나는 그것이 영원히 변하지 않은 것으로 간주하고 싶지 않습니다.
Pranav Nandan

41

새롭고 더 나은 옵션은 git update-index --skip-worktree하드 리셋이나 풀에서 새로운 변경으로 인해 손실되지 않습니다.

http://schacon.github.com/git/git-update-index.html 의 매뉴얼 페이지를 참조하십시오.

http://fallengamer.livejournal.com/93321.html 의 비교


9
주목해야 할 한 가지 단점은 파일의 수정 사항이로 숨겨지면 skip-worktree이러한 파일을 찾는 것이 다소 번거 롭다는 것입니다. 내가 아는 유일한 방법은입니다 git ls-files -v |grep -v '^H'. 또한 많은 GUI 도구는이 기능에 대해 알지 못하며 checkout"숨겨진"수정 된 파일로 인해 실패 하는 경우 재미있는 오류가 발생할 수 있습니다.
sleske

git doc 파일을 전혀 이해할 수 없었습니다. 그래서 이것은별로 도움이되지 않습니다. (각 문서 파일은 다른 모든 문서 파일의 미묘함을 이해한다고 가정합니다!)
Scott Biggs

7

이 코드를 사용하십시오

git update-index --assume-unchanged file-name

1
정말 흥미로운. 필자는 maven 프로젝트에서 경례를 사용해야하지만 git 저장소에 게시하고 싶지 않으므로 local, properties에 값없이 자리 표시자를 넣고 속성을 커밋 한 다음 암호를 삽입하지만 제안 된 명령으로 파일을 변경하지 마십시오. 따라서 비밀번호가 공개되지 않습니다.
스테파노 Scarpanti

6

추적 된 파일은 무시할 수 없으므로 먼저 색인에서 해당 파일을 제거해야합니다. .gitignore원하지 않는 디렉토리를 무시 하는 을 추가 한 다음 삭제하고을 사용하여 스 트래 글러를 제거하십시오 git rm --cached.


1
흠, 나는 이것을 시도하지만 모든 파일이 삭제 된 것으로 나열되어 있습니다. 그것을 커밋해야합니까? --cached로 인해 원격으로 푸시되지 않습니까? 아니면 sth를 얻었습니까? 잘못된? 나에게 가장 중요한 것은 원격 (svn) 저장소를 손상시키지 않는 것입니다.

1
색인에서 시작되지 않은 것은 커밋 할 수 없습니다. git rm-커밋하지 않으려는 모든 것을 캐싱 한 다음 "*"가있는 .gitignore 파일을 로컬로 추가하십시오. 이제 git add를 아무리해도 인덱스에 해당 파일이 다시 표시되지 않습니다.
John Feminella

아, 이해합니다-지금 캐시 됨. 인덱스에서 내용 만 제거하고 작업 트리 만 남겨 둡니다. , 인덱스를 건드리지 않고 작업 트리에서 제거하십시오. 또는 어떻게 든 사용할 수 있습니까?

6

내가 보통하는 것은

자식 숨김

다른 건 뭐든지

자식 숨김 적용

자식 숨김


10
fwiw를 사용하면 'git stash pop'을 사용하여 마지막 두 개를 한 번에 수행 할 수도 있습니다 ( 'git stash clear'는 원하는 경우 모든 숨김 항목을 지 웁니다).
Groxx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.