2010-01-05 16 views
31

Kopia zapasowa bazy danych do GIT, tak aby uzyskać db na moim komputerze domowym.Jak trwale usunąć plik zapisany w GIT?

Nie chcę, aby ten plik był wersjonowany, to była naprawdę tylko jedna rzecz.

Czy mogę go usunąć na dobre, aby GIT nie śledził tego w przyszłości lub w przeszłości?

+0

możliwe duplikat [Usuń poufnych plików i ich rewizje z historii Git] (http://stackoverflow.com/questions/872565/remove-sensitive-files-and-their-commits- from-git-history) – CharlesB

+0

możliwy duplikat [Całkowicie usuń plik ze wszystkich historii zatwierdzania repozytorium Git] (http://stackoverflow.com/questions/307828/completely-remove-file-from-all-git-repository-commit- historia) –

Odpowiedz

57

Zawsze pomocna jest pomoc Guides: Completely remove a file from all revisions feed.

Aby usunąć plik o nazwie Rakefile:

git filter-branch --force --index-filter \ 
  'git rm --cached --ignore-unmatch Rakefile' \ 
  --prune-empty --tag-name-filter cat -- --all 

To polecenie uruchomi całą historię każdej gałęzi i tag, zmieniając dowolne popełnić że zaangażowane plik Rakefile, a wszelkie commity później. Komendy , które są następnie puste (ponieważ zmieniły tylko plik Rakefile) są całkowicie usunięte z .

+3

dzięki, to naprawdę działa! Możesz również dodać: git push --all --force –

+2

Dzięki. Zajęło mi to kilka prób, ponieważ nie podałem pełnej względnej ścieżki do pliku (od katalogu głównego) i po prostu miałem nazwę pliku. – mdiehl13

+1

Pamiętaj, aby zawsze ostrzegać wszystkich swoich rówieśników, gdy zamierzasz przepisać historię na zdalne repozytorium ('git push --all --force'), inaczej napotkają one różnego rodzaju problemy podczas wykonywania pull. – pedromanoel

18

Aktualizacja remote repository:

git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch FOLDERNAME" -- --all 

zastąpić NazwaFolderu z pliku lub folderu, który chcesz usunąć z danego repozytorium git.

rm -rf .git/refs/original/ 

git reflog expire --expire=now --all 

git gc --prune=now 

git gc --aggressive --prune=now 

Teraz wciśnij wszystkich zmian do zdalnego repozytorium

git push --all --force 

To oczyścić zdalnego repozytorium.

3

Możesz również użyć bfg dla ułatwienia.

BFG jest prostsza, szybsza alternatywa do git-filter-oddział dla oczyszczenia złych danych z Twojego Git historii repozytorium

Usuwanie Szalony dużych plików Usuwanie hasła, poświadczenia & inne dane prywatne

$ bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA 

Albo po prostu zastąpić wszystkie wystąpienia jakiegoś pliku:

$ bfg --replace-text passwords.txt 

check https://rtyley.github.io/bfg-repo-cleaner/ i https://help.github.com/articles/removing-sensitive-data-from-a-repository/