Usuń plik z repozytorium, ale zachowaj go lokalnie

369

Mam folder, który chciałbym usunąć w moim zdalnym repozytorium. Chciałbym go usunąć, ale zachowaj folder na moim komputerze

Rodrigo Souza
źródło
Zapoznaj się z sugerowanymi powiązanymi pytaniami podczas pisania - duplikat był prawdopodobnie jednym z pierwszych dwóch.
Cascabel,
Kolejny duplikat: stackoverflow.com/questions/1273108/...
Cascabel,

Odpowiedzi:

637
git rm --cached -r somedir

Spowoduje usunięcie katalogu, ale niczego nie dotknie na dysku. Działa to również w przypadku pliku, takiego jak:

git rm --cached somefile.ext

Potem możesz chcieć dodać somedir/lub somefile.extdo swojego .gitignorepliku, aby git nie próbował dodać go ponownie.

jamessan
źródło
24
A następnie dodaj ścieżkę do .gitignore, aby git nie próbował zmusić Cię do dodania go później.
Grossvogel,
3
Czy spowoduje to usunięcie (plików w) katalogu, gdy pobierze on ze zdalnego?
bstpierre
Nie, kiedy ciągnie; pliki pozostaną usunięte lokalnie podczas automatycznego procesu scalania ściągania. Następnie wypychanie spowoduje usunięcie plików po stronie serwera.
Walter Mundt,
7
Co się stanie, jeśli mam trzeci pilot? Czy odpowiednie pliki zostaną usunięte w przyszłości? Pytam, ponieważ uważam, że jest to dość powszechny przypadek użycia, tj. Sprawdź niektóre pliki w repozytorium, w późniejszym terminie zdaj sobie sprawę, że różnią się one między pilotami, nie bez powodu i nigdy nie powinny być w repozytorium, chcę aby rozwiązać ten problem, zachowując wszystkie lokalne kasy dokładnie takie, jakie są, ale usuwając pliki z repozytorium.
Bobby Jack
6
W przypadku pojedynczych plików możesz to zrobićgit rm --cached path/to/file
Travis Reeder,
3

Po prostu:

  • Przenieś folder z działającego drzewa
  • git rm folder, zatwierdź zmianę
  • Dodaj do .gitignore(lub .git/info/excludes), zatwierdź zmianę
  • Przenieś folder z powrotem
Jeff
źródło
8
to nie jest dobre rozwiązanie - co jeśli masz bardzo duży katalog?
ioleo
prawdopodobnie trzeba użyćgit rm -r
theUtherSide
1
@loostro po prostu nie przenoś go na inne urządzenie blokowe. Większość systemów plików po prostu zaktualizuje i-węzeł pliku, a nie dosłownie przeniesie cały katalog
648trindade