从特定分支中删除 git 子模块

umbe1987

我正在将我的 JS 应用程序移植到现代 E6 模块。我的应用程序存储在 git repo 中。在 repo 中有一个子模块。

我创建了另一个分支来做我需要做的事情,但我想删除这个特定分支中的子模块。

原因是我必须npm install将子模块中的应用程序作为一个包,而不是像在 master 分支中那样以“经典子模块”方式使用它。

阅读这个答案我认为这就像结帐到新分支一样简单,修改 .gitmodules 文件,不包括子模块并删除子模块文件夹本身。

但是,当我这样做时,我结帐到 master 并且似乎那里也缺少子模块,这将是一个巨大的错误。在检查这是否重要之前,我没有进行更改。

那么,我如何摆脱新分支中的子模块以开始在其中工作,而不会在我的主分支中丢失它?

编辑 1

我在博士评论后再次尝试。我在需要删除 gitmodule 的分支中。我编辑了.gitmodules文件以删除我需要删除的子模块,然后尝试删除子模块,git rm -r <my_submodule>但我收到fatal: Please, stage your changes to .gitmodules or stash them to proceed消息。

所以我隐藏了我的更改并删除了子模块。然后我可以结帐到主分支,并且子模块文件夹在那里(根据我的需要)。

另外,master.gitmodules仍然显示了我从另一个分支中删除的子模块,这是我的目标。

所以现在我有一个带有子模块的 master 分支,而没有它的“dev”分支,我可以在这里使用 npm 安装。所以我想我搞砸了一些东西,我链接答案是正确的。将接受博士回答,因为它是正确的。

最后,由于我有 git 版本 2.7.4 并且无法运行git checkout --recurse-submodules master,我添加了这个 GIT PPA(我使用的是 Ubuntu),因为操作系统包管理器中的版本较旧,将 git 升级到 2.19,运行命令,一切正常.

我使用的命令是:

sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
apt-get install --only-upgrade git

编辑 2

奇怪的是,我刚刚注意到当我切换到“dev”分支时,我删除的子模块的文件夹仍然存在,尽管 .gitmodules 没有在列表中显示子模块。另外,在结帐到这个分支时,我收到了消息warning: unable to rmdir 'ol/ol-layerswitcher': Directory not empty

我想现在这个文件夹不再被视为子模块,但它仍然存在。如果可能的话,我怎么能从 dev 分支而不是从 master 分支(这是我最初的问题)摆脱它?

最终答案

好的回答我自己。我只需要在没有git rm. 现在:

  1. dev 分支没有什么可提交的
  2. 子模块文件夹不存在
  3. 当我切换到它时,我没有收到任何消息

最终答案不正确!

只是想补充一点,删除文件会使它们也在主分支中消失。显然,我唯一能做的就是使用 devb 牧场中的子模块文件夹,但只是“忽略”它们,.gitignore以免将它们推送到我的远程 dev 分支。

博士

你的问题缺少一些重要的细节,所以让我猜猜缺少的部分。您已经创建了一个分支,编辑了.gitmodules(从中删除了子模块)并删除了子模块的目录。您在.gitmodules.

我相信你承诺了,.gitmodules因为没有它你就不能结帐主分支。

然后你查了一下master,发现submodule目录不见了,对吧?那问题的核心问题是什么?

不幸的是,这就是子模块的工作方式。Git 不会在结帐时自动更新子模块。git checkout --recurse-submodules master如果您的 git 足够新鲜,您应该使用它。

或者你需要开发一个 post-checkout 钩子,在签出一个分支后更新子模块请参阅详细示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章