Ответ 1
Вы можете просто отредактировать файл .gitmodules
, чтобы обновить URL-адрес, а затем запустите git submodule sync
, чтобы отразить это изменение в суперпроекте и вашей рабочей копии.
Я создал git-репозиторий с подмодулем в нем. Я могу сказать самому подмодулю изменить его путь к удаленному репозиторию, но я не уверен, как сказать родительскому репозиторию, как изменить путь к удаленному репозиторию для подмодуля.
Я не удивлюсь, если мне немного не повезет, и мне придется что-то делать вручную, поскольку даже удаление подмодулей не так просто.
Вы можете просто отредактировать файл .gitmodules
, чтобы обновить URL-адрес, а затем запустите git submodule sync
, чтобы отразить это изменение в суперпроекте и вашей рабочей копии.
Эти команды будут выполнять работу в командной строке без изменения каких-либо файлов в локальном репозитории
git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.Submod.branch Development
git submodule sync
git submodule update --init --recursive --remote
Пожалуйста, просмотрите блог для скриншотов: Изменение GIT подмодулей URL/Ветвь к другому URL/ветки того же репозитория
Проще говоря, вам просто нужно отредактировать файл .gitmodules, затем выполнить повторную синхронизацию и обновление:
Отредактируйте файл либо с помощью команды git, либо напрямую:
git config --file=.gitmodules -e
или просто:
vim .gitmodules
затем выполните повторную синхронизацию и обновление:
git submodule sync
git submodule update --init --recursive --remote
Что сработало для меня (в Windows, используя git версию 1.8.3.msysgit.0):
git submodule init
и git submodule update
После всего этого все будет в состоянии, которое я ожидал бы. Я полагаю, что другие пользователи репозитория будут иметь такую же боль, когда они придут к обновлению, - было бы разумно объяснить эти шаги в сообщении о фиксации!
На самом деле, патч был представлен в апреле 2009 года для уточнения роли gitmodule
.
Так что теперь документация по gitmodule еще не включает:
Файл
.gitmodules
, расположенный в каталоге верхнего уровня рабочего дерева git, представляет собой текстовый файл с синтаксисом, соответствующим требованиям -of linkgit: git-config 1.
[NEW]:
Поскольку этот файл управляется Git, он отслеживает +records подмодулей проекта.
Информация, хранящаяся в этом файле, используется в качестве подсказки для заполнения официальной версии записи, хранящейся в файле конфигурации проекта.
В файл конфигурации должны быть внесены изменения записи, специфичные для пользователя (например, для учета различий в URL-адресах подмодулей из-за сетевых ситуаций), а изменения записи, которые необходимо распространить (например, +due для перемещения источника подмодуля), должны быть внесены в этот файл файл.
Это в значительной степени подтверждает ответ Джима.
Если вы будете следовать этому руководству по git submodule, вы увидите, что вам нужен " git submodule init
", чтобы добавить URL репозитория подмодуля в .git/config.
" git submodule sync
" была добавлена в августе 2008 года именно для того, чтобы упростить эту задачу при изменении URL (особенно, если важно количество подмодулей).
Связать скрипт с этой командой достаточно просто:
module_list "[email protected]" |
while read mode sha1 stage path
do
name=$(module_name "$path")
url=$(git config -f .gitmodules --get submodule."$name".url)
if test -e "$path"/.git
then
(
unset GIT_DIR
cd "$path"
remote=$(get_default_remote)
say "Synchronizing submodule url for '$name'"
git config remote."$remote".url "$url"
)
fi
done
Цель остается: git config remote."$remote".url "$url"
Просто отредактируйте файл .git/config. Например; если у вас есть "общий" подмодуль, вы можете сделать это в супермодуле:
git config submodule.common.url /data/my_local_common
git config --file=.gitmodules -e
открывает редактор по умолчанию, в котором вы можете обновить путь