移动了一个git仓库 - 现在每个文件都有未暂存的更改..(权限问题?)

3
我一直在一个代码库上工作并提交更改,一切正常。我决定将代码库移动到一个目录中,以便在本地服务器上使用它(我使用虚拟主机,但仍然喜欢将虚拟主机链接到特定的子目录)。
移动文件(在OS X上使用普通的mv命令)之后,我必须更改应用程序的权限,以使其在我的系统上运行,一切都很好。
然后我去提交我的更改...每个文件都有未暂存的更改。当我将远程库克隆到另一个目录以尝试比较差异时,那个库也在每个文件上显示未暂存的更改。
在我移动它之前,代码库是正常的,并且我还克隆了一个新的库,也显示出这种奇怪的行为。因此,.git文件不可能损坏。我唯一能想到的就是更改权限,因为我也对新的代码库进行了更改。
是否可以因为更改该目录的权限而导致这种情况?我以前没有遇到过这种情况,但这是我能想到的唯一事情。如果是这样,有没有解决这个问题的简单方法?现在有点困难。
我看到了一个类似的问题,但似乎不是同一个:Sometimes Git tells me every new file is new and unstaged。那个问题的答案似乎是不同操作系统的用户在同一个代码库上工作,并且换行符会导致问题。在这种情况下,两个开发者都使用的是OS X。

2
git diff 显示了哪些更改? - qqx
@qqx - 哇,我认为你非常接近了!旧模式100644 新模式100755- 确实看起来像UNIX文件权限,但是快速谷歌搜索只返回Windows系统的问题.. :/ - Fergus In London
2个回答

1
根据权限所做的更改,可能是问题的原因。虽然Git会忽略大多数权限,但它确实会跟踪文件是否应该可执行。任何差异都应该由git diff显示。由于您在回答中说git diff显示:
old mode 100644
new mode 100755

这表明问题确实与权限有关。Git最初被告知文件不应该是可执行的,但现在工作树中的文件具有可执行位。

你说通过将core.filemode设置为false解决了问题,但我不建议这样做。相反,我建议要么从不需要它的文件中删除执行权限,要么提交更改以更正权限。


0
非常感谢@qqx在评论区提出了关于git diff显示内容的问题。(令人惊讶的是,我已经检查过git status,但没有想到用git diff!)
每个文件的输出结果如下:
old mode 100644
new mode 100755

这意味着确实是文件权限问题。这是我以前没有想到过的.git - 哎呀!

如果有人感兴趣,我纠正这个问题的方法是:

git config core.filemode false

1
Git 不会追踪大多数权限,但会记录文件是否设置了可执行位。Git 已经记录下该文件不应该被执行,但磁盘上的文件是可执行的。 - qqx
@qqx- 如果你把这个作为答案发出来,我会接受它;我宁愿接受你的回答而不是我的,因为你基本上已经为我回答了这个问题 - 而且,你还解释了为什么会发生这种情况! :) - Fergus In London

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接