Popełniłem i wysłałem katalog do github. Następnie zmieniłem .gitignore
plik, dodając katalog, który należy zignorować. Wszystko działa dobrze, ale katalog (teraz ignorowany) pozostaje na github.
Jak usunąć ten katalog z github i historii repozytorium?
Odpowiedzi:
Reguły w Twoim
.gitignore
pliku dotyczą tylko plików nieśledzonych. Ponieważ pliki w tym katalogu zostały już zatwierdzone w Twoim repozytorium, musisz je wycofać, utworzyć zatwierdzenie i przekazać je do GitHub:Nie możesz usunąć pliku ze swojej historii bez przepisania historii swojego repozytorium - nie powinieneś tego robić, jeśli ktoś inny pracuje z twoim repozytorium lub używasz go z wielu komputerów. Jeśli nadal chcesz to zrobić, możesz użyć
git filter-branch
do przepisania historii - tutaj znajdziesz pomocny przewodnik .Dodatkowo pamiętaj, że dane wyjściowe
git rm -r --cached some-directory
będą takie jak:Informacje
rm
zwrotne od git na temat repozytorium; pliki nadal znajdują się w katalogu roboczym.źródło
-r
i--cached
. Dzięki.-r
oznacza rekurencyjne, konieczne, jeśli robisz całe katalogi.--cached
zastępuje normalne zachowanie git polegające na usuwaniu ich z katalogu roboczego i ustawianiu usuwania w celu zatwierdzenia, i sprawia, że git działa tylko na obszarze testowym gotowym do zatwierdzenia. W ten sposób mówisz git, że chcesz zachować lokalne kopie plików.git reset name_of_file
aby to, co opisano powyżej, zadziałałoRobię to:
Które usunie wszystkie pliki / foldery, które są w twoim git ignorują, oszczędzając musisz wybierać każdy ręcznie
Wydaje się, że przestało to dla mnie działać, teraz:
źródło
foreach ($i in iex 'git ls-files -i --exclude-from=.gitignore') { git rm --cached $i }
Jak na moją odpowiedź tutaj: Jak usunąć katalog z repozytorium git?
Aby usunąć folder / katalog tylko z repozytorium git, a nie z lokalnego, spróbuj 3 prostych kroków.
Kroki, aby usunąć katalog
Kroki, aby zignorować ten folder w kolejnych zatwierdzeniach
Plik .gitignore będzie wyglądał następująco
źródło
Pierwsza odpowiedź Blundella nie zadziałała dla mnie. Jednak pokazało mi to właściwą drogę. Zrobiłem to samo:
Radzę najpierw sprawdzić pliki do usunięcia, uruchamiając poniższą instrukcję:
Używałem domyślnego pliku .gitignore dla Visual Studio i zauważyłem, że usuwa on wszystkie foldery dziennika i bin w projekcie, co nie było moim zamierzonym działaniem.
źródło
Uwaga: To rozwiązanie działa tylko z graficznym interfejsem użytkownika Github .
Korzystanie z graficznego interfejsu użytkownika Github jest bardzo proste.
Tymczasowo przenieś folder do innej lokalizacji (poza folder projektu).
Edytuj
.gitignore
plik i usuń pozycję folderu, która byłaby usunięciem głównego repozytorium na stronie github.Zatwierdź i zsynchronizuj folder projektu.
Ponownie przenieś folder do folderu projektu
Ponownie edytuj
.gitignore
plik.To wszystko.
źródło
Odpowiedź Blundella powinna zadziałać, ale z jakiegoś dziwnego powodu nie zadziałała ze mną. Musiałem najpierw potokować nazwy plików wyprowadzone przez pierwsze polecenie do pliku, a następnie przejść przez ten plik i usunąć go jeden po drugim.
źródło
Jeśli musisz również usunąć nowo zignorowane pliki z historii zatwierdzeń oddziału lub jeśli nie chcesz, aby nowo zignorowane pliki zostały usunięte z przyszłych operacji pobierania , zapoznaj się z tą odpowiedzią .
źródło
Jeśli pracujesz z PowerShell, spróbuj wykonać następujące czynności jako jedno polecenie.
Potem
git push --force --all
.Dokumentacja: https://git-scm.com/docs/git-filter-branch
źródło
git filter-branch
różni się używanie od używaniagit rm
? Początkowo myślałem, że muszę użyć wersji,git filter-branch
ale większość komentarzy tutaj zaleca użyciegit rm
. Z tego co rozumiem,git rm
usuwa to tylko z bieżącego katalogu roboczego i indeksu. Ale jeśli dodano wcześniej wiele zatwierdzeń, nadal będzie w repozytorium.git rm
usunie plik z ostatniego zatwierdzenia w przyszłości.git filter-branch
pozwala nam usunąć go z całej historii. Zobacz także: help.github.com/articles/…