gitignore는 폴더를 무시하지 않습니다


135

내 프로젝트의 루트에는 foo폴더가 있습니다. foo폴더 안에 bar폴더가 있습니다. 내 bar폴더 내의 모든 파일에 대한 모든 변경 사항을 무시하고 싶습니다 . 나는 이것을 내 안에있다 gitignore:

/foo/bar

폴더가 확인되었습니다. 폴더가 존재하며 무시할 파일이 있습니다. gitignorecommit테드. 그러나, 나는 화를 내고 bar폴더 안에있는 파일을 가지고 있습니다 . 입력 할 때

git status

내 안에는 git bash무시해야 할 파일이 있습니다. 이유는 무엇이며 바 폴더 내의 모든 파일을 어떻게 무시할 수 있습니까?

파일은 이전에 동일한 줄로 무시되었지만 commit서버에서 그 줄을 일시적으로 제거해야했습니다 . 이후 commit에 나는에 줄을 다시 넣었다 gitignore. 이것은 얼마 전이지만 지금은 파일이에 있음을 알았습니다 git status. 에 표시되지 않은 무시 된 파일을 수정할 수있을 것으로 기대합니다 git status.


앞으로는 무시한 것을 추가하기 위해 무시를 수정할 필요가 없습니다. git add -f ignored-file무시해도 파일을 추가합니다.
Chris

무엇을 git status foo/bar/file-that-should-be-ignored제공합니까?
Chris

변경이 발생한 경우 무시해야 할 파일입니다. 나는 분명히 제공되는 경우 비어 있어야 자식 상태의 목록을 뭔가가,하지만 내 지식을 따라하고 그 / foo는 / 바 .gitignore에 존재
라요스 아르 밧

4
그 파일이 실제로 Git에 의해 추적되는 것처럼 들립니다. 특정 시점에 저장소에 추가 되었어야합니다. 로 이력을 볼 수 있습니다 git log foo/bar/file-that-should-be-ignored. 그것이 저장소의 일부가 아니어야한다면 저장소를 제거하고 git rm --cached foo/bar/file-that-should-be-ignored아래 Reck에서 제안한대로 커밋 해야 합니다 (하지만 전체 폴더가 아닌 파일에서 수행 할 것입니다). 이렇게하면 (a) Git에서 파일을 제거하고 (b) 파일 을 로컬 복사본에 보관하며 (c) 다른 사람 fetch이나 pull새 커밋이 있을 때 파일이 삭제됩니다 .
Chris

답변:


341

이 폴더가 이전에 자식으로 체크인 된 것 같아요?

실행 git rm -r --cached <folder>하고 다시 확인하십시오.


3
이렇게하면 (현재 버전) 저장소에서 폴더가 완전히 제거됩니다. OP는 폴더가 있기를 원하지만 새로운 변경 사항을 추적해서는 안됩니다.
Gareth

불행히도 수락을 제거해야합니다. 이 솔루션은 푸시 될 때 파일의 원격 버전을 제거했습니다. 원격에서 폴더를 제거하지 않고 폴더의 모든 파일을 무시하도록 gitignore를 설정하고 싶습니다. 가능합니까? 나는 해결책을 되 돌렸다.
Lajos Arpad 2016 년

12
git update-index --assume-unchanged <folder>혹시?
Reck

3
@Lajos는이 혼란스러운 "편집"주석을 추가하는 대신 자신의 버그를 수정해서는 안됩니다.
cregox

2
@Cawas,이 사이트는 지식 공유에 관한 것이므로 그 대답은 다음과 같습니다. 버그가 포함 된 답변을 수락하는 것은 잘못된 것입니다. -r은 선택 사항이 아닙니다.
Lajos Arpad

46

나에게 받아 들여진 대답은 전체 솔루션이 아니라 솔루션의 일부였습니다. 어쩌면 게시하려는 다른 단계가 분명했지만 먼저 누락되었습니다. 내 .gitignore파일에서 무시하려는 폴더를 무시 하도록하기 위해 수행 한 단계는 다음과 같습니다 .

  1. 수정 / 변경해야 할 변경 사항을 커밋하십시오.
  2. 이 명령을 실행하십시오 : git rm -r --cached .(git 저장소를 새로 고치기 위해 git 인덱스에서 모든 것을 제거합니다)
  3. 그런 다음이 명령을 실행하십시오 : git add .(모든 것을 repo에 다시 추가하려면)
  4. 마지막으로 다음을 사용하여 이러한 변경 사항을 커밋하십시오. git commit -m ".gitignore Fixed"

당신은 내가 해결책을 찾을 곳에서 기사의 링크를 찾을 수 있습니다 여기를 .


1
이것은 원래 질문에 근거한 실용적인 해결책이 아닙니다. @ lagos-arpad는 전체 프로젝트가 아닌 하위 디렉토리에 대해 구체적으로 물었습니다. 귀하의 솔루션은 git 저장소의 루트 레벨에서 모든 것을 제거 하므로이 문제를 처리하는 데 권장되는 방법은 아닙니다.
justinhartman

하위 디렉토리 일지라도 하나의 파일 만 처리 할 때이 솔루션이 효과적이었습니다. 추천하지 않는 이유를 자세히 설명해 주시겠습니까?
sikanderBabwani

1
당신이 다루는 것은 중요하지 않습니다. 이것은 질문에 대한 답변이 아니며 다른 답변이 지적했듯이 잠재적으로 위험합니다. 이렇게하면 원격 저장소에서 원하지 않는 내용이 제거됩니다.
RichieHH

8

나는이 문제를 겪고 있었고 git이 실제로 파일 / 폴더를 올바르게 무시하고 있음을 깨달았지만 내 코드 편집기 (Visual Studio Code)는 버그가 많았고 UI 사이드 바에서 제대로 "회색되지 않습니다". VSCode를 다시 시작했는데 예상대로 회색으로 표시되었습니다.


VS Code v1.30.2 (사용자)
xinthose

저도 마찬가지입니다. 이 솔루션에 대해 대단히 감사합니다! VS Code를 다시 시작하려고 할 때까지 내 .gitignore가 작동하지 않는 이유가 궁금합니다 .Visual Studio Code v1.44.2에 있습니다.
프리츠 림

6

허용 된 답변에 추가로

git rm -r --cached /foo/bar/
git status

내가 그렇게하면 터미널은 rm그 디렉토리에 있는 많은 파일을 보여줍니다 . 따라서 원격에 불필요하게 영향을 줄 수있는 다른 커밋을 방지하기 위해 다음과 같이했습니다.

git reset HEAD *
git status

그 후, 그것은 커밋 할 것이 없으며 내부 파일을 수정 /foo/bar/하고 git status여전히 얻을 수 있다고 말했습니다 nothing to commit.


1
이것은 단지 내가 시작한 곳으로 문제를 돌려 준다 (문제)
Shonubi Korede
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.