Jak zamienić podmoduł git na inne repozytorium git?
W szczególności mam podmoduł:
- znajduje się w
./ExternalFrameworks/TestFramework
tych punktach do repozytorium git[email protected]:userA/TestFramework.git
- Chciałbym, żeby to teraz wskazywało
[email protected]:userB/TestFramework.git
.
Problem w tym, że kiedy usuwam podmoduł metodą opisaną tutaj , to ponownie go dodam poleceniem
git submodule add [email protected]:userB/TestFramework.git
Otrzymuję ten błąd:
A git directory for 'ExternalFrameworks/TestFramework' is found locally with remote(s):
origin [email protected]:userA/TestFramework.git
If you want to reuse this local git directory instead of cloning again from
[email protected]:userB/TestFramework.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
git
git-submodules
joseph.hainline
źródło
źródło
Odpowiedzi:
Jeśli lokalizacja (adres URL) podmodułu uległa zmianie, możesz po prostu:
.gitmodule
plik, aby używał nowego adresu URLrm -rf .git/modules/<submodule>
rm -rf <submodule>
git submodule sync
git submodule update
Więcej informacji można znaleźć w innym miejscu:
źródło
rm -rf .git/modules/<submodule>
zanim to zadziałało.git submodule sync
porm -rf .git/modules/<submodule>
dajefatal: Not a git repository: ../.git/modules/<submodule>
. Jakieś wskazówki? Początkowo utworzyłemgit submodule add https://<submodule-url>
Po pierwsze, usunąć bieżący submodule z metody już wspomniano tutaj , co ja w tym dla wygody:
.gitmodules
pliku.git/config
git rm --cached path_to_submodule
(bez końcowego ukośnika)Teraz dodaj nowy moduł podrzędny z
--name
flagą. To da gitowi alternatywną nazwę do odniesienia się.git/config
do podmodułu, aby zdekonfliktować z podmodułem, który istniał w przeszłości, nad którym nadal chcesz pracować w swojej wcześniejszej historii.Więc wpisz:
a moduł podrzędny zostanie załadowany zgodnie z oczekiwaniami.
źródło
.git/modules/<path_to_submodule>
.--name
. Nie byłem świadomy problemów z tym związanych i nie mogłem wymienić submodułu, dopóki nie skorzystałem z tej opcji (dzięki Twojej odpowiedzi).git submodule add --name old-name-to-keep [email protected]:userB/new-repository.git old-name-to-keep
Te polecenia wykonają pracę w wierszu polecenia bez zmiany jakichkolwiek plików w repozytorium lokalnym.
źródło
To, co mnie naprawiło, było w katalogu głównym repozytorium git (nie w module podrzędnym), uruchom
Wtedy powinno być możliwe normalne dodawanie.
źródło
Najłatwiejszy sposób, jaki znalazłem, to:
Nie podobał mi się pomysł
.gitmodules
ręcznej modyfikacji mojego pliku. Napisałem też o tym mały wpis na blogu .źródło
Jeśli chcesz zmienić zdalny adres URL tylko dla tego klonu :
git config submodule."$submodule_name".url "$new_url"
Nie wpłynie to na
.gitmodules
plik w projekcie nadrzędnym, więc nie będzie propagowany do innych programistów.Jest to opisane jako „specyficzne zmiany rekordu użytkownika” tutaj .
Nie rób uruchamiaj,
git submodule sync
ponieważ spowoduje to ponowne przywrócenie domyślnego adresu URL.źródło