我有一些分支机构的回购。在其中一个我删除了一个目录,该目录并不真正属于repo并将其作为git子模块添加回来。
这就是我的所作所为:
git submodule init
git submodule update
最终获得子模块的“内容”所以一切都是正确的,直到我尝试在GitHub桌面中切换分支(到没有任何git子模块的另一个分支)。如果我这样做,我会收到一个结帐错误,声称我有未提交的更改:
无法结帐分支
您工作中的以下文件 结帐将覆盖目录:[...]请提交 您可以在切换分支之前进行更改。
然而正如我所说,我没有改变任何东西 - 我唯一做的就是更新我的子模块。
git status
显示一切正常:
$ git status
On branch patch-submodule
Your branch is up-to-date with 'origin/patch-submodule'.
nothing to commit, working directory clean
当我deinit
我的子模块时,我也可以再次切换分支。
那么这里有什么问题? 我怎样才能防止出现此错误或绕过它呢?
答案 0 :(得分:0)
你提到你从repo中删除了一个目录,而是把它变成了一个git子模块。
此目录是否已从您尝试签出的brach中删除?
可能发生的事情是子模块包含的一个文件与您尝试签出的分支中包含的文件相同。
更新子文件,将文件放在文件系统上。当您尝试签出分支时,git会尝试使用仍包含在该特定分支上的主仓库中的版本覆盖该文件的子模块版本。这可能会导致工作丢失,因此git会抛出错误。
对该分支进行干净的检查,然后删除文件并提交更改。可能还会将子模块更改添加或合并到该分支。
答案 1 :(得分:0)
感谢GitHub的支持,我终于得到了非常有用的回复。
特别是他们指示我Replaced third party code with git submodules, now I can't switch branches这完全描述了我的问题 - 除了一个区别:我确实使用过GitHub GUI而不是控制台。
并且链接to git-scm,其解释非常好:
切换包含子模块的分支也可能很棘手。如果您创建一个新分支,在那里添加一个子模块,然后切换回没有该子模块的分支,您仍然将子模块目录作为未跟踪的目录[。]
[...]您必须将其移开或移除它,在这种情况下,当您切换回来时必须再次克隆它 - 您可能会丢失您没有推送的本地更改或分支起来。
这基本上就是这个错误信息在我的案例中的含义。