얼마 전에 비공개 여야하는 정보 (파일)를 추가했습니다. 프로젝트에서 제거하는 것은 문제가되지 않지만 git
기록 에서도 제거해야합니다 .
Git과 Github (개인 계정)를 사용합니다.
참고 : 이 스레드에서 유사한 내용이 표시되지만 여기에는 기능 브랜치에 추가 된 이전 파일이 있습니다. 해당 브랜치는 개발 브랜치에 병합되고 마지막으로 마스터에 병합 되었기 때문에 많은 변경이 이루어졌습니다. 따라서 동일하지 않으며 필요한 것은 기록을 변경하고 개인 정보 보호를 위해 해당 파일을 숨기는 것입니다.
답변
이 답변을 찾았으며 도움이되었습니다.
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch path_to_file" HEAD
여기에서 찾았습니다 https://myopswork.com/how-remove-files-completely-from-git-repository-history-47ed3e0c4c35
답변
최근에 해당 파일을 커밋했거나 해당 파일이 하나 또는 두 개의 커밋에서 변경된 경우 해당 커밋을 사용 rebase
하고 cherrypick
제거하는 것이 좋습니다 .
그렇지 않으면 전체 기록을 다시 작성해야합니다.
git filter-branch --tree-filter 'rm -f <path_to_file>' HEAD
변경 사항에 만족하고 모든 것이 정상적으로 보이도록 정당하게 확인한 경우 모든 원격 지점을 업데이트해야합니다.
git push origin --force --all
참고 :-복잡한 작업이며 수행중인 작업을 알고 있어야합니다. 먼저 데모 저장소에서 어떻게 작동하는지 확인하십시오. 또한 다른 개발자에게 그동안 변경 사항이 없도록 알려야합니다.
답변
-
파일을 제거하고 제거 된 파일로 수행 한 커밋에서 기록을 다시 작성합니다 (커밋 한 파일에서 새 커밋 해시가 생성됨).
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' --prune-empty --tag-name-filter cat -- --all
-
이제 repo를 강제로 푸시하십시오.
git push origin --force --all
-
이제 공동 작업자에게
rebase
.
답변
bfg repo-cleaner 패키지를 사용하는 것은 git-filter-branch
. 분명히 더 빠릅니다 …
답변
- 우선,
.gitignore
파일에 추가하고 파일을 커밋하는 것을 잊지 마십시오 🙂 -
이 사이트를 사용할 수 있습니다 : http://gtiignore.io 를 생성하고
.gitignore
바이너리 파일 / 폴더에 필요한 경로를 추가합니다. -
파일을 추가하면
.gitignore
BFG를 사용하여 “이전”바이너리 파일을 제거 할 수 있습니다.
How to remove big files from the repository
git filter-branch
또는 BFG 를 사용할 수 있습니다 .
https://rtyley.github.io/bfg-repo-cleaner/
BFG Repo-Cleaner
git-filter-branch의 대안.
BFG는 Git 저장소 기록에서 잘못된 데이터 를 정리하기 위해 git-filter-branch에 대한 더 간단하고 빠른 대안입니다 .
* 미친 큰 파일
제거 * * 암호, 자격 증명 및 기타 개인 데이터 제거
예 (공식 사이트에서)
이 모든 예에서 bfg는 java -jar bfg.jar의 별명입니다.
# Delete all files named 'id_rsa' or 'id_dsa' :
bfg --delete-files id_{dsa,rsa} my-repo.git
답변
나는 이 GitHub 기사를 읽었 으며 다음 명령으로 이어졌습니다 (허용되는 답변과 비슷하지만 조금 더 강력합니다).
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" --prune-empty --tag-name-filter cat -- --all
답변
git-repo-filter
git
git-filter-repo 사용을 권장합니다 ( git filter-branch
명령이 실행될 때 ). 다른 대안 ( https://github.com/newren/git-filter-repo#why-filter-repo-instead-of-other-alternatives ) 보다 나은 이유에 대한 긴 목록 이 있습니다. 매우 간단하고 빠릅니다.
이 명령은 모든 분기의 모든 커밋에서 파일을 제거합니다.
git filter-repo --path <path to the file or directory> --invert-paths
여러 --path
매개 변수 를 사용하여 여러 경로를 지정할 수 있습니다 . 여기에서 자세한 문서를 찾을 수 있습니다 :
https://www.mankier.com/1/git-filter-repo