Git - 区分大小写问题

问题描述 投票:0回答:1

我有一个分叉的存储库。在某些时候,我需要合并来自上游的更改,我就这样做了。有一些冲突,我解决了它们。我不太记得了,但我想我在修复冲突期间取消了一些文件。一切完成后,我开始面对一些奇怪的事情,但我无法解决它。

问题是无论我做什么,总是有六个文件被修改(

checkout
不影响它们)。我认为它可能会修复,所以我删除了我的分叉并重新分叉,但是当我克隆并将分支从主分支更改为分支时,我正在创建拉取请求,我再次遇到了同样的问题。

  • 我无法签出文件
  • 我无法结帐其他分行
  • 隐藏无法分叉它们(文件按修改后的样子存在)

如果需要的话我可以提供更多细节

git github
1个回答
2
投票

您遇到区分大小写的问题:当 git 尝试检出磁盘上的文件

foo
Foo
时,由于您的文件系统不区分大小写,因此其中一个文件“获胜”并覆盖另一个文件的内容。

经常:其中一个文件名是“错误的”,你可以删除它。

如果这是你的情况:就跑吧

git rm --cached Foo  # the variant with the incorrect casing

并检查磁盘上的文件是否使用正确的名称变体命名 (*)。

您还想获取文件的正确内容:您可以使用

foo
来查看
Foo
提交中为
HEAD
git show
存储的内容 :

git show HEAD:foo
git show HEAD:Foo

# overriding the content of 'foo' with 'HEAD:Foo' :
git show HEAD:Foo > foo

# dumping into two temp files for comparison and cmd+C/cmd+V :
git show HEAD:foo > foo.tmp.lo
git show HEAD:Foo > Foo.tmp.up

一旦你弄清楚了文件在 git 中应该如何命名以及正确的内容是什么,你就可以

commit
commit --amend


(*) 一个常见问题:不区分大小写的文件系统倾向于将

mv Foo foo
视为无操作,并会在计算机上留下一个名为
Foo
的文件。

一个快速的解决方法是首先重命名为临时名称,例如:

mv Foo foo.tmp
mv foo.tmp foo
© www.soinside.com 2019 - 2024. All rights reserved.