Właściwie próbuję nauczyć się korzystać z git, w tym git submodule
podkomend. 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: //[email protected]: 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 sync
lub 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://[email protected]: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.
źródło
/Travail/.git/modules/projets/
i znalazłemfdf
katalog. Wydaje się, że nie dotyczy to działającego drzewa, ale starszych zatwierdzeń. Czy to może wygenerować problem?Odpowiedzi:
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:
Usuń odpowiednie linie z
.gitmodules
pliku. np. usuń te:[submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule
Usuń odpowiednią sekcję z .git / config. np. usuń te:
[submodule "path_to_submodule"] url = https://github.com/path_to_submodule
rm -rf .git/modules/path_to_submodule
Następnie możesz w końcu:
git submodule add https://github.com/path_to_submodule
źródło
git rm
irm -rf
kroki.).git/modules
i skończyło się to działaniem.wypróbowałem rozwiązanie jbmilgrom, a konkretnie próbowałem
git rm --cache
i to też nie działało dla mnie, ponieważ nie było katalogu / submodułu. Dla mnie zadziałało:rm -rf .git/modules/blah
git submodule add git://path.to.new
Zrobiłem to po wypróbowaniu
--force
ciągugit submodule
poleceń irm
wszystkich 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.źródło
Być może usunąłeś go
'projets/fdf'
z dysku, ale twoje repozytorium Git nadal go ma. Użyj,git rm -rf projets/fdf
aby usunąć go z Gita, a następnie zatwierdzić zmiany. Następnie będziesz mógł dodać ten folder jako submoduł.źródło
/tmp/repo
, a następnie uruchomgit submodule add ../otherrepo.git
, zobaczysz, że ten/tmp/repo/.git/modules/otherrepo
folder istnieje. Taki był dla mnie problem. Ręcznie usunąłem ten folder z .git i wszystko działało.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_submodule
ale ś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
źródło
Te dwa polecenia działają dla mnie.
źródło
.git/modules/
. Tam jest folder przechowujący repozytorium dla submodułu. Usunięcie tego repozytorium naprawiło problem, a zaakceptowana odpowiedź nie.