Jak usunąć katalog z repozytorium git?

1232

Mam 2 katalogi w moim repozytorium GitHub. Chciałbym usunąć jeden z nich. Jak mogę to zrobić bez usuwania i ponownego tworzenia całego repozytorium?

Sahat Yalkabov
źródło
1
Czy w katalogach są jakieś pliki?
Fred Foo,
3
@Iarsmans: Tak 6 plików. Oba katalogi są identyczne, z wyjątkiem tego, że jeden jest pisany wielkimi literami, a drugi to małe.
Sahat Yalkabov

Odpowiedzi:

2322

Usuń katalog z git i lokalnego

Możesz wyewidencjonować „master” w obu katalogach;

git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)

Usuń katalog z git, ale NIE lokalny

Jak wspomniano w komentarzach, zwykle chcesz usunąć ten katalog z git, ale nie usunąć go całkowicie z systemu plików (lokalny)

W takim przypadku użyj:

git rm -r --cached myFolder
karmakaze
źródło
8
Miałem taką samą dokładną sytuację. Kiedy próbowałem git rm -r myFolder, zadziałało, ale również usunąłem wszystko z katalogu „MyFolder”. Musiałem przywrócić wszystko w katalogu „MyFolder”, a następnie zatwierdzić.
Justin
240
@Justin Aby tylko usunąć z git i pozostawić system plików bez git rm -r --cached myFolder
zmian
32
Komunikat o błędzie, który otrzymuję to: fatal: pathspec „katalog” nie pasuje do żadnego pliku.
user2441441,
3
@ user2441441 Ten błąd pojawiał się, gdy próbowałem usunąć folder / plik, który w ogóle nie został dodany do repo
lukeatdesignworks
3
git rm -r --cached directory/usuwa tylko ze śledzenia git, ale struktura repozytorium pozostaje.
Néstor
287

Aby usunąć folder / katalog tylko z repozytorium git, a nie z lokalnego, wypróbuj 3 proste polecenia.


Kroki, aby usunąć katalog

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

Kroki, aby zignorować ten folder w kolejnych zatwierdzeniach

Aby zignorować ten folder od następnych zatwierdzeń, utwórz jeden plik w katalogu głównym o nazwie .gitignore i umieść w nim nazwę tego folderu. Możesz umieścić tyle, ile chcesz

Plik .gitignore będzie wyglądał następująco

/FolderName

usuń katalog

eirenaios
źródło
1
Konieczne będzie także wykonanie polecenia git rm -r --cached FolderName git commit -m „Usunięto folder z repozytorium” na drugim komputerze, a następnie pociągnięcie, aby zachować synchronizację.
Simon
1
Czy spowoduje to usunięcie katalogu od momentu dodania go do repozytorium do tej pory? A może po prostu usunąć katalog i ponownie uruchomić go w repozytorium .git?
alpha_989
1
Świetny! Pracujący!
BeingCoders,
2
Dobrze wyjaśniona, ładna odpowiedź
Rakshit Shah
1
dobra robota. Na moim komputerze trzeci krok nie działa. Ale działa, jeśli zostanie zmieniony na $ git push
Hong
82

Jeśli z jakiegoś powodu to, co powiedział karmakaze, nie działa, możesz spróbować usunąć katalog, którego chcesz użyć lub w przeglądarce systemu plików (np. W Eksploratorze plików Windows). Po usunięciu katalogu wydaj polecenie:
git add -A
a potem
git commit -m 'deleting directory'
i potem
git push origin master.

cmcculloh
źródło
4
To zadziałało dla mnie. Czy możesz wyjaśnić argument -A?
Arun,
2
@Arun -A jest skrótem od --all i dodaje zmiany ze wszystkich śledzonych i nieśledzonych plików
Joachim Rohde
To zadziałało dla mnie.
UVM
20

Możesz spróbować: git rm -rf <directory_name>

Wymusi usunięcie katalogu.

Breen ho
źródło
3
spowoduje to również usunięcie z katalogu lokalnego
abdul rehman kk
18

Jeśli usuniesz pliki z katalogu (z git rmwyjaśnieniem innych odpowiedzi), katalog nie będzie już istniał, jeśli chodzi o git. Nie można zatwierdzić pustego katalogu ani go usunąć.

Jest to odmienne od subwersji, w której musisz to jawnie svn rm emptyfolder/, i nawiasem mówiąc, manstrona git opisuje siebie jako „głupie narzędzie do śledzenia treści”

Odpowiedź na temat „Jak dodać pusty katalog do repozytorium git” prowadzi do najczęściej zadawanych pytań na ten temat :

Obecnie konstrukcja indeksu git (obszar przejściowy) pozwala tylko na wyświetlanie plików i nikt nie jest wystarczająco kompetentny, aby dokonać zmiany, aby zezwolić na puste katalogi, troszczył się wystarczająco o tę sytuację, aby to naprawić.

