Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用子模块重命名git存储库?_Git_Repository_Git Submodules - Fatal编程技术网

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

如何使用子模块重命名git存储库?,git,repository,git-submodules,Git,Repository,Git Submodules,我在目录projects/myRepo中有一个包含子模块的git存储库,我想将目录重命名为projects/myRepo 根据问题,只需使用mv即可。但git一直告诉我,在一个有子模块的回购协议中 致命:不是git存储库:projects/myRepo/.git/path/to/submodule``` 即使对于git状态 子模块配置: [submodule "path/to/submodule"] path = path/to/submodule url = https:/

我在目录
projects/myRepo
中有一个包含子模块的git存储库,我想将目录重命名为
projects/myRepo

根据问题,只需使用
mv
即可。但git一直告诉我,在一个有子模块的回购协议中

致命:不是git存储库:projects/myRepo/.git/path/to/submodule```

即使对于
git状态

子模块配置:

[submodule "path/to/submodule"]  
   path = path/to/submodule  
   url = https://github.com/user/projectName.git  
不知怎的,子模块的“内部路径”没有得到更新?!有没有办法告诉git更新这些子模块路径

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

您可以在第一个子模块中比较/查找引用“
myRepo
”的任何文件。

您还可以比较两个子模块的内容(第一个是您试图重命名的子模块,第二个是您克隆的repo中包含的子模块)

更改项目目录后,我也遇到了相同的错误。我有一个iOS6Xcode4项目,但这不重要

对于每个子模块,您需要更改它认为自己所在的绝对路径。路径在该子模块的.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
    :更新
    工作树
    条目。它应该是从此配置文件到
    repo\u root/new/module/path
  • 转到
    repo_root
    并编辑
    new/module/path/.git
    ,将
    gitdir
    更改为从该文件到
    repo_root/.git/modules/new/module/path的相对路径
  • 更改主repo的
    .git/config
    :找到包含
    [子模块“旧/模块”]
    的行,并更新到
    [子模块“新/模块/路径”]

  • 这应该行得通。.gitmodule文件中有什么?@Weston,请查看我更新的问题。但即使我将此部分从.gitmodules文件中删除,也会出现相同的错误。当我将父目录重新命名为原始名称时,git不再抱怨。嗯。。我只是试着用一个子模块做一个测试回购。然后我克隆了它,初始化并更新了克隆中的子模块,然后用mv重命名了克隆。一切似乎都如预期的那样工作…?是的,我用一个新的克隆做了同样的尝试,也没有出现问题-这只是一个特殊的回购协议,另请注意这里的名称。。一、 不是OP,进行了上述测试。:-)但也许OP应该做同样的测试来验证他的安装。@Weston抱歉,我写这篇文章时还没有完全清醒;)我无法重现这个问题,所以我想我在重构项目时把事情搞砸了。如果我有时间的话,我会调查这起被破坏的回购协议,直到那时,我创建了一个新的克隆,它工作得很好。感谢您的帮助。我还必须在.git/modules/path/to/project/submodules/RestKit/config中更改我的工作树路径