Podmoduł Git dodaje: problem „lokalnie znajduje się katalog git”


193

Właściwie próbuję nauczyć się korzystać z git, w tym git submodulepodkomend. Już skonfigurowałem serwer, na którym mogę hostować, wypychać i pobierać repozytoria git przy użyciu SSH. Na tym serwerze utworzyłem główne repozytorium git „Travail”, w którym chciałbym umieścić wszystkie moje projekty jako podmoduły.

W moim repozytorium Travail dodałem już mój projekt jako podmoduł tools/libft: Jestem w stanie opracować ten podmoduł, popychać go i wyciągać.

Ale kiedy próbuję dodać kolejny podmoduł (o nazwie fdf, z fdf.git na moim serwerze), pojawia się następujący problem:

git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf

Katalog git dla 'projets / fdf' jest znaleziony lokalnie z pilotem (ami): origin ssh: //git@XXX.XXX.XXX.XXX: XXXXX / opt / git / fdf.git Jeśli chcesz ponownie użyć tego lokalnego git katalog zamiast klonować ponownie z ssh: //XXX.XXX.XXX.XXX: XXXXX / opt / git / fdf.git użyj opcji --force. Jeśli lokalny katalog git nie jest poprawnym repozytorium lub nie masz pewności, co to oznacza, wybierz inną nazwę z opcją „--name”.

W rzeczywistości nie ma podkatalogu projets/

Przeczytałem w innym wątku, którego powinienem użyć git submodule synclub edytować plik .gitmodules, w którym mógłby się zmienić adres URL repozytorium źródłowego mojego podmodułu.

Ale mój plik .gitmodules zawiera tylko informacje o moim pierwszym podmodule (tools / libft), a nie o projektach / fdf:

[submodule "tools/libft"]
    path = tools/libft
    url = ssh://git@XXX.XXX.XXX.XXX:XXXXX/opt/git/libft.git

Jako francuski student mogłem coś przeoczyć w angielskiej dokumentacji, którą posiadałem, ale szukałem i naprawdę nie rozumiem, dlaczego dostaję ten problem.

Byłbym zadowolony, gdybym znalazł rozwiązanie, ale pomocne byłoby również wyjaśnienie.


Mała korekta: to „repozytorium”, a nie „depozytariusz”. Naprawdę nie jest to odpowiedź, ale jeśli projekty są od siebie niezależne, byłoby lepiej, gdyby każdy projekt miał własne repo zamiast submodułów.
— jcm

Dziękuję, poprawiłem. Wiem, ale chciałbym zebrać całą moją pracę w tym samym repozytorium, ale jako osobne projekty. Jest to wybór, aby utrzymać cała moja praca aktualizowany, gdy idę z domu do mojej szkoły i vice versa (i nauczyć się korzystać z tych narzędzi, jestem ciekawy;))
— vmonteco

Cóż, ciekawość jest zawsze dobrym powodem! :) To jest dziwne. Czy na pewno nie dodałeś wcześniej tego podmodułu?
— jcm

Nie w Travail /, i nie mam problemu z klonowaniem fdf.git w ~ /. W Travail / nie znajduję żadnych śladów fdf. just libft: /
— vmonteco

5
Och, czekaj, zajrzałem /Travail/.git/modules/projets/i znalazłem fdfkatalog. Wydaje się, że nie dotyczy to działającego drzewa, ale starszych zatwierdzeń. Czy to może wygenerować problem?
— vmonteco

Odpowiedzi:


443

Przyszedłem do tego postu SO próbując dodać submoduł o tej samej ścieżce co submoduł, który niedawno usunąłem.

Oto, co ostatecznie dla mnie zadziałało ( ten artykuł bardzo mi pomógł ):

Jeśli jeszcze nie uruchomiłeś git rm --cached path_to_submodule(bez końcowego ukośnika) rm -rf path_to_submodule, zrób to!