Katalogi są dodawane automatycznie podczas dodawania plików w nich zawartych. Oznacza to, że katalogi nigdy nie muszą być dodawane do repozytorium i same nie są śledzone.

Możesz powiedzieć „ git add <dir>”, a tam dodasz pliki.

Jeśli naprawdę potrzebujesz katalogu, aby istniał w kasach, powinieneś utworzyć w nim plik. .gitignore działa dobrze w tym celu; możesz pozostawić puste lub wpisać nazwy plików, które mają się pojawiać w katalogu.

dbr
źródło
8

Już wcześniej zatwierdziłem ten folder i chcę go również usunąć z historii.

Zrobiłem następujące:

Dodaj folder do .gitignore:

echo Folder_Name/ >> .gitignore

Usuń ze wszystkich zatwierdzeń:

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all

usuń referencje ze starych zatwierdzeń:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

Upewnij się, że wszystkie stare referencje zostały całkowicie usunięte

rm -Rf .git/logs .git/refs/original

Wykonaj wyrzucanie elementów bezużytecznych

git gc --prune=all --aggressive

wprowadzać zmiany do repozytorium online:

git push

Skończysz tutaj.

Ale możesz wykonać następujące czynności, aby przesłać wszystkie zmiany do wszystkich gałęzi za pomocą: Ale uważaj na to polecenie!

git push origin --all --force
git push origin --tags --force

Następnie folder został usunięty z git, ale nie został usunięty z dysku lokalnego.

Skyborg
źródło
7

do usuwania pustych folderów

chciałem usunąć pusty katalog (folder), który utworzyłem, git nie może go usunąć, po kilku badaniach dowiedziałem się, że Git nie śledzi pustych katalogów. Jeśli masz pusty katalog w swoim drzewie roboczym, powinieneś go po prostu usunąć

rm -r folderName

Nie ma potrzeby angażowania Gita.

Ridha Rezzag
źródło
1
Dzięki! Właśnie tego potrzebowałem.
SpyrosKo
6

Przejdź do katalogu git, a następnie wpisz następującą komendę: rm -rf < Nazwa katalogu >

Po usunięciu katalogu zatwierdź zmiany przez: git commit -m „Twoja wiadomość zatwierdzenia”

Następnie po prostu wciśnij zmiany w zdalnym katalogu GIT: git push origin < Nazwa oddziału >

anky
źródło
4

Możesz usunąć folder lokalnie, a następnie wypchnąć, wykonując następujące czynności:

git rm -r folder_name
git commit -m "your commit"
git push origin master
shrikant
źródło
4

Zwykle używam git add --alldo usuwania plików / folderów ze zdalnych repozytoriów

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master

master można zastąpić dowolną inną gałęzią repozytorium.

ettanany
źródło
2

Możesz użyć Attlasian Source Tree (Windows) ( https://www.atlassian.com/software/sourcetree/overview ). Wystarczy wybrać pliki z drzewa i nacisnąć przycisk „Usuń” u góry. Pliki zostaną usunięte z lokalnego repozytorium i lokalnej bazy danych git. Następnie zatwierdź, a następnie pchnij.

Sergey Groshev
źródło
To też robię. Ułatwiło to jednak przyswojenie poleceń git.
Micah Montoya
1

Jeden z moich współpracowników zasugerował BFG Repo-Cleaner, który uważam za potężny. Nie tylko usuwa niechciane dane, ale także czyści twoje repozytorium od powiązanych informacji zatwierdzających.

thanh.h.le
źródło
1

Aby dodać nowy katalog:

mkdir <YOUR-DIRECTORY>

Ale teraz Git nie jest świadomy tego nowego katalogu, ponieważ Git śledzi pliki, a nie katalogi DIRECTORY

git status

Git nie będzie świadomy wprowadzonej przez nas zmiany, więc dodajemy ukryty .keepplik, aby Git był świadomy tej nowej zmiany.

touch /YOUR-directory/.keep

Teraz, jeśli naciśniesz, git statusGit będzie świadomy zmian.

A jeśli chcesz usunąć katalog, powinieneś użyć tego polecenia.

rm -r <YOUR-DIRECTORY>

A jeśli sprawdziłeś za pomocą git status, zobaczysz, że katalog został usunięty.

Abo3atef
źródło
0

Najpierw polecenie git musi wiedzieć, kim jesteś, zanim cokolwiek usuniesz

  1. git init
  2. git config user.name „ktoś”
  3. git config user.email „ktoś@someplace.com”
  4. git rm -r
  5. git commit -m „usuwanie katalogu”
  6. git push master origin
Zeus
źródło
0

Kombinacja 2 odpowiedzi zadziałała dla mnie

git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push

jeśli nadal wyświetla się ostrzeżenie, usuń pliki ręcznie

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push
użytkownik3821178
źródło