자식 추적에서 폴더 제거


404

추적에서 폴더 (이름 업로드)를 제외해야합니다. 나는 달리려고 노력했다

git rm -r --cached wordpress/wp-content/uploads

그 후 .gitignore에 경로를 추가했습니다.

/wordpress/wp-content/uploads

그러나 내가 실행 git status하면 삭제 된 것으로 표시됩니다. 변경 사항을 커밋하려고하면 파일이 추적에서 제거 될뿐만 아니라 삭제됩니다.

내가 무엇을 잘못하고 있지?

나는 또한 시도했다

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

그러나 이것은 파일 만 추적하지 않는 것 같습니다. 그러나 추적에서 전체 폴더 (하위 폴더 포함)를 제거해야합니다.


삭제는 git이 파일을 삭제한다는 의미는 아닙니다. 그러나을 사용하면 사용 reset --hard됩니다.
keltar

2
@keltar에서 언급했듯이 커밋해도 파일이 삭제되지는 않습니다. Git 에서 삭제 커밋 하지만 작업 복사본에는 여전히 포함됩니다. 그러나 pull다른 곳에서 커밋 하면 해당 파일 새 시스템에서 삭제됩니다.
Chris

답변:


868

"추적에서 폴더 제거 폴더"에 대한 인터넷 검색 중에이 질문을 보았습니다. OP의 질문으로 답을 얻었습니다. 나는 미래 세대를 위해 여기에 요약하고 있습니다.

질문

로컬 컴퓨터 (예 : 개발 환경)에서 폴더를 삭제하지 않고 git 저장소에서 폴더를 제거하려면 어떻게합니까?

대답

1 단계. 리포지토리의 루트 .gitignore파일에 폴더 경로를 추가 합니다.

path_to_your_folder/

단계 2. 로컬 git 추적에서 폴더를 제거하되 디스크에 보관하십시오.

git rm -r --cached path_to_your_folder/

단계 3. git repo로 변경 사항을 푸시하십시오.

이 폴더는 Git의 관점에서 "삭제"된 것으로 간주됩니다 (즉, 최근 실행 된 기록은 아니지만 최신 커밋이 아닌 경우이 저장소에서 파일을 가져 오면 트리에서 파일이 제거됨). 을 사용했기 때문 --cached입니다.


2
빠른 질문, 폴더 경로는 전체 경로 여야합니까? 또는 git 저장소가 기본으로 사용되는 경로입니까?
HMSCelestia

나는 그것이 전체 경로라고 생각하지만, 확실하지는 않습니다.
Tod Birdsall

7
"그리고이 저장소에서 당기는 사람들은 파일을 나무에서 제거 할 것입니다"이것을 막을 수 있습니까?
Leo Gasparrini 2016 년

이렇게하면 분기에서 추적에서 파일이 올바르게 제거되었지만 병합 후 삭제되었습니다!
Harold

1
나를 위해 여전히 남아 있습니다. 또한-폴더에있는 파일을 커밋 할 때 해당 파일을 선택 취소해야합니까? 나는 두 가지 방법을 모두 시도했다. 선택 해제하면 푸시 할 수 없지만 추적 해야하는 다른 파일에서 하나의 문자를 변경했습니다. 여전히 도움이되지 않습니다
Darius.V

44

이것은 나를 위해 작동합니다 :

git rm -r --cached --ignore-unmatch folder_name

--ignore-unmatch 이 옵션이 없으면 git은 인덱스에없는 첫 번째 파일에서 오류와 함께 종료됩니다.


unknown option 'ignore unmatched'
Inigo

디렉토리가 비어 있으면 중요한 플래그입니다. 감사합니다!
MNN

디렉토리에서 특정 파일 확장자를 제거하려는 경우에도 매우 유용합니다.git rm -r --cached --ignore-unmatch .idea/*.xml
takanuva15


8

나는 이것이 오래된 스레드라는 것을 알고 있지만 표시된 솔루션으로 문제를 해결하지 못했기 때문에 조금 추가하고 싶었습니다 (여러 번 시도했지만).

폴더를 추적하는 자식 양식을 실제로 중지 할 수있는 유일한 방법은 다음을 수행하는 것입니다.

  1. 로컬 폴더를 백업하고 안전한 장소에 보관하십시오.
  2. 로컬 저장소에서 폴더를 삭제하십시오.
  3. 캐시가 지워 졌는지 확인하십시오 git rm -r --cached your_folder/
  4. your_folder/.gitignore에 추가
  5. 커밋 변경
  6. 백업을 리포지토리에 다시 추가

이제 폴더가 더 이상 추적되지 않는 것을 볼 수 있습니다.

캐시를 지우는 것이 왜 효과가 없는지 묻지 마십시오 .Git 슈퍼 마법사는 아니지만 이것이 문제를 해결하는 방법입니다.


감사합니다!!! 힘내는 일식 .metadata 폴더를 무시하지 않고 나를 미치게했다. eclipse .metadata 폴더로 단계를 수행하고 마침내 작동했습니다.
MasterN8

5

자식 문서에서 :

다른 유용한 방법은 파일을 작업 트리에 유지하고 준비 영역에서 제거하는 것입니다. 즉, 파일을 하드 드라이브에 보관하고 더 이상 Git이 추적하지 않도록 할 수 있습니다. 이것은 .gitignore 파일에 무언가를 추가하는 것을 잊어 버렸거나 큰 로그 파일이나 많은 .a 컴파일 된 파일과 같이 실수로 파일을 스테이징 한 경우 특히 유용합니다. 이렇게하려면 --cached 옵션을 사용하십시오.

$ git rm --cached readme.txt

"-r"을 포함하지 않습니까?


1
OP는 이미 시도했다 --cached. 이 -r옵션에는 "재귀"옵션이 포함되어야합니다.
Chris

나는 이것이 유용하다는 것을 알았다. 폴더에서 수행하는 방법을 검색 한 다음 파일에서 수행하는 방법을 확인했습니다. 이 의견을 위로 표시하고 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.