首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Git存储库中移动现有的Git子模块?

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

Stack Overflow用户
提问于 2011-01-05 21:24:29
回答 11查看 133.1K关注 0票数 424

我想在我的Git超级项目中更改Git子模块的目录名称。

假设我的.gitmodules文件中有以下条目:

代码语言:javascript
复制
[submodule ".emacs.d/vimpulse"]  
path = .emacs.d/vimpulse  
url = git://gitorious.org/vimpulse/vimpulse.git

要将.emacs.d/vimpulse目录移动到.emacs.d/vendor/vimpulse而不先删除它(解释了herehere),然后重新添加它,我必须键入什么内容。

Git真的需要子模块标记中的完整路径吗

代码语言:javascript
复制
[submodule ".emacs.d/vimpulse"]

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

代码语言:javascript
复制
[submodule "vimpulse"]
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2011-06-11 01:53:23

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

从git 1.8.5开始,git mv old/submod new/submod就像预期的那样工作,并为你做了所有的工作。您可能希望使用git 1.9.3或更高版本,因为它包含对子模块移动的修复。

该过程类似于删除子模块的过程(请参阅How do I remove a submodule?):

编辑目录并适当地更改子模块的路径,并将其放入需要git add .gitmodules.

  • If的索引中,创建子模块的新位置的父目录,将所有内容从旧目录转移到新目录,确保Git跟踪该目录并将其所有内容保存到git rm --cached old/parent/submodule.

  • Move .git/modules/new/parent/submodule.

  • Edit
  1. .gitmodules .git/modules/old/parent/submodule .git/modules/new/parent/config文件中。确保工作树项目指向新位置,因此在本例中应为worktree = ../../../../../new/parent/module
  2. 编辑文件new/parent/module/.git,确保其中的路径指向主项目.git文件夹中的正确新位置,因此在此示例中为gitdir: ../../../.git/modules/new/parent/submodule

git status的输出如下所示:在分支主机上#要提交的更改:#(使用"git reset HEAD ...“to unstage) ## modified:.gitmodules #已重命名:旧/父/子模块-> new/parent/submodule

  • Finally,提交更改。
票数 466
EN

Stack Overflow用户

发布于 2014-07-16 04:14:47

最现代的答案取自瓦洛瑞克上面的评论:

升级到Git 1.9.3 (或者2.18 if the submodule contains nested submodules)

  • git mv old/submod new/submod

  • Afterwards .gitmodules和子模块目录已经为提交准备好了(您可以用
  1. 验证这一点,用git commit验证更改,您就可以开始了!

完成了!

票数 274
EN

Stack Overflow用户

发布于 2012-04-28 20:22:31

在我的例子中,我想将一个子模块从一个目录移到一个子目录中,例如"AFNetworking“-> "ext/AFNetworking”。以下是我遵循的步骤:

将子模块的名称和路径从“.git/ "ext/AFNetworking"

  • Move /AFNetworking”改为".git/modules/ext/AFNetworking"

  • Move库,从"AFNetworking“改为”.git/

  • / .gitmodules /AFNetworking/“,并修复[core] worktree行。我的从../../../../ext/AFNetworking
  1. Edit改为../../../AFNetworking "ext/AFNetworking/.git“并修复了gitdir。我的已从../.git/modules/AFNetworking更改为../../git/modules/ext/AFNetworking
  2. git add .gitmodules
  3. git rm --cached AFNetworking
  4. git submodule add -f <url> ext/AFNetworking

最后,我在git状态中看到:

代码语言:javascript
复制
matt$ git status
# On branch ios-master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   .gitmodules
#   renamed:    AFNetworking -> ext/AFNetworking

就是这样。上面的示例没有更改目录深度,这对任务的复杂性有很大影响,也没有更改子模块的名称(这可能并不是真正必要的,但我这样做是为了与在该路径添加新模块时发生的情况保持一致。)

票数 57
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4604486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档