Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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
Windows上GitHub桌面上的子模块总是出现签出错误_Git_Github_Git Submodules - Fatal编程技术网

Windows上GitHub桌面上的子模块总是出现签出错误

Windows上GitHub桌面上的子模块总是出现签出错误,git,github,git-submodules,Git,Github,Git Submodules,我有几家分行的回购协议。在其中一个目录上,我删除了一个不属于repo的目录,并将其添加回git子模块 我就是这么做的: 复制回购协议 切换到GitHub桌面中具有子模块的分支 git子模块init 到目前为止,我可以切换分支(在有子模块的分支和没有子模块的分支之间,没有任何问题) git子模块更新以最终获取子模块的“内容” 因此,在我尝试切换GitHub桌面中的分支之前,一切都正常(切换到没有任何git子模块的另一个分支)。如果我这样做,我会收到一个签出错误,声称我有未提交的更改: 无法签出分

我有几家分行的回购协议。在其中一个目录上,我删除了一个不属于repo的目录,并将其添加回git子模块

我就是这么做的:

  • 复制回购协议
  • 切换到GitHub桌面中具有子模块的分支
  • git子模块init
  • 到目前为止,我可以切换分支(在有子模块的分支和没有子模块的分支之间,没有任何问题)
  • git子模块更新
    以最终获取子模块的“内容”
  • 因此,在我尝试切换GitHub桌面中的分支之前,一切都正常(切换到没有任何git子模块的另一个分支)。如果我这样做,我会收到一个签出错误,声称我有未提交的更改:

    无法签出分支 工作区中的以下文件 目录将被签出覆盖:[……]请提交 在您可以切换分支之前,请先进行更改

    然而,正如我所说,我没有改变任何事情——我所做的唯一事情就是更新我的子模块

    git状态
    显示一切正常:

    $ git status
    On branch patch-submodule
    Your branch is up-to-date with 'origin/patch-submodule'.
    
    nothing to commit, working directory clean
    
    当我
    deinit
    我的子模块时,我还可以再次切换分支

    那么这里怎么了?
    我怎样才能防止或避免这个错误呢?

    您提到您从repo中删除了一个目录,而将其作为git子模块

    是否已从您尝试签出的分支中删除此目录

    可能发生的情况是,子模块包含的文件与您尝试签出的分支中包含的文件相同

    更新子模块,该子模块将文件放置在文件系统中。当您尝试签出分支时,git会尝试用仍然包含在该特定分支的主repo中的版本覆盖该文件的子模块版本。这可能会导致工作丢失,因此git抛出错误


    对该分支进行干净的签出,然后删除文件并提交更改。也可能将子模块更改添加或合并到该分支

    多亏了GitHub的支持,我终于得到了一个非常有用的回复

    特别是他们告诉我,到底是哪个确切地描述了我的问题——除了一个区别:我使用的是GitHub GUI,而不是控制台

    这里有一个链接,很好地解释了这一点:

    切换带有子模块的分支也很棘手。如果创建一个新分支,在那里添加一个子模块,然后切换回没有该子模块的分支,那么子模块目录仍然是未跟踪目录[。]

    […]您必须将其移到一边或将其删除,在这种情况下,您必须在切换回时再次克隆它,否则可能会丢失您未推动的本地更改或分支


    在我的例子中,这些错误消息基本上就是这个意思。

    是的,我基于主分支创建了一个包含目录的新分支。然后我删除了这个目录并提交了这个更改(没有将它推到一边)。之后,我添加了git子模块,并再次提交了此更改。然后我试着推动这个改变,但正如我上面所描述的那样失败了。现在在一个新的分支上重做这个-。这一次,我确保在删除文件后同步我的repo。当我最终想用GitHub Desktop提交此更改时,它告诉我:
    无法提交子模块:[……]将它们作为子模块从Git Shell中添加,或者删除它们的.Git文件夹以将它们添加为常规目录。
    因此,我现在已经使用Git Shell提交了此文件,并且还可以在GitHub Desktop中对其进行同步。然而,我不能再次切换我的分支。我还发现,当我删除(子模块)目录的全部内容(但将其保留为子模块)时,GitHub桌面在切换分支时会显示
    错误。在此之后,如果我切换回购并切换回有问题的回购,我可以成功切换分支。显然,这是GitHub支持的一个例子。我正在联系他们。