我想在我的 Git super 项目中更改 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"]
最佳答案
较新版本的 git
Git 现在原生支持移动子模块:
Since git 1.8.5,
git mv old/submod new/submod
works as expected and does all the plumbing for you. You might want to use git 1.9.3 or newer, because it includes fixes for submodule moving.
旧版本的 git
如评论中所述,此答案指的是旧版本 git 所需的步骤。
该过程类似于您删除子模块的方式(参见 How do I remove a submodule? ):
编辑
.gitmodules
并适当更改子模块的路径,并使用git add .gitmodules
将其放入索引中。如果需要,创建子模块新位置的父目录 (
mkdir -p new/parent
)。将所有内容从旧目录移动到新目录 (
mv -vi old/parent/submodule new/parent/submodule
)。确保 Git 跟踪此目录 (
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 status
输出对我来说是这样的:# On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: .gitmodules # renamed: old/parent/submodule -> new/parent/submodule #
最后,提交更改。
关于git - 如何在 Git 存储库中移动现有的 Git 子模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4604486/