繁体   English   中英

如何使用子模块重命名git存储库?

[英]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

  1. 在repo的根目录( 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的相对repo_root/new/module/path
  3. 转到repo_root并编辑new/module/path/.git ,将gitdir更改为gitdir文件到repo_root/.git/modules/new/module/path
  4. 更改主.git/config :找到包含[submodule "old/module"]并更新到[submodule "new/module/path"]

由于Weston的测试(克隆,初始化和更新克隆仓库中的子模块)在重命名包含所述子模块的目录时按预期工作,我怀疑在原始Git repo子模块.git模块.git本身一定有问题。

您可以在第一myRepo模块中比较/查找引用“ myRepo ”的任何文件。
您还可以比较两个子模块的内容(您尝试重命名的第一个子模块,以及您克隆的存储库中包含的第二个子模块)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM