Как переименовать git-репо (проект), который содержит подмодули в своих подкаталогах
Я никогда не ожидал, что переименование git-репо, которое, в частности, является папкой верхнего уровня, в которой хранится проект, было бы так сложно Да, проект содержит несколько подмодулей, но этоtop-level folder что нужно переименовать, а неsubmodule folder, Git, кажется, записывает некоторые странныеabsolute paths в его подмодульных механизмах.
Предположим, что
All your projects locate in/tmp
.
You've got a proj_master
and proj_mod
.
You clone porj_master
as proj_ALL
then clone prom_mod
as a submodule in it.
You rename proj_ALL
to proj_onebillion
. Then black magic happens.
Следующие шаги воспроизведут проблему, о которой я говорил. Версия git, которую я использую:
$ git --version
git version 1.7.9.5
Initialize proj_master
.
$ cd /tmp
$ mkdir proj_master; cd proj_master
$ git init .
$ touch README
$ git add .; git commit -m "hello proj_master"
Initialize proj_mod
.
$ cd /tmp
$ mkdir proj_mod; cd proj_mod
$ git init .
$ touch README
$ git add .; git commit -m "hello proj_mod"
Clone proj_master
as proj_ALL
and clone proj_mod
as a submodule.
$ cd /tmp
$ git clone proj_master proj_ALL
$ cd proj_ALL
$ git submodule add /tmp/proj_mod ./mod
$ git add .; git commit -m "hello proj_ALL"
$ git status % Everything is OK.
Rename proj_ALL
to proj_onebillion
. Encounter a fatal error.
$ cd /tmp
$ mv proj_ALL proj_onebillion
$ cd proj_onebillion
$ git status
fatal: Not a git repository: /tmp/proj_ALL/.git/modules/mod
Стоит отметить, что.git
файл в каталоге подмодулей.
$ cat /tmp/proj_ALL/mod/.git
gitdir: /tmp/proj_ALL/.git/modules/mod
Да, абсолютный путь. Впервые я понимаю, что git знает о чем-то, выходящем за рамки папки репо верхнего уровня.
Вот и все. Я повторяю это еще раз, когда я переименовываю папку проекта верхнего уровня, а не папку подмодуля. я проверяювопрос чмо, который пытался переименовать папку submodule, поэтому, кажется, не так полезно для моей проблемы.
Если я пропущу что-то, что должно было быть прочитано раньше, я прошу прощения. Для всех парней, любой совет приветствуется.