초기 커밋에 일부 로그 파일이 포함되었습니다. 내가 추가 한 *log
내에 .gitignore
, 지금은 내 저장소에서 로그 파일을 제거 할.
git rm mylogfile.log
리포지토리에서 파일을 제거하지만 로컬 파일 시스템에서도 파일을 제거합니다.
파일의 로컬 사본을 삭제 하지 않고 리포지토리에서이 파일을 제거하려면 어떻게 해야합니까?
초기 커밋에 일부 로그 파일이 포함되었습니다. 내가 추가 한 *log
내에 .gitignore
, 지금은 내 저장소에서 로그 파일을 제거 할.
git rm mylogfile.log
리포지토리에서 파일을 제거하지만 로컬 파일 시스템에서도 파일을 제거합니다.
파일의 로컬 사본을 삭제 하지 않고 리포지토리에서이 파일을 제거하려면 어떻게 해야합니까?
답변:
로부터 사람 파일 :
제공되면
--cached
준비된 콘텐츠는 분기의 끝 또는 디스크의 파일과 일치해야 파일을 인덱스에서 제거 할 수 있습니다.
따라서 단일 파일의 경우 :
git rm --cached mylogfile.log
단일 디렉토리의 경우 :
git rm --cached -r mydirectory
svn rm --keep-local
.
git pull
하면 뒤에있는 경우가 후에 커밋git rm
git commit -m "Commit message"
및 을 사용해야 git push
합니다. 다른 단계적 변경 사항이있는 경우 (로 확인 git status
)이 시점에도 적용됩니다.
git rm --cached mylogfile.log
저장소에서 파일을 삭제합니다. 생산적인 시스템에서 파일을 잃지 않으려면 파일을 백업하고이 파일을 가져옵니다. 앞에서 언급 한대로 파일이 삭제되므로 백업에서 다시 복사해야합니다. 이것은 상당히 고통 스럽지만이 문제에 대한 더 나은 해결책을 찾지 못했습니다.
Resharper 파일과 같이 리포지토리에서 전체 폴더를 제거하려면 다음과 같이하십시오.
git rm -r --cached folderName
나는 좀 더 선명한 파일을 커밋했으며 다른 프로젝트 사용자에게 유지하기를 원하지 않았습니다.
Git Push repo branch
실제로 리모콘에서 파일을 제거하려면 을 수행해야합니다 .
로컬 파일 시스템에서 파일을 삭제하지 않고 .gitignore를 기반으로 저장소에서 파일을 제거 할 수도 있습니다.
git rm --cached `git ls-files -i -X .gitignore`
또는 Windows Powershell에서 다음을 수행하십시오.
git rm --cached $(git ls-files -i -X .gitignore)
git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}"
. 이 솔루션은 다음과 같은 훌륭한 도구이므로 여기에 답을 추가하거나 수정하십시오.
.gitkeep
저장소에서 빈 폴더를 보존하는 것과 같은 파일도 제거 합니다. 예 : .gitignore
폴더를 포함 uploads
하고 repo는를 추적해야합니다 .gitkeep
. 그 아래의 저장소에서 모두 uploads
제거하면 또한 제거 .gitkeep
됩니다.
내 대답에 따라 여기 : https : //.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository
디렉토리를 제거하는 단계
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"
rm --cashed
는 파일을 가져 오면 결국 파일을 삭제한다는 것입니다. 그리고 이것은 사람들이 " 로컬 파일 시스템에서 파일을 삭제하지 않고 저장소에서 파일을 제거합니다"라고 말할 때 원하는 것이 아닙니다 . 이제 왜 위의 해결책이 저를 넘어서게 되었습니까? 아마 OP가 혼자 일하고 결코 풀리지 않았습니까? 던노 문제 OFC "항상 밀려 일단"내가 github의 이해
힘내 당신이 파일을 변경하지 않은 것으로 가정하여 해당 파일을 무시할 수 있습니다. 이것은
git update-index --assume-unchanged path/to/file.txt
명령 을 실행하여 수행됩니다 . 파일을 그렇게 표시하면 git은 해당 파일의 변경 사항을 완전히 무시합니다. git status 또는 git diff를 실행할 때 표시되지 않으며 커밋되지 않습니다.
( https://help.github.com/articles/ignoring-files에서 )
따라서 삭제하지 않고 변경 사항을 영원히 무시합니다. 나는 이것이 로컬에서만 작동한다고 생각하므로 동료는 위와 동일한 명령을 실행하지 않으면 변경 사항을 계속 볼 수 있습니다. (여전히이를 확인해야합니다.)
참고 : 이것은 질문에 직접 대답하는 것이 아니라 다른 답변의 의견에 대한 후속 질문을 기반으로합니다.
파일을 추적 해제하고 로컬 및 원격 저장소에서 삭제하지 않으려면 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
git rm -r --cached NAME
하여 로컬 git repo에서 제거하고 나중에 가져 오는 사람 (git에서 파일 또는 디렉토리 기록을 삭제하여)에 영향을 미치지 않도록하는 트릭입니다.
참고 : 민감한 정보에 대한 기록은 다루지 않습니다.
이 과정은 git에서 무슨 일이 일어나고 있는지 확실하게 이해합니다. 시간이 지남에 따라 나는 다음과 같은 프로세스를 수행하는 법을 배웠습니다.
.gitignore
를 추가하거나 업데이트하여 무시하십시오. 예를 들어 부모 디렉토리와 같은 많은 경우 log/
에는 정규 표현식이 사용됩니다..gitignore
파일 변경을 커밋하고 푸시합니다 (푸시가 필요한지 확실하지 않은 경우, 해를 끼치 지 않음).git remove --cached some_dir/
git add .
git commit -m"removal"