"The following untracked working tree files would be overwritten" 在转换子模块中的文件夹后变基期间
"The following untracked working tree files would be overwritten" during rebase after transforming folder in submodule
在我的 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 中仍然遇到相同的错误。
然后我测试了添加具有不同名称的子模块,例如firmware/submodularized_SDK
。在这种情况下,rebase 工作得很好。但我想保留相同的名称,否则我将不得不更改我的配置并选择一个新的文件夹名称(那更糟糕)。
有没有一种方法既能保持相同的目录名称又能以标准方式进行变基和检出?
名称——在这种情况下,文件的路径名或子模块内的名称——发生冲突时:
- 名字匹配,并且
- 你做了一些导致 Git 在子模块转换之前引用一些具有该名称的旧提交 和 在子模块转换之后一些具有该名称的较新提交。
所以:
Is there a way I can both keep the same directory names and do rebases and checkouts the standard way?
是的:在时间上走得足够远(并承诺)到不再将“旧”与“新”混为一谈的地步,问题将不再发生。
到那时,您当前的解决方案(使用不同的名称,以免名称冲突)效果很好。由您决定何时“在时间上足够向前”,而不会“回到过去”到名称冲突的地步。那个时候,不管那个时候,你都可以重命名子模块。
在我的 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 中仍然遇到相同的错误。
然后我测试了添加具有不同名称的子模块,例如firmware/submodularized_SDK
。在这种情况下,rebase 工作得很好。但我想保留相同的名称,否则我将不得不更改我的配置并选择一个新的文件夹名称(那更糟糕)。
有没有一种方法既能保持相同的目录名称又能以标准方式进行变基和检出?
名称——在这种情况下,文件的路径名或子模块内的名称——发生冲突时:
- 名字匹配,并且
- 你做了一些导致 Git 在子模块转换之前引用一些具有该名称的旧提交 和 在子模块转换之后一些具有该名称的较新提交。
所以:
Is there a way I can both keep the same directory names and do rebases and checkouts the standard way?
是的:在时间上走得足够远(并承诺)到不再将“旧”与“新”混为一谈的地步,问题将不再发生。
到那时,您当前的解决方案(使用不同的名称,以免名称冲突)效果很好。由您决定何时“在时间上足够向前”,而不会“回到过去”到名称冲突的地步。那个时候,不管那个时候,你都可以重命名子模块。