我在目录projects/myRepo
中有一个包含子模块的git存储库,我想将目录重命名为projects/my-repo
。
根据this问题,可以使用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更新这些子模块路径?
答案 0 :(得分:3)
更改项目目录后,我也遇到了同样的错误。我有一个iOS 6 XCode 4项目,但这不重要。
对于每个子模块,您需要更改它认为它所在的绝对路径。路径在该子模块的.git文件中设置。子模块中的.git是文件,而不是标准git目录中的目录。
对于每个子模块,更改.git文件中的.gitdir行。这是我项目的一个例子:
文件:/path/to/project/submodules/RestKit/.git
<强>之前强> gitdir:/ path / to / project // .git / modules / submodules / RestKit
<强>后强> gitdir:/ path / to / project // .git / modules / submodules / RestKit
答案 1 :(得分:3)
我确实遇到了完全相同的行为。我设法通过删除带有子模块的目录来修复它,将它们重新创建为具有正确名称的空目录,然后运行git submodule update --init
以重新初始化它们。全部修复了。可能是一些权限问题(我之前从备份中检索了这些目录,对它们的权限有时很奇怪)。
答案 2 :(得分:0)
由于Weston的测试(克隆,回购和更新克隆仓库中的子模块)在重命名包含所述子模块的目录时按预期工作,我怀疑子模块中必定存在错误{{1在你原来的Git repo子模块中。
您可以在第一个子模块中比较/查找引用“.git
”的任何文件
您还可以比较两个子模块的内容(您尝试重命名的第一个子模块,以及您克隆的存储库中包含的第二个子模块)
答案 3 :(得分:0)
今天我有同样的问题重命名子模块,最后我通过使用以下步骤修复它:
假设旧模块名称为old/module
,新模块名称为new/module/path
repo_root
),mv old/module new/module/path
.git/modules
mv old/module new/module/path
(必要时先创建文件夹)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"]