我想在我的Git超级项目中更改Git子模块的目录名称。
假设我的.gitmodules文件中有以下条目:
[submodule ".emacs.d/vimpulse"]
path = .emacs.d/vimpulse
url = git://gitorious.org/vimpulse/vimpulse.git要将.emacs.d/vimpulse目录移动到.emacs.d/vendor/vimpulse而不先删除它(解释了here和here),然后重新添加它,我必须键入什么内容。
Git真的需要子模块标记中的完整路径吗
[submodule ".emacs.d/vimpulse"]或者也可以只存储子项目的名称?
[submodule "vimpulse"]发布于 2011-06-11 01:53:23
注意:正如评论中提到的,这个答案指的是旧版本的git所需的步骤。Git现在具有对移动子模块的本机支持:
从git 1.8.5开始,git mv old/submod new/submod就像预期的那样工作,并为你做了所有的工作。您可能希望使用git 1.9.3或更高版本,因为它包含对子模块移动的修复。
该过程类似于删除子模块的过程(请参阅How do I remove a submodule?):
编辑目录并适当地更改子模块的路径,并将其放入需要git add .gitmodules.
git rm --cached old/parent/submodule.
.git/modules/new/parent/submodule.
.gitmodules .git/modules/old/parent/submodule .git/modules/new/parent/config文件中。确保工作树项目指向新位置,因此在本例中应为worktree = ../../../../../new/parent/module。new/parent/module/.git,确保其中的路径指向主项目.git文件夹中的正确新位置,因此在此示例中为gitdir: ../../../.git/modules/new/parent/submodule。git status的输出如下所示:在分支主机上#要提交的更改:#(使用"git reset HEAD ...“to unstage) ## modified:.gitmodules #已重命名:旧/父/子模块-> new/parent/submodule
发布于 2014-07-16 04:14:47
最现代的答案取自瓦洛瑞克上面的评论:
升级到Git 1.9.3 (或者2.18 if the submodule contains nested submodules)
git mv old/submod new/submod
git commit验证更改,您就可以开始了!完成了!
发布于 2012-04-28 20:22:31
在我的例子中,我想将一个子模块从一个目录移到一个子目录中,例如"AFNetworking“-> "ext/AFNetworking”。以下是我遵循的步骤:
将子模块的名称和路径从“.git/ "ext/AFNetworking"
[core] worktree行。我的从../../../../ext/AFNetworking../../../AFNetworking "ext/AFNetworking/.git“并修复了gitdir。我的已从../.git/modules/AFNetworking更改为../../git/modules/ext/AFNetworkinggit add .gitmodulesgit rm --cached AFNetworkinggit submodule add -f <url> ext/AFNetworking最后,我在git状态中看到:
matt$ git status
# On branch ios-master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: .gitmodules
# renamed: AFNetworking -> ext/AFNetworking就是这样。上面的示例没有更改目录深度,这对任务的复杂性有很大影响,也没有更改子模块的名称(这可能并不是真正必要的,但我这样做是为了与在该路径添加新模块时发生的情况保持一致。)
https://stackoverflow.com/questions/4604486
复制相似问题