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