如何在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
