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?
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?
Odpowiedzi:
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)
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
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ć.
git rm -r --cached myFolder
git rm -r --cached directory/
usuwa tylko ze śledzenia git, ale struktura repozytorium pozostaje.
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
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
.
Możesz spróbować:
git rm -rf <directory_name>
Wymusi usunięcie katalogu.
Jeśli usuniesz pliki z katalogu (z git rm
wyjaś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, man
strona 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.
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.
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.
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.
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.
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 .keep
plik, aby Git był świadomy tej nowej zmiany.
touch /YOUR-directory/.keep
Teraz, jeśli naciśniesz, git status
Git 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.
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