如何在Git存储库中移动现有的Git子模块?
我想在我的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
而不.emacs.d/vendor/vimpulse
删除它(此处和此处解释),然后重新添加它。
Git是否真的需要子模块标签中的整个路径
[submodule ".emacs.d/vimpulse"]
或者是否也可以只存储子项目的名称?
[submodule "vimpulse"]
注意:正如评论中提到的,这个答案指的是旧版本git所需的步骤。 Git现在支持移动子模块:
由于git 1.8.5, git mv old/submod new/submod
按预期工作,并为您完成所有管道工作。 您可能想要使用git 1.9.3或更高版本,因为它包含子模块移动的修复程序。
这与您如何移除子模块相似(请参阅如何移除子模块?):
.gitmodules
并适当地更改子模块的路径,并使用git add .gitmodules
将其放入索引中。 mkdir -p new/parent
)。 mv -vi old/parent/submodule new/parent/submodule
)。 git add new/parent
)。 git rm --cached old/parent/submodule
删除旧目录。 .git/modules/old/parent/submodule
及其所有内容移至.git/modules/new/parent/submodule
。 .git/modules/new/parent/config
文件,确保worktree项指向新的位置,所以在这个例子中它应该是worktree = ../../../../../new/parent/module
。 通常应该有两个以上..
然后在那个地方的直接路径的目录。 编辑文件new/parent/module/.git
,确保其中的路径指向主项目.git
文件夹内的正确新位置,因此在本例中gitdir: ../../../.git/modules/new/parent/submodule
.git
gitdir: ../../../.git/modules/new/parent/submodule
。
git status
输出对我来说是这样的:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: .gitmodules
# renamed: old/parent/submodule -> new/parent/submodule
#
最后,提交更改。
最现代的答案取自Valloric上面的评论:
git mv old/submod new/submod
git status
来验证此目录)。 git commit
提交更改,并且您很好! 完成!
就我而言,我想将子模块从一个目录移动到子目录,例如“AFNetworking” - >“ext / AFNetworking”。 这些是我遵循的步骤:
[core] worktree
行。 从../../../AFNetworking
更改为../../../../ext/AFNetworking
gitdir
。 我从../.git/modules/AFNetworking
更改为../../git/modules/ext/AFNetworking
git add .gitmodules
git rm --cached AFNetworking
git 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
Et瞧。 上面的例子没有改变目录深度,这对任务的复杂性产生很大的影响,并且不会改变子模块的名称(这可能并不是必须的,但我确实与它一致如果我在该路径上添加了新模块,将会发生。)
链接地址: http://www.djcxy.com/p/16449.html上一篇: How do I move an existing Git submodule within a Git repository?
下一篇: No submodule mapping found in .gitmodule for a path that's not a submodule