Usuń katalog ze zdalnego repozytorium po dodaniu ich do.gitignore

Zobowiązałem się i wrzuciłem jakiś katalog do Githuba. Następnie zmieniłem plik .gitignore dodając katalog, który powinien być ignorowany. Wszystko działa dobrze, ale (teraz ignorowany) katalog pozostaje na GitHubie.

Jak usunąć ten katalog z github i historię repozytorium?

Author: melpomene, 2011-10-28

7 answers

Zasady zawarte w pliku .gitignore dotyczą tylko Plików nie śledzonych. Ponieważ pliki w tym katalogu zostały już zatwierdzone w Twoim repozytorium, musisz je usunąć, utworzyć commit i wysłać do GitHub:

git rm -r --cached some-directory
git commit -m 'Remove the now ignored directory "some-directory"'
git push origin master

Nie możesz usunąć pliku z historii bez przepisania historii 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, aby przepisz historię - tutaj znajduje się pomocny przewodnik .

Dodatkowo zwróć uwagę, że wyjście z git rm -r --cached some-directory będzie wyglądać następująco:

rm 'some-directory/product/cache/1/small_image/130x130/small_image.jpg'
rm 'some-directory/product/cache/1/small_image/135x/small_image.jpg'
rm 'some-directory/.htaccess'
rm 'some-directory/logo.jpg'

{[5] } to informacja zwrotna od Gita o repozytorium; pliki są nadal w katalogu roboczym.

 811
Author: Mark Longair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-19 20:52:23

Robię to:

git rm --cached `git ls-files -i --exclude-from=.gitignore` 
git commit -m 'Removed all files that are in the .gitignore' 
git push origin master

Który usunie wszystkie pliki / foldery znajdujące się w Twoim git ignore, zapisując musisz wybrać każdy ręcznie


To chyba przestało działać dla mnie, teraz to robię:

 git rm -r --cached . 
 git add .
 git commit -m 'Removed all files that are in the .gitignore' 
 git push origin master
 207
Author: Blundell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-24 17:54:14

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 wykonać 3 proste kroki.


Kroki usuwania katalogu

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master

Kroki, aby zignorować ten folder w następnym zatwierdzeniu

Aby zignorować ten folder z kolejnych commitów, należy utworzyć jeden plik w katalogu głównym o nazwie .gitignore i włóż do niego nazwę folderów. Możesz umieścić tyle, ile chcesz

.gitignore plik będzie wyglądał tak

/FolderName

Usuń katalog

 35
Author: eirenaios,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:36

Odpowiedź Blundella powinna zadziałać, ale z jakiegoś dziwnego powodu nie zadziałała u mnie. Musiałem najpierw przenieść nazwy plików wypisane przez pierwsze polecenie do pliku, a następnie zapętlić ten plik i usunąć ten plik jeden po drugim.

git ls-files -i --exclude-from=.gitignore > to_remove.txt
while read line; do `git rm -r --cached "$line"`; done < to_remove.txt
rm to_remove.txt
git commit -m 'Removed all files that are in the .gitignore' 
git push origin master
 4
Author: Chris Aelbrecht,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-30 13:04:14

Pierwsza odpowiedź Blundella nie zadziałała. Jednak to pokazało mi właściwą drogę. Zrobiłem to samo:

> for i in `git ls-files -i --exclude-from=.gitignore`; do git rm --cached $i; done
> git commit -m 'Removed all files that are in the .gitignore'
> git push origin master

Radzę najpierw sprawdzić pliki do usunięcia, uruchamiając poniższą instrukcję:

git ls-files -i --exclude-from=.gitignore

Używałem domyślnego .plik gitignore dla visual studio i zauważyłem, że usuwał wszystkie foldery log i bin w projekcie, co nie było moim zamierzonym działaniem.

 4
Author: Oncel Umut TURER,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-07 12:14:26

Uwaga: To rozwiązanie działa tylko z Github Desktop GUI.

Używając Github Desktop GUI jest to bardzo proste.

  1. Tymczasowo przenieś folder do innej lokalizacji (do folderu poza projektem).

  2. Edytuj swój plik .gitignore i usuń wpis folderu, który byłby remove master repozytorium na stronie github.

  3. Zatwierdź i zsynchronizuj folder projektu.

  4. Ponownie przenieś folder do projektu folder

  5. Re-Edytuj plik .gitignore.

To wszystko.
 2
Author: efkan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-21 09:55:27

Jeśli pracujesz z PowerShell, spróbuj wykonać następujące polecenie jako jedno polecenie.

PS MyRepo> git filter-branch --force --index-filter
>> "git rm --cached --ignore-unmatch -r .\\\path\\\to\\\directory"
>> --prune-empty --tag-name-filter cat -- --all

Następnie, git push --force --all.

Dokumentacja: https://git-scm.com/docs/git-filter-branch

 0
Author: Shaun Luttin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-25 22:09:10