【问题标题】:How to correctly change filename case in Git on OSX如何在 OSX 上的 Git 中正确更改文件名大小写
【发布时间】: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 但这是否意味着每个尝试创建工作副本的开发人员都无法合并此分支,除非他们还制作了区分大小写的磁盘映像?

标签: git macos


【解决方案1】:

我使用 Mac OSX,在我的大部分 Git 工作中,我使用 Atlassian's SourceTree。我只是尝试通过右键单击要重命名的未暂存文件,选择 Move 选项,然后重命名文件并将其保留在当前位置来重命名其中的文件。它对我有用。我希望这会有所帮助。对任何后续问题发表评论。

编辑:根据评论请求添加diskutil info / 的结果: BELC02NF206G3QN:~ jthoms$ diskutil info / 设备标识符:disk1 设备节点:/dev/disk1 整体的一部分:disk1 设备/媒体名称:Macintosh HD

Volume Name:              Macintosh HD

Mounted:                  Yes
Mount Point:              /

File System Personality:  Journaled HFS+
Type (Bundle):            hfs
Name (User Visible):      Mac OS Extended (Journaled)
Journal:                  Journal size 24576 KB at offset 0x19502000
Owners:                   Enabled

Content (IOContent):      Apple_HFS
OS Can Be Installed:      Yes
Recovery Disk:            disk0s3
Media Type:               Generic
Protocol:                 PCI
SMART Status:             Not Supported
Volume UUID:              D2FB2CB7-9CA8-38D1-9116-AA88AFC39748
Disk / Partition UUID:    01D2D5C8-8300-4FE6-9ED5-07C5D4C0879D

Total Size:               249.8 GB (249795969024 Bytes) (exactly 487882752 512-Byte-Units)
Volume Free Space:        27.0 GB (27011723264 Bytes) (exactly 52757272 512-Byte-Units)
Device Block Size:        512 Bytes
Allocation Block Size:    4096 Bytes

Read-Only Media:          No
Read-Only Volume:         No
Ejectable:                No

Whole:                    Yes
Internal:                 Yes
Solid State:              Yes
OS 9 Drivers:             No
Low Level Format:         Not supported

This disk is a Core Storage Logical Volume (LV).  Core Storage Information:
LV UUID:                  01D2D5C8-8300-4FE6-9ED5-07C5D4C0879D
LVF UUID:                 AC10903C-43BB-403E-BD90-F7BF785DF8AC
LVG UUID:                 B0718DFB-82C0-402C-836E-DD3B32E5EEDC
Fusion Drive:             No
Encrypted:                Yes

【讨论】:

  • 我不认为你理解这个问题,这是重命名一个只涉及更改文件名大小写的文件。使用 SourceTree 的“移动”功能会产生错误“致命:目标存在”......在尝试使用“git mv File.name file.name”重命名文件时也会发生这种情况
  • 哦,奇怪。对我来说,我在同一目录中将 PricingExecutor.java 重命名为 pricingexecutor.java 并且效果很好 - 提交、ls 等等。我使用了 SourceTree 的 Move 选项,就像我说的那样,它起作用了。我想知道是否存在非 Git 问题。您是否可以通过 mv 命令或类似命令在命令行上重命名文件以使用不同的情况?
  • 是的,我可以使用 mv 重命名文件,因为 OSX 是“保留大小写”但不“区分大小写”。问题似乎在于 Git 如何跟踪工作目录,因为移动而感到困惑,并认为有一个未跟踪的文件,而实际上没有。
  • OSX 10.10.5 git 版本 2.5.4 (Apple Git-61)
  • diskutil info / 结果添加到上面的答案编辑中。
猜你喜欢
  • 2012-05-18
  • 2010-12-08
  • 2016-06-08
  • 1970-01-01
相关资源
最近更新 更多