Как переименовать репозиторий git с помощью подмодулей?
У меня есть репозиторий git с подмодулями в каталоге projects/myRepo
, и я хочу переименовать каталог в projects/my-repo
.
В соответствии с этим вопросом это можно просто сделать с помощью mv
. Но в репо с подмодулями git продолжает говорить мне
фатальный: не репозиторий git: projects/myRepo/.git/path/to/submodule```
даже для git status
.
Конфигурация подмодуля:
[submodule "path/to/submodule"]
path = path/to/submodule
url = https://github.com/user/projectName.git
Как-то "внутренний путь" для подмодуля не обновляется?! Есть ли способ сообщить git обновить эти пути подмодулей?
Ответы
Ответ 1
Поскольку Weston test (клон, инициализация и обновление подмодуля в клонированном репо) работал, как ожидалось, при переименовании каталога, включая указанный подмодуль, я подозреваю что-то должно было быть неправильным в самом подмодуле .git
в вашем исходном подмодуле Git repo.
Вы можете сравнить/посмотреть любой файл, ссылающийся на myRepo
'в этом первом подмодуле.
вы также можете сравнить содержимое двух подмодулей (первое, которое вы пытались переименовать, а второе - в репо, которое вы клонировали)
Ответ 2
Я испытал точно такое же поведение. Мне удалось исправить его, удалив каталоги с субмодулями, воссоздав их как пустые каталоги с правильным именем, а затем запустив git submodule update --init
, чтобы повторно инициализировать их. Все исправлено. Вероятно, некоторые проблемы с разрешениями (я ранее извлекал эти каталоги из резервной копии, а разрешения на них иногда были странными).
Ответ 3
У меня также была ошибка при изменении каталога проекта. У меня есть проект iOS 6 XCode 4, но это не имеет значения.
Для каждого подмодуля вам нужно изменить абсолютный путь, в котором он его принимает. Путь устанавливается в .git файле для этого подмодуля..git в подмодуле - это файл, а не каталог в стандартном каталоге git.
Для каждого подмодуля измените строку .gitdir в файле .git. Вот пример из моего проекта:
Файл:/path/to/project/submodules/RestKit/.git
До
gitdir:/path/to/project//. git/modules/subodules/RestKit
После
gitdir:/path/to/project//. git/modules/subodules/RestKit
Ответ 4
Сегодня у меня была такая же проблема, чтобы переименовать подмодуль, и, наконец, я исправил его, выполнив следующие шаги:
Предположим, что имя старого модуля old/module
, а новое - new/module/path
- в корне репо (
repo_root
), mv old/module new/module/path
- перейдите к
.git/modules
-
mv old/module new/module/path
(при необходимости создайте папку)
- change
new/module/name/config
: обновите запись worktree
. Это должен быть относительный путь от этого конфигурационного файла до repo_root/new/module/path
- перейдите к
repo_root
и отредактируйте new/module/path/.git
, измените gitdir
на относительный путь из этого файла на repo_root/.git/modules/new/module/path
- измените
.git/config
основного репо: найдите строку, содержащую [submodule "old/module"]
, и обновите до [submodule "new/module/path"]