【发布时间】:2020-11-30 23:07:33
【问题描述】:
在具有此文件系统的 OSX 10.10.2 和 Git 2.2.1 上: 文件系统特性:日志式 HFS+ 类型(捆绑):hfs 名称(用户可见):Mac OS 扩展(日志式)
我看到了几个与此相关的问题和答案: Unresolvable Git error: The following untracked working tree files would be overwritten by checkout
在该问题中有效的实际解决方案没有明确指定,但涉及:
在将选项设置为 true 后,我花了一些文件历史分解(删除和重新添加文件)来解决此错误。
我已经尝试了其他解决方案,但仍然存在如何正确移动文件的问题。
已运行:
sudo git config --unset-all core.ignorecase && sudo git config --system core.ignorecase false
然后我仍然无法使用 (git 2.2.1) 重命名文件,因为我收到 fatal: destination exists 错误:
git mv File.name file.name
我可以使用以下方法重命名它们:
git mv File.name File.name.tmp
git mv File.name.tmp file.name
但是我无法签出旧的提交/分支,因为我收到了这条消息:
error: The following untracked working tree files would be overwritten by merge:
File.name
如果我强制结帐或将忽略大小写更改为 true,我可以切换分支,但我仍然无法合并更改,因为我收到此消息:
error: The following untracked working tree files would be overwritten by merge:
file.name
请注意,冲突的文件名会在这两条错误消息中更改其大小写。在这两种情况下,运行 git reset --hard HEAD 都不能解决问题。
这是 git 中的错误吗?我做错了吗?反正我看不到强制合并,我还能做什么?是否必须删除并重新添加文件,从而破坏该文件的更改历史记录?
编辑: 到目前为止,似乎唯一的解决方案(保留文件历史记录并且不需要通过重写项目历史记录来破坏旧版本)是将重命名拆分为两个提交,然后要求合并此分支的任何人手动合并两次。
【问题讨论】:
-
你能做一些事情,比如移动,进行实际提交,然后移回,进行实际提交吗? git 尝试将所有差异合并到一个单一的提交中,所以如果你 rm 并在不同的地方添加,git 只会将其视为一个动作......
-
@GradyPlayer 将两个动作分成两个提交并不能解决问题。我仍然收到未跟踪的工作树文件错误。
-
@GradyPlayer 我可以合并第一个提交,然后合并第二个提交,但这也不是最理想的。我担心如果我将此代码推送到原点,试图从原点提取的人将不得不手动从原点进行两次合并,以使他们的本地分支加快速度。我们可能不会丢失文件历史记录,但这会给存储库带来一个奇怪的神秘问题。
-
我已经通过在“磁盘工具”中制作区分大小写的磁盘映像并在那里处理项目来解决在 OS X 上处理区分大小写项目的一般问题。这是从项目中删除文件系统区分大小写的权宜之计。
-
@Schwern 但这是否意味着每个尝试创建工作副本的开发人员都无法合并此分支,除非他们还制作了区分大小写的磁盘映像?