Как я могу переименовать репозиторий git с помощью подмодулей? - PullRequest
11 голосов
/ 26 марта 2012

У меня есть git-репозиторий с подмодулями в каталоге projects/myRepo, и я хочу переименовать каталог в projects/my-repo.

Согласно этому вопросу, его можно просто сделать с помощью mv. Но в репо с подмодулями git постоянно говорит мне

fatal: Не 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 обновить эти пути субмодуля?

Ответы [ 4 ]

3 голосов
/ 15 октября 2012

У меня тоже была такая же ошибка после смены директории моего проекта. У меня есть проект iOS 6 XCode 4, но это не должно иметь значения.

Для каждого подмодуля вам нужно изменить абсолютный путь, в котором он считает, что он находится. Путь указан в файле .git для этого подмодуля. .git в подмодуле - это файл , а не каталог в стандартном каталоге git.

Для каждого подмодуля измените строку .gitdir в файле .git. Вот пример из моего проекта:

Файл: /path/to/project/submodules/RestKit/.git

До gitdir: /path/to/project//.git/modules/submodules/RestKit

* После 1018 * gitdir: /path/to/project//.git/modules/submodules/RestKit

3 голосов
/ 15 августа 2014

У меня было точно такое же поведение. Мне удалось это исправить, удалив каталоги с подмодулями, воссоздав их как пустые каталоги с правильным именем и затем запустив git submodule update --init для их повторной инициализации. Все исправлено сейчас. Вероятно, некоторые проблемы с разрешениями (ранее я извлекал эти каталоги из резервной копии, а разрешения для них иногда странные).

0 голосов
/ 26 сентября 2017

Сегодня у меня возникла та же проблема с переименованием подмодуля, и, наконец, я исправил его, выполнив следующие шаги:

Предположим, старое имя модуля old/module, а новое - new/module/path

  1. в корне репо (repo_root), mv old/module new/module/path
  2. перейти к .git/modules
    1. mv old/module new/module/path (при необходимости сначала создайте папку)
    2. изменить new/module/name/config: обновить запись worktree.Это должен быть относительный путь от этого файла конфигурации к repo_root/new/module/path
  3. , перейдите к repo_root и отредактируйте new/module/path/.git, измените gitdir на относительный путь из этого файла кrepo_root/.git/modules/new/module/path
  4. изменить .git/config мастер репо: найти строку, содержащую [submodule "old/module"] и обновить до [submodule "new/module/path"]
0 голосов
/ 27 марта 2012

Поскольку тест Weston (клонирование, инициализация и обновление подмодуля в клонированном репо) работал должным образом при переименовании каталога, включая указанный подмодуль, я подозреваю, что в подмодуле что-то не так .git в исходном подмодуле Git-репо.

Вы можете сравнить / найти любой файл, ссылающийся на 'myRepo' в этом первом подмодуле.
Вы также можете сравнить содержимое двух подмодулей (первый, который вы пытались переименовать, и второй, включенный в репозиторий, который вы клонировали)

...