从特定分支中删除git子模块
我正在将我的JS应用程序移植到现代E6模块。我的应用程序存储在git repo中。回购协议中有一个子模块 我创建了另一个分支来做我需要做的事情,但是我想删除这个特定分支中的子模块 原因是我必须从特定分支中删除git子模块,git,npm,git-submodules,Git,Npm,Git Submodules,我正在将我的JS应用程序移植到现代E6模块。我的应用程序存储在git repo中。回购协议中有一个子模块 我创建了另一个分支来做我需要做的事情,但是我想删除这个特定分支中的子模块 原因是我必须npm将应用程序作为一个包安装在子模块中,而不是像在master branch中那样以“经典子模块”的方式使用它 阅读本文时,我认为这就像签出新分支一样简单,修改.gitmodules文件(不包括子模块)并删除子模块文件夹本身 然而,当我这样做的时候,我签出到master,看起来子模块也丢失了,这将是一个巨
npm将应用程序作为一个包安装在子模块中,而不是像在master branch中那样以“经典子模块”的方式使用它
阅读本文时,我认为这就像签出新分支一样简单,修改.gitmodules文件(不包括子模块)并删除子模块文件夹本身
然而,当我这样做的时候,我签出到master,看起来子模块也丢失了,这将是一个巨大的错误。在检查这是否重要之前,我没有阶段性地进行更改
那么,我如何摆脱新分支中的子模块,开始在其中工作,而不丢失主分支中的子模块呢
编辑1
我在博士评论之后再次尝试。我在需要删除gitmodule的分支中。我编辑了.gitmodules
文件以删除我需要删除的子模块,然后尝试使用git rm-r
删除子模块,但我收到致命消息:请将您的更改转移到.gitmodules,或将其隐藏以继续
消息
所以我隐藏了我的更改并删除了子模块。然后,我可以签出到主分支,子模块文件夹就在那里(根据我的需要)
另外,主.gitmodules
仍然显示我从另一个分支中删除的子模块,这是我的目标
现在我有了一个带子模块的主分支,“dev”分支没有它,我可以在这里用npm安装。所以我猜我把事情搞砸了,结果是对的。我会接受博士的答案,因为它是正确的
最后,由于我有git版本2.7.4,无法运行git checkout--recurse submodules master
,我添加了(我使用的是Ubuntu),因为OS软件包管理器中的版本较旧,将git升级到2.19,运行命令,一切正常
我使用的命令是:
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
apt-get install --only-upgrade git
编辑2
奇怪的是,当我切换到“dev”分支时,我注意到我删除的子模块的文件夹仍然在那里,尽管.gitmodules没有在列表中显示子模块。此外,在签出到该分支的过程中,我收到消息警告:无法rmdir'ol/ol layerswitcher':目录不为空
我想现在这个文件夹不再被当作子模块了,但它仍然存在。如果可能的话,我如何从dev分支而不是主分支(这是我最初的问题)摆脱它
最终答案
好的,我自己回答。我只需要在没有git rm的情况下删除floder。现在:
只是想补充一点,删除这些文件会使它们在主分支中消失。显然,我唯一能做的就是使用devb牧场中的submodules文件夹,但只是使用
.gitignore
来“忽略”它们,以避免将它们推到我的远程开发分支。您的问题缺少一些重要的细节,所以让我猜猜缺失的部分。您已经创建了一个分支,编辑了.gitmodules
(从中删除了子模块)并删除了子模块的目录。您在.gitmodules
中添加并提交了更改
我相信您提交了.gitmodules
,因为没有它,您就无法签出主分支
然后您签出master并发现子模块目录丢失,对吗?这是问题的中心问题吗
不幸的是,子模块就是这样工作的。如果您的git足够新鲜,您应该使用git checkout--recurse submodules master
或者,您需要在签出分支后进行开发。请参阅。您的问题缺少一些重要的细节,所以让我猜一下缺少的部分。您已经创建了一个分支,编辑了
.gitmodules
(从中删除了子模块)并删除了子模块的目录。您在.gitmodules
中添加并提交了更改
我相信您提交了.gitmodules
,因为没有它,您就无法签出主分支
然后您签出master并发现子模块目录丢失,对吗?这是问题的中心问题吗
不幸的是,子模块就是这样工作的。如果您的git足够新鲜,您应该使用git checkout--recurse submodules master
或者,您需要在签出分支后进行开发。请参阅。“我相信您提交了.gitmodules,因为没有它,您无法签出master branch。”事实上,我没有。。。签出仅显示带有M/D标志的修改/删除的文件。我的git是新的(不能说出确切的版本,但应该是)。“git checkout--recurse submodules master”这会只为master分支再次添加子模块吗?我会试试的。谢谢。对于已修改且未提交的
。gitmodules
git应拒绝签出主机git checkout——递归子模块
需要git 2.13+。我尝试了你的建议,一切似乎都奏效了(请参见我答案中的编辑1),我接受了你的答案。然而,我切换回了devrepo,看到了我在那里再次删除的子模块文件夹(编辑2)。我做错了什么?如果你能再次帮助我,我将非常感激。对不起,我自己回答,见最后的答案。非常感谢你的帮助!“我相信你承诺了。因为如果没有它,你就无法签出master branch。”事实上,我没有。。。退房只显示了国防部