Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从特定分支中删除git子模块_Git_Npm_Git Submodules - Fatal编程技术网

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

从特定分支中删除git子模块,git,npm,git-submodules,Git,Npm,Git Submodules,我正在将我的JS应用程序移植到现代E6模块。我的应用程序存储在git repo中。回购协议中有一个子模块 我创建了另一个分支来做我需要做的事情,但是我想删除这个特定分支中的子模块 原因是我必须npm将应用程序作为一个包安装在子模块中,而不是像在master branch中那样以“经典子模块”的方式使用它 阅读本文时,我认为这就像签出新分支一样简单,修改.gitmodules文件(不包括子模块)并删除子模块文件夹本身 然而,当我这样做的时候,我签出到master,看起来子模块也丢失了,这将是一个巨

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

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

原因是我必须
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。”事实上,我没有。。。退房只显示了国防部