Как заменить подмодуль git другим репозиторием git?
В частности, у меня есть подмодуль:
- расположенный в
./ExternalFrameworks/TestFramework
этом месте, указывает на репозиторий gitgit@github.com:userA/TestFramework.git
- Я хочу сейчас указать на это
git@github.com:userB/TestFramework.git
.
Проблема в том, что когда я удаляю подмодуль описанным здесь методом , затем снова добавляю его с помощью команды
git submodule add git@github.com:userB/TestFramework.git
Я получаю такую ошибку:
A git directory for 'ExternalFrameworks/TestFramework' is found locally with remote(s):
origin git@github.com:userA/TestFramework.git
If you want to reuse this local git directory instead of cloning again from
git@github.com: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
источник
источник
Ответы:
Если расположение (URL) подмодуля изменилось, вы можете просто:
.gitmodule
файл, чтобы использовать новый URLrm -rf .git/modules/<submodule>
rm -rf <submodule>
git submodule sync
git submodule update
Более полную информацию можно найти в другом месте:
источник
rm -rf .git/modules/<submodule>
прежде чем это сработало для меня.git submodule sync
после того, какrm -rf .git/modules/<submodule>
даетfatal: Not a git repository: ../.git/modules/<submodule>
. Какие-нибудь советы? Первоначально я создал подмодульgit submodule add https://<submodule-url>
в соответствии с документами git ...Сначала удалите текущий подмодуль с помощью уже упомянутого здесь метода , который я включил для удобства:
.gitmodules
файла.git/config
git rm --cached path_to_submodule
(без косой черты)Теперь добавьте новый подмодуль с
--name
флагом. Это даст git альтернативное имя для ссылки.git/config
на подмодуль, чтобы разрешить конфликт с подмодулем, который был там исторически, который вы все еще хотите использовать в своей предыдущей истории.Так введите:
и вы загрузите подмодуль по ожидаемому пути.
источник
.git/modules/<path_to_submodule>
.--name
. Мне не было известно о проблемах, связанных с этим, и я не мог заменить подмодуль, пока не использовал эту опцию (спасибо за ваш ответ).git submodule add --name old-name-to-keep git@github.com:userB/new-repository.git old-name-to-keep
Эти команды будут выполнять работу в командной строке без изменения файлов в локальном репозитории.
источник
Для меня это было исправлено в корне вашего репозитория git (а не в подмодуле), запустите
Тогда вы сможете добавить как обычно.
источник
Самый простой способ, который я нашел, - это:
Мне не понравилась идея модифицировать мой
.gitmodules
файл вручную. Я также написал об этом небольшой пост в блоге .источник
Если вы хотите изменить удаленный URL только для этого клона :
git config submodule."$submodule_name".url "$new_url"
Это не повлияет на
.gitmodules
файл в родительском проекте, поэтому он не будет передан другим разработчикам.Это описывается как «пользователь конкретной записи изменений» здесь .
Не запускайте, так
git submodule sync
как это снова сбросит URL-адрес по умолчанию.источник