[英]How can I rename a git repository with submodules?
我在目录projects/myRepo
有一个projects/myRepo
模块的git存储库,我想将目录重命名为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更新这些子模块路径?
更改项目目录后,我也遇到了同样的错误。 我有一个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
我确实遇到了完全相同的行为。 我设法通过删除带有子模块的目录来修复它,将它们重新创建为具有正确名称的空目录,然后运行git submodule update --init
以重新初始化它们。 全部修复了。 可能是一些权限问题(我之前从备份中检索了这些目录,对它们的权限有时很奇怪)。
今天我有同样的问题重命名子模块,最后我通过使用以下步骤修复它:
假设旧模块名称为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
repo_root
并编辑new/module/path/.git
,将gitdir
更改为gitdir
文件到repo_root/.git/modules/new/module/path
.git/config
:找到包含[submodule "old/module"]
并更新到[submodule "new/module/path"]
由于Weston的测试(克隆,初始化和更新克隆仓库中的子模块)在重命名包含所述子模块的目录时按预期工作,我怀疑在原始Git repo子模块.git
模块.git
本身一定有问题。
您可以在第一myRepo
模块中比较/查找引用“ myRepo
”的任何文件。
您还可以比较两个子模块的内容(您尝试重命名的第一个子模块,以及您克隆的存储库中包含的第二个子模块)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.