如何解决如何在 Git 存储库中移动现有的 Git 子模块?
正如评论中提到的,这个答案是指旧版本的 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 跟踪此目录 (
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 = ../../../../../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 子模块的目录名称。
假设我的.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"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。