Mam repozytorium @ github. Zrobiłem trochę pracy w domu i wrzuciłem to na github. Wymagało to pewnego usunięcia plików i katalogów. Teraz jestem na moim polu roboczym, które miało kopię kodu przed usunięciem plików i katalogów.
Wydałem:
git remote update
git checkout HEAD
git pull origin HEAD
Usunął wszystkie pliki, które powinien mieć, ale nie katalogi, w których się znajdowały.
Dwa pytania:
- Dlaczego nie usunął katalogów?
- Czy istnieje polecenie git, które mogę wydać w obecnym stanie, aby je usunąć?
Odpowiedzi:
Git nie śledzi katalogów, więc nie usunie tych, które staną się puste w wyniku scalenia lub innej zmiany. Jednakże, można użyć
git clean -fd
do usunięcia nieśledzone katalogów (-fd
środki flag f usuwania Orce z nieśledzonej plików i d irectories).źródło
git clean
będzie oczywiście.-n
(suchym uruchomieniem) zamiast-f
pierwszego, abyś mógł zobaczyć, co zostanie usunięte. Zwłaszcza, żegit clean -d
usuwa nie tylko te kłopotliwe katalogi, ale także nieśledzone pliki.git clean
nie usuwa plików wymienionych w .gitignore, chyba że przejdziesz tę-x
opcję.Jako część większości operacji, które zmieniają drzewo robocze (ściąganie, scalanie, wyewidencjonowywanie itp.) Git usunie wszystkie katalogi, które zostały opróżnione przez tę operację (tj. Git usunął ostatni plik).
git nie usunie żadnych katalogów, które nie są całkowicie puste, więc jeśli masz ukryte lub zignorowane pliki, to tylko dlatego, że git usuwa ostatni śledzony plik z tego katalogu, nie musi oznaczać, że git będzie w stanie usunąć ten katalog. git nie uważa tego za błąd, więc nie będzie narzekać.
źródło
git checkout master
”, ale większość ludzi po prostu powie: „Przerzuciłem / sprawdziłem mistrza”. W każdym razie, kiedy git powiedział: „Już aktualne”. to znaczy, że nic nie zrobił. git usunie tylko te katalogi, które uczyni pustymi.git checkout
nie usunął całkowicie pustego katalogu.Miałem ten sam problem, w moim przypadku w usłudze kompilacji (CI) .. ponieważ GIT ściąga wszystkie pliki bez czyszczenia folderów, wszystkie bin / obj, które zostały wcześniej zbudowane przez CI są brudne, więc jeśli usunę projekt testowy, bin będzie nadal zawierał bibliotekę DLL i wspomina o testach, które nie istnieją.
W celu rozwiązania tego problemu; to polecenie wydaje się działać (przynajmniej dla mnie)
gdzie X usunie wszystkie nieśledzone pliki:
źródło
Git nie śledzi katalogów, plików (wraz z ich ścieżką). Git tworzy wszystkie katalogi dla tych ścieżek, jeśli jeszcze nie istnieją (super!), Jednak nie usuwa ich, jeśli wszystkie pliki zawarte w ścieżce zostaną przeniesione lub usunięte (nie fajne ☹ ... ale są powody).
Rozwiązanie (po przeciągnięciu / przewinięciu do przodu / połączeniu):
Jeśli tego nie zrobisz
stash
wcześniejclean
, stracisz wszystkie nieśledzone pliki (nieodwracalnie).Uwaga: ponieważ powoduje to również wyczyszczenie wszystkich ignorowanych plików, może być konieczne ponowne uruchomienie niektórych skryptów kompilacji, aby odtworzyć metadane projektu (np.:)
./gradlew eclipse
. To także usuwa katalogi, które są puste i które nigdy nie były częścią ścieżek plików git.źródło
Git nie śledzi obecnie katalogów (patrz git wiki ),
to znaczy nie możesz dodawać pustych katalogów ani git usuwać katalogów, które kończą się puste.(EDYCJA: Dzięki, Manni, myliłem się! Nie możesz dodawać pustych katalogów, ale git usunie katalogi, które staną się puste, ponieważ ich śledzona zawartość została usunięta. )Co do polecenia usunięcia pustych katalogów: to zależy od systemu operacyjnego.
W przypadku Linuksa możesz użyć np.
Jednak spowoduje to usunięcie wszystkich pustych katalogów!
źródło