Następnie:

  1. Usuń odpowiednie linie z .gitmodulespliku. np. usuń te:

    [submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule

  2. Usuń odpowiednią sekcję z .git / config. np. usuń te:

    [submodule "path_to_submodule"] url = https://github.com/path_to_submodule

  3. rm -rf .git/modules/path_to_submodule

Następnie możesz w końcu:

git submodule add https://github.com/path_to_submodule


47
To było bardzo pomocne, ponieważ nie mogłem znaleźć nic, co działałoby. Kluczową różnicą w stosunku do innych sugestii był twój krok nr 3. Dzięki!
— AndroidDev

8
Kroki 2 i 3 były mi potrzebne.
— U007D,

8
Krok 3 był dla mnie potrzebny, ale dlaczego również istnieje tam podmoduł?
— Crt,

1
Dla mnie pominąłem kroki 1 i 2 (które już zawierały prawidłowe ustawienia), a krok 3 to dla mnie naprawił. (Zrobiłem już pierwszy krok git rmi rm -rfkroki.)
— Rock Lee

2
Nawet krok 3 nie działał dla mnie. Miałem tylko jeden podmoduł, więc usunąłem cały .git/modulesi skończyło się to działaniem.
— ach

47

wypróbowałem rozwiązanie jbmilgrom, a konkretnie próbowałem git rm --cachei to też nie działało dla mnie, ponieważ nie było katalogu / submodułu. Dla mnie zadziałało:

  1. rm -rf .git/modules/blah
  2. git submodule add git://path.to.new

Zrobiłem to po wypróbowaniu --forceciągu git submodulepoleceń i rmwszystkich innych katalogów, popycha do opanowania etc ... katalog nie istnieje i nie ma powodu, dla pamięci podręcznej. Okazuje się, .git/modulesże właśnie tam leżał ten błąd.


15

Być może usunąłeś go 'projets/fdf'z dysku, ale twoje repozytorium Git nadal go ma. Użyj, git rm -rf projets/fdfaby usunąć go z Gita, a następnie zatwierdzić zmiany. Następnie będziesz mógł dodać ten folder jako submoduł.


Udało się :) Dziękuję. Chyba popełniłem ten błąd.
— vmonteco

21
Powiedziano mi, że katalog nie istnieje, kiedy to robię. Wygląda na to, że oba istnieją i nie istnieją: /
— Nathan Hornby

41
@ tom-mcfarlin Na koniec Imanually usunąłem wiersze z .gitmodule i folder z .git / modules, a następnie pozwoliłem dodać nowy podmoduł. Może jest na to lepszy sposób, ale zabrakło mi czasu. Jeśli pójdziesz tą drogą, polecam zrobić dobrą kopię zapasową i proszę nie obwiniaj mnie, jeśli coś pójdzie nie tak. Powodzenia.
— sparklos

5
Dziękuję, znalazłem w innym poście, aby usunąć folder z .git / modules i to działało dla mnie. Ma to sens, ponieważ tym, co powiedział błąd, był konflikt ... Po prostu nie wiedziałem o tym folderze
— Tom McFarlin

10
@NathanHornby @Sparklos @TomMcFarlin - W nowszych wersjach git znajdziesz, że podmoduł git dodaje katalog do folderu .git. Na przykład, jeśli jesteś w katalogu /tmp/repo, a następnie uruchom git submodule add ../otherrepo.git, zobaczysz, że ten /tmp/repo/.git/modules/otherrepofolder istnieje. Taki był dla mnie problem. Ręcznie usunąłem ten folder z .git i wszystko działało.
— Alexander Bird

13

Jeśli już usunąłeś katalog submodułu, tak jak ja, postępuj zgodnie z pozostałymi instrukcjami jbmilgrom. Kluczem jest, rm -rf .git/modules/path_to_submoduleale śmiało i najpierw wykonaj kopię zapasową całego nadrzędnego katalogu repozytoriów .

Jeśli miałeś tylko jeden submoduł, po prostu usuń .gitmodules


2

Te dwa polecenia działają dla mnie.

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf

To. Wydaje się, że istnieją dwa sposoby tworzenia submodułów. W jednym z nich podfolder będzie miał tylko jeden plik .git, który po prostu wskazuje katalog w superprojekcie, zaczynając od .git/modules/. Tam jest folder przechowujący repozytorium dla submodułu. Usunięcie tego repozytorium naprawiło problem, a zaakceptowana odpowiedź nie.
— William Randokun
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.