在子模块中转换文件夹后变基期间"The following untracked working tree files would be overwritten"



在我的git存储库中,我已经使用此链接中的配方将名为firmware/SDK的文件夹转换为子模块。然后我做了两个提交:

  • 删除文件夹:git rm -r firmware/SDK
  • 下一个添加子模块:git submodule add https://blablabla/sdk.git firmware/SDK

这个工作得很好…直到我尝试做一个交互式的重置:git rebase -i HEAD~4。然后我得到了错误:The following untracked working tree files would be overwritten和rebase中止。

我理解发生这种情况是因为rebase是一个接一个地撤销提交,但仍然将文件留在我的工作空间中,因此它们与其他提交发生冲突。

我尝试在一次提交中压缩这两个提交,但我仍然在rebase中得到相同的错误。

然后我测试用不同的名称添加子模块,如firmware/submodularized_SDK。在本例中,rebase工作得很好。但我希望保持相同的名称,否则我将不得不改变我的配置,并选择一个新的文件夹名称(更糟糕的是😅)。

是否有一种方法,我可以保持相同的目录名称和做重基和签出的标准方式?

这些名称(在本例中是文件的路径名或子模块中的名称)在以下情况下发生冲突:

  • 名称匹配,和
  • 你做了一些事情,导致Git在子模块转换之前引用了一些旧的命名为的提交,而在子模块转换之后引用了一些新的命名为的提交。

:

是否有一种方法,我可以保持相同的目录名称,并做rebase和检出的标准方式?

Yes:在时间上走得足够远(并提交)到你永远不会混合使用"old"与"new"再重复一次,问题就不会再发生了。

在此之前,您当前的解决方案(使用不同的名称,以便名称不冲突)运行得很好。什么时候你已经走得"足够远",这取决于你自己。你不会"回到过去"直到两个名字发生冲突。此时,无论何时,您都可以重命名子模块。

"在计算机科学中有两个难题:缓存无效、命名和off-by-1错误。">

相关内容