로컬 파일 시스템에서 삭제하지 않고 git 저장소에서 파일을 제거하십시오.
-
16-09-2019 - |
문제
내 최초 커밋에는 일부 로그 파일이 포함되어 있습니다. 추가했습니다 *log
나에게 .gitignore
, 그리고 이제 저장소에서 로그 파일을 제거하고 싶습니다.
git rm mylogfile.log
저장소에서 파일을 제거하지만 로컬 파일 시스템에서 파일을 제거합니다.
저장소 에서이 파일을 제거하려면 어떻게해야합니까? 없이 내 파일의 로컬 사본 삭제?
해결책
로부터 남자 파일:
언제
--cached
주어진 단계적 컨텐츠는 분기 끝 또는 디스크의 파일과 일치하여 파일을 인덱스에서만 제거 할 수 있어야합니다.
따라서 단일 파일의 경우 :
git rm --cached mylogfile.log
그리고 단일 디렉토리의 경우 :
git rm --cached -r mydirectory
다른 팁
RESHARPER 파일과 같은 Repo에서 전체 폴더를 제거하려면 다음을 수행하십시오.
git rm -r --cached folderName
나는 일부 resharper 파일을 커밋했으며 다른 프로젝트 사용자를 위해 지속되는 파일을 원하지 않았습니다.
로컬 파일 시스템에서 삭제하지 않고 .gitignore를 기반으로 리포지토리에서 파일을 제거 할 수도 있습니다.
git rm --cached `git ls-files -i -X .gitignore`
또는 또는 Windows PowerShell에서 :
git rm --cached $(git ls-files -i -X .gitignore)
내 대답에 따라 여기 : https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository
폴더/디렉토리 또는 파일을 git 저장소에서만 제거하려면 로컬로부터 3 가지 간단한 단계를 시도합니다.
디렉토리를 제거하는 단계
git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master
다음에 해당 폴더를 무시하는 단계가 커밋됩니다
다음 커밋에서 해당 폴더를 무시하려면 루트 이름으로 하나의 파일을 만듭니다. .gitignore그 폴더 이름을 넣으십시오. 원하는만큼 넣을 수 있습니다
.gitignore 파일은 다음과 같습니다
/FolderName
또한 민감한 데이터 (예 : 비밀번호가 포함 된 파일)를 획득 한 경우 저장소 이력에서 완전히 삭제해야합니다. 다음은 다음을 수행하는 방법을 설명하는 가이드입니다.http://help.github.com/remove-sensitive-data/
보다 일반적인 솔루션 :
편집하다
.gitignore
파일.ECHO mylogfile.log >> .gitignore
인덱스에서 모든 항목을 제거하십시오.
git rm -r -f --cached .
인덱스 재 구축.
git add .
새로운 커밋을 만드십시오
git commit -m "Removed mylogfile.log"
Git을 사용하면 해당 파일이 변경되지 않았다고 가정하여 해당 파일을 무시할 수 있습니다. 이것은 실행하여 이루어집니다
git update-index --assume-unchanged path/to/file.txt
명령. 파일을 표시하면 Git은 해당 파일의 변경 사항을 완전히 무시합니다. 그들은 git 상태 나 git diff를 실행할 때 나타나지 않을 것이며, 절대로 헌신적이지 않을 것입니다.
(에서 https://help.github.com/articles/ignoring-files)
따라서 삭제하는 것이 아니라 영원히 변화를 무시합니다. 나는 이것이 로컬로만 작동한다고 생각하므로 동료들은 위와 동일한 명령을 실행하지 않는 한 여전히 변경 사항을 볼 수 있습니다. (그래도 이것을 확인해야합니다.)
참고 : 이것은 질문에 직접 응답하는 것이 아니라 다른 답변의 의견에 대한 후속 질문을 기반으로합니다.
파일을 추적하지 않고 로컬 및 원격 repo에서 삭제하지 않으려면 thhis 명령을 사용하십시오.
git update-index --assume-unchanged file_name_with_path
위의 답변은 나에게 효과가 없었습니다. 나는 사용했다 filter-branch
커밋 된 모든 파일을 제거합니다.
git 저장소에서 파일을 제거하십시오.
git filter-branch --tree-filter 'rm file'
git 저장소에서 폴더를 제거하십시오.
git filter-branch --tree-filter 'rm -rf directory'
이것은 모든 커밋에서 디렉토리 또는 파일을 제거합니다.
다음을 사용하여 커밋을 지정할 수 있습니다.
git filter-branch --tree-filter 'rm -rf directory' HEAD
또는 범위 :
git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD
모든 것을 리모컨으로 푸시하려면 다음을 수행 할 수 있습니다.
git push origin master --force