微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Git 存储库中移动现有的 Git 子模块?

如何解决如何在 Git 存储库中移动现有的 Git 子模块?

正如评论中提到的,这个答案是指旧版本的 git 所需的步骤。Git 现在原生支持移动子模块:

从 git 1.8.5 开始,git mv old/submod new/submod按预期工作并为您完成所有工作。您可能想要使用 git 1.9.3 或更高版本,因为它包含子模块移动的修复。


该过程类似于您如何删除子模块(请参阅如何删除子模块?):

  1. 适当编辑.gitmodules和更改子模块的路径,并将其放在索引中git add .gitmodules
  2. 如果需要,创建子模块新位置的父目录 ( mkdir -p new/parent)。
  3. 将所有内容从旧目录移动到新目录 ( mv -vi old/parent/submodule new/parent/submodule)。
  4. 确保 Git 跟踪此目录 ( git add new/parent)。
  5. 用 . 删除旧目录git rm --cached old/parent/submodule
  6. 将目录.git/modules/old/parent/submodule及其所有内容移动到.git/modules/new/parent/submodule.
  7. 编辑.git/modules/new/parent/config文件,确保工作树项目指向新的位置,所以在这个例子中它应该是worktree = ../../../../../new/parent/module. 通常,该位置的直接路径中应该有两个以上..的目录。
  8. 编辑文件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
#
  1. 最后,提交更改。

解决方法

我想在我的 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而不先删除它(解释
herehere)然后重新添加它。

Git真的需要子模块标签中的整个路径吗

[submodule ".emacs.d/vimpulse"]

或者是否也可以只存储子项目的名称?

[submodule "vimpulse"]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。