我从没想过重命名 git repo,更具体地说,它是包含项目的顶级文件夹,会如此困难。是的,该项目包含一些子模块,但它是需要重命名的顶级文件夹,而不是子模块文件夹。Git 似乎在其子模块机制中记录了一些奇怪的绝对路径。
让我们假设
- 您的所有项目都位于
/tmp
. - 你有一个
proj_master
和proj_mod
。 - 您克隆
porj_master
为proj_ALL
然后克隆prom_mod
为其中的子模块。 - 你重命名
proj_ALL
为proj_onebillion
. 然后黑魔法发生了。
以下步骤将重现我提到的问题。我使用的 git 版本是:
$ git --version
git version 1.7.9.5
初始化
proj_master
.$ cd /tmp $ mkdir proj_master; cd proj_master $ git init . $ touch README $ git add .; git commit -m "hello proj_master"
初始化
proj_mod
.$ cd /tmp $ mkdir proj_mod; cd proj_mod $ git init . $ touch README $ git add .; git commit -m "hello proj_mod"
克隆
proj_master
为proj_ALL
和克隆proj_mod
为子模块。$ 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.
重命名
proj_ALL
为proj_onebillion
. 遇到致命错误。$ 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 知道顶级 repo 文件夹范围之外的东西。
而已。我再重复一次,我重命名顶级项目文件夹,而不是子模块文件夹。我检查了schmuck 的问题,它试图重命名子模块文件夹,因此似乎对我的问题没有太大帮助。
如果我错过了以前应该阅读的内容,我深表歉意。对所有人来说,欢迎任何建议。