2012-04-09 20 views
44

Jak mogę usunąć pusty folder lokalnie, a także czy ma to miejsce w przypadku innych współpracowników, którzy współużytkują pilota za pomocą polecenia pull-push? Wiem, że foldery nie są "śledzone" w tym sensie przez git, ale pozostaje pytanie.git - jak usunąć pusty folder i wcisnąć tę zmianę?

np. Przeniosłem plik do innego folderu i zatwierdziłem zmianę (przeniesienia).

Ale nie mogę git rm name folder, ponieważ otrzymuję "nie pasuje" git rmdir name nie istnieje.

Mogę zrobić git clean -f folder, ale jak to się stanie?

Mogę bezpośrednio rm plik, ale jak mogę zrobić to usunięcie katalogu zrobione poprawnie i pchnął do repozytorium, a następnie na zewnątrz, gdy wyciągają, aby ich istniejący folder został usunięty?

+1

co masz na myśli? – manojlds

Odpowiedz

75

Krótka odpowiedź: Nie można przekazywać zmian do katalogów (dodanych, usuniętych itd.), Ponieważ Git nie śledzi katalogów na własną wartość.

Według FAQ:

obecnie konstrukcja indeksu git (poczekalnia) tylko pozwala pliki powinny być wymienione, a nikt wystarczająco kompetentny, aby dokonać zmiany, aby umożliwić pustych katalogów nie zależało na tyle na ten temat sytuacja, aby temu zaradzić.

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

Jeśli chodzi o Git, twój pusty katalog już nie istnieje.

Zauważyłem, że nawyk używania git clean -fd eliminuje potrzebę pchania usuwania katalogów. Jednak git clean może usunąć elementy, których nie chcesz usunąć (w tym wszystkie nowe pliki, których jeszcze nie popełniłeś), dlatego najpierw używam git clean -fdn, aby zobaczyć, co zostanie usunięte, jeśli użyję tego polecenia.

Wygląda na to, że możesz zostać zmuszony do rozmowy z innymi programistami, aby wyczyścić ten katalog.

+0

Mercurial ma tutaj bardziej rygorystyczne podejście - katalog jest usuwany, jeśli pusty: http://stackoverflow.com/a/3917322/913223 i http://superuser.com/questions/81204/how-to-add-an-empty -folder-in-a-mercurial-project –

+0

Ta odpowiedź jest niekompletna. 'Git svn fetch' utrzymuje puste foldery.Nawet 'git svn rebase' odtworzyć puste foldery, jeśli po prostu je usunąć. – Andry

-6

Lekkim, hackowskim sposobem jest utworzenie fałszywego pliku w katalogu, zatwierdzenie go, a następnie usunięcie. Usunięcie go spowoduje również usunięcie katalogu. Więc utworzyć nazwę/fake.txt

git add name/fake.txt 
git commit -m "message" 
git rm name/fake.txt 
git commit -m "message2" 
+0

nie działa dla mnie :( – lImbus

+1

To podejście faktycznie działa, ale w drugim kroku chcesz usunąć folder zawierający plik 'rm -rf name', a następnie zatwierdzić zmianę, folder zniknie – igniteflow

3
git add --all 
git clean -f -d 
git commit -m "trying to remove folders" 
git push 
0

Nie można wcisnąć puste foldery. Ale jeśli chcesz wyczyścić puste foldery w sklonowanym/lokalnym repozytorium, zatwierdz najnowsze zmiany. Następnie po prostu usuń wszystkie pliki poza folderem .git w lokalnej kopii. Następnie zresetuj wszystkie zmiany ponownie, co spowoduje przywrócenie wszystkich plików, ale pozostawia puste katalogi, których nie śledzi.