Как заменить подмодуль git на другое репо?
Как заменить подмодуль git на другой git repo?
В частности, у меня есть подмодуль:
- расположенный в
./ExternalFrameworks/TestFramework
, который указывает на git repo [email protected]:userA/TestFramework.git
- Теперь я хотел бы указать на
[email protected]:userB/TestFramework.git
.
Проблема заключается в том, что когда я удаляю подмодуль с описанным способом здесь, затем повторно добавьте его с помощью команды
git submodule add [email protected]:userB/TestFramework.git
Я получаю эту ошибку:
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.
Ответы
Ответ 1
Если местоположение (URL) подмодуля изменилось, то вы можете просто:
- Измените свой файл
.gitmodule
чтобы использовать новый URL - Удалите папку субмодуля в
rm -rf.git/modules/<submodule>
- Удалите папку субмодуля в рабочем каталоге
rm -rf <submodule>
- Запустите
git submodule sync
- Запустите
git submodule update
Более полную информацию можно найти в другом месте:
Ответ 2
Сначала удалите текущий подмодуль с уже упомянутым методом здесь, который я включил для удобства:
- Удалить соответствующий раздел из файла
.gitmodules
- Удалить соответствующий раздел из
.git/config
- Запустить
git rm --cached path_to_submodule
(без косой черты)
- Зафиксировать и удалить файлы без поддерева подкачки
Теперь добавьте новый подмодуль с флагом --name
. Это даст git альтернативное имя для ссылки в .git/config
для подмодуля, чтобы деконфликт с подмодулем, который был там исторически, который вы все еще хотите работать в своей предыдущей истории.
Итак, тип:
git submodule add --name UpdatedTestFramework [email protected]:userB/TestFramework.git
и вы получите подмодуль, загруженный на путь, который вы ожидаете.
Ответ 3
Эти команды будут выполнять работу в командной строке без изменения каких-либо файлов в локальном репозитории.
git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.Submod.branch Dev
git submodule sync
git submodule update --init --recursive --remote
Ответ 4
То, что исправлено для меня, было в корне вашего репозитория git (а не подмодуля), запустите
rm -rf .git/modules/yourmodule
Затем вы сможете добавить как обычно.
Ответ 5
Самый простой способ найти это:
git rm -rf [submodule_dir]
git submodule add --name new_[submodule_name] [new_submodule_url] [submodule_dir]
Мне не понравилась идея изменить мой .gitmodules
вручную. Я также написал маленький блог-блог об этом.
Ответ 6
Если вы хотите изменить удаленный URL только для этого клона:
git config submodule."$submodule_name".url "$new_url"
Это не повлияет на файл .gitmodules
в родительском проекте, поэтому он не будет передаваться другим разработчикам.
Это описано как "пользовательские изменения записи" здесь.
Не запустите git submodule sync
, так как это будет reset для URL по умолчанию.