我在 github 上有一个远程存储库,它与我的 macbook 和实时服务器(unix)同步。目前,我无法从我的 macbook 拉或推到远程,并出现以下错误:
error: cannot pull with rebase: You have unstaged changes.
error: please commit or stash them.
我的本地工作副本中有 4 个文件:
modified: app/webroot/files/uploads/ABC.png
Untracked files:
(use "git add <file>..." to include in what will be committed)
app/webroot/files/get/Ä Ö ü.pdf
app/webroot/files/uploads/xyz Übc.png
app/webroot/files/uploads/def äbc.png
所有 4 个相关文件都来自服务器上的用户上传(可能应该被 gitignore 忽略,但我们现在......)
第一个/修改后的文件 (ABC.png) 可能是因为我的 macbook 不区分大小写,因为存储库中有 abc.png 和 ABC.png。但是,由于这些是在客户服务器上上传的,因此我不能删除其中任何一个。所以这是我现在无法解决的第一个问题。
对于其他文件,我完全不知道如何摆脱它们。其他情况没有重复,所以我怀疑特殊字符。我删除了整个本地存储库并再次克隆它,它立即附带了这 4 个文件,到目前为止我尝试过的任何操作都不起作用(git clean -ndx、git reset --hard、git fetch 以及各种参数)。
通常,即使存在本地未跟踪或修改的文件,只要这些文件不受提交的影响,拉取和推送也能正常工作。但这一次我什么也做不了,我真的不知道为什么......
我希望一些 git 专家可以帮助我!
这种情况很难处理。这并非不可能,但可用的工具并不足够。
问题正是您所怀疑的:您的主机操作系统对文件名(路径名)提出了特殊要求,而 Git 没有,并且使用 Git 的人已经违反了。Git不在乎有人同时做了ABC.png
and abc.png
;Git可以分别存储这两个路径名;但是在您的工作树中,您将在其中完成自己的工作,您的计算机确实关心并拒绝让您拥有这两个文件。带有变音符号的文件名相似,但有些不同:在 UTF-8 中,可以将此类名称表示为组合字符序列,或使用“内置”变音符号的代码点。Git 允许,但 MacOS 强制您使用 MacOS 喜欢的名称。
这意味着要使用这个存储库,你必须在不使用工作树的情况下工作——或者至少,不使用 Git 常用的工作树机制。使用 来执行此操作是可能的,但通常太痛苦了,git update-index
它可以让您处理原始字节字符串,而git cat-file -p
可以让您通过哈希 ID 提取底层 Git 对象。
在 Mac 上解决这个问题的最简单方法是在 VM 中安装 Linux,例如,使用 vagrant。那么你有一个Linux系统确实让你有与两个名字的情况下的文件,并且不试图为Unicode正常化适用于UTF-8名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句