Как переименовать репозиторий 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"]