Как изменить удаленный репозиторий для подмодуля git?

Я создал git-репозиторий с подмодулем в нем. Я могу сказать самому подмодулю изменить его путь к удаленному репозиторию, но я не уверен, как сказать родительскому репозиторию, как изменить путь к удаленному репозиторию для подмодуля.

Я не удивлюсь, если мне немного не повезет, и мне придется что-то делать вручную, поскольку даже удаление подмодулей не так просто.

Ответ 1

Вы можете просто отредактировать файл .gitmodules, чтобы обновить URL-адрес, а затем запустите git submodule sync, чтобы отразить это изменение в суперпроекте и вашей рабочей копии.

Ответ 2

Эти команды будут выполнять работу в командной строке без изменения каких-либо файлов в локальном репозитории

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/ветки того же репозитория

Ответ 3

Проще говоря, вам просто нужно отредактировать файл .gitmodules, затем выполнить повторную синхронизацию и обновление:

Отредактируйте файл либо с помощью команды git, либо напрямую:

git config --file=.gitmodules -e

или просто:

vim .gitmodules

затем выполните повторную синхронизацию и обновление:

git submodule sync
git submodule update --init --recursive --remote

Ответ 4

Что сработало для меня (в Windows, используя git версию 1.8.3.msysgit.0):

  • Обновить .gitmodules с пути к новому репозиторию
  • Удалите соответствующую строку из файла .git/config
  • Удалить соответствующий каталог в каталоге ".git/modules/external"
  • Удалите выделенный файл подмодуля (не уверен, если это необходимо)
  • Запустите git submodule init и git submodule update
  • Удостоверьтесь, что выложенный подмодуль находится в правильной фиксации, и зафиксируйте это, так как вероятность того, что хеш будет отличаться

После всего этого все будет в состоянии, которое я ожидал бы. Я полагаю, что другие пользователи репозитория будут иметь такую ​​же боль, когда они придут к обновлению, - было бы разумно объяснить эти шаги в сообщении о фиксации!

Ответ 5

На самом деле, патч был представлен в апреле 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"

Ответ 6

Просто отредактируйте файл .git/config. Например; если у вас есть "общий" подмодуль, вы можете сделать это в супермодуле:

git config submodule.common.url /data/my_local_common

Ответ 7

git config --file=.gitmodules -e открывает редактор по умолчанию, в котором вы можете обновить путь