nie można dodać folderu w git

20

Dodałem nowy folder (właściwie sklonowałem go z innego repozytorium i zapomniałem o tym), a następnie wprowadziłem kilka zmian. Dodatkowo dokonałem wielu zmian w innych miejscach, kiedy próbowałem dodać git

# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   protected/ext/SpecificFolder (modified content)
#

Potem pamiętam, że może był folder .git (ponieważ poprzednio tam klonowałem git). Poszedłem do tego folderu i usunąłem niepotrzebne pliki (foldery) oraz folder .git. Sprawdziłem status gita, nic dziwnego. Następnie zatwierdzaj i kasuj do innej gałęzi i nagle stwierdzam, że ten folder nie został dodany do ostatniego zatwierdzenia. Właściwie folder został dodany, ale pliki wewnątrz zostały zignorowane. Teraz nawet kiedy próbuję zrobić git adddla tego folderu nic się nie dzieje i git statusnie pokazuję żadnych zmian :(

Co mogę zrobić ?

użytkownik1016265
źródło
6
Na wypadek, gdyby ktoś znalazł się na tej stronie z problemem, z którym się spotkałem: nie mogłem dodać plików w podfolderze do Git. Później odkryłem, że ten podfolder ma własne .gitrepozytorium i pliki są dodawane do tego repozytorium zamiast do repozytorium w folderze głównym. Nawet w graficznym interfejsie Git ten podfolder pojawił się jako plik zamiast jako folder.
Nav

Odpowiedzi:

27

Git nie śledzi katalogów; ale tylko zawarte w nich pliki.

Wygląda na to, że masz wzór ignorowania, który powoduje, addże nic nie robisz. Możesz zobaczyć zignorowane pliki za pomocą git status --ignored; można je następnie śledzić za pomocągit add --force protected/ext/SpecificFolder

Bryan
źródło
1
Nie, nie jest obecny git status --ignored, jakoś myślę, że ma to związek z submodułem
user1016265 16.04.13
1
To polecenie uratowało życie. Bez tego nigdy nie dowiedziałbym się, który katalog został zignorowany.
IgorGanapolsky
wow ..... Czułem się całkowicie głupio, czytając ten fakt po użyciu git od jakiegoś czasu ^^
XandruCea
1
Aha w końcu. To był mój problem. Skopiowałem .gitignore od rodzica i do podmodułów. Ignorowałem „config /”, a później utworzyłem katalog w katalogu źródłowym o nazwie config. Nie można dodać odwagi. Problem rozwiązany teraz dziękuję :-)
Avec
7

Git nie śledzi pustych katalogów. Jeśli masz projekt z wieloma warstwami podkatalogów, git faktycznie śledzi znajdujące się w nich katalogi z plikami. Gdyby tak nie było, byłoby to jedno płaskie repozytorium plików.

allmusic76
źródło
Wow, to takie proste, ale cholerne. Przeczytałem to i powiedziałem „o mój Boże, właśnie to”
Brian Leishman,
3

Zdarzyło mi się zrobić dokładnie to, co zrobił ten użytkownik: dodaj istniejące repozytorium git do innego.

Objawem było to, że git rozpoznał ten katalog jako plik, a zatem nie mógł dodać plików katalogu.

Aby rozwiązać to pytanie, .gitusunąłem folder w folderze, przeniosłem ten folder do innego katalogu, wyczyściłem indeks, usunąłem katalog, w którym znajdowałem się w moim repozytorium, a następnie byłem w stanie poprawnie dodać katalog.

Morał tego jest taki: nie dodawaj repozytorium do innego.

madmin
źródło
5
Można to również naprawić, uruchamiającgit rm --cached path_to_submodule
Victor Marchuk
2

Tutaj jest lepsza odpowiedź: użycie .gitkeep

TL; DR, dodaj .gitkeepplik do pustego katalogu

Yarh
źródło
0

Spróbuj dodać plik w tym katalogu.

$ git add my-dir/index.html

Jeśli zobaczysz wynik podobny do poniższego:

The following paths are ignored by one of your .gitignore files:
my-dir/index.html
Use -f if you really want to add them.
fatal: no files added

W jednym z twoich gitignorów znajduje się reguła, która uniemożliwia Ci dodanie tego katalogu.

Gayan Weerakutti
źródło
0

Znalazłem podobne efekty uboczne po próbie przekształcenia tego, co kiedyś było submodułem, w normalny podfolder.

Ponowne dodanie folderu, który próbowałem przekonwertować, wydawało się działać, ale okazuje się, że pliki w nim nie zostały faktycznie dodane.

Próba specjalnego dodania do niego pliku dała mi lepsze ostrzeżenie

git add sites/all/modules/contrib/transclusion/transclusion.module 
fatal: Pathspec 'sites/all/modules/contrib/transclusion/transclusion.module' is in submodule 'sites/all/modules/contrib/transclusion'
  • więc było to związane ze sposobem, w jaki ręcznie próbowałem usunąć stary submoduł, ponieważ nie było dobrze udokumentowanego procesu prawidłowego wykonania tego. - Właśnie usunąłem go z .gitmodules. Inne rzeczy były w rzeczywistości konieczne, aby usunąć cienie submodułu.
dman
źródło