2013-01-18 2 views
3

실수로 모든 내 git 커밋 및 푸시 작업에 Python 가상 환경 디렉토리 venv을 포함 시켰습니다.git는 .gitignore에 추가 된 파일을 버전 관리에서 제거합니까?

방금 ​​.gitignorevenv을 추가했습니다. 하지만 내 .git 폴더는 여전히 방대합니다 (이전 커밋과 venv 추적으로 인해 가정합니다).

어떻게하면 venv 추적을 완전히 잊어 버리고 내 .git 폴더를 적당한 크기로 다시 가져올 수 있습니다. Heroku가 악몽에 빠지게 만듭니다.

답변

2

봅니다 :

$> git rm --cached venv* 
0

manual에 따라 git gc을 시도하면 자동 가비지 수집이 트리거됩니다. 도움이되지 않는 경우 여기에 의견을 남겨 주시면 추가 옵션을 조사하겠습니다. 당신의 자식 저장소에서 파일을 삭제

0

아니, 그렇지 않습니다. .gitignore은 무시 된 파일이 실수로 추가되지 않도록하지만 기록에서 삭제하거나 HEAD에서 삭제하지 않으며 이미 추가 된 경우 색인에서 삭제하지 않습니다.

git 기록에서 대용량 파일을 영구적으로 삭제하려면 기록을 다시 작성해야합니다. 이는 다소 힘든 작업입니다. 특히, 그것은 역사의 "오래된"버전을 가지고있는 다른 저장소로부터 푸시와 당김을 끊습니다. 그러나 그것은 할 수 있습니다. 예를 들어 자세한 내용은 this question 또는 this one을 참조하십시오.

1

이 스레드를 참조하십시오 : 참조 How to make Git "forget" about a file that was tracked but is now in .gitignore?

커밋 현재에서 파일을 쉽게 얻을

,하지만 역사에서 제거하는 것은 전적으로 귀하의 파일 크기를 얻을 수있는 엉망입니다 How to remove/delete a large file from commit history in Git repository? 또는 https://help.github.com/articles/remove-sensitive-data

최신 코드를 새로운 git repo로 내보내고 다시 시작하여 아카이브에 대해 이전 코드를 유지하는 것이 더 빠를 수도 있습니다.

0

.gitignore에 파일을 저장해도 저장소에서 파일이 제거되지 않습니다.

git filter-brach을 사용하여 저장소에서 파일이나 디렉토리를 완전히 제거해야합니다. 이렇게하려면 다음 명령을 사용 :이

git filter-branch --index-filter 'git rm --cached --ignore-unmatch file/or/dir/with/complete/path' --prune-empty --all 

, 모든 커밋에서 file/or/dir/with/complete/path을 제거 완료 저장소 내역을 변경합니다. 기록을 변경 했으므로 git push -f을 수행해야합니다.

관련 문제