3

我一直在做一个提交提交的回购——一切都很顺利。我决定将 repo 移动到允许我在本地服务器上使用它的目录中。(我使用虚拟主机,但仍然更喜欢将虚拟主机链接到特定的子目录)

移动文件后(mv在 OS X 上很简单),我必须更改应用程序的权限才能在我的系统上运行,一切都很好..

然后我去提交我的更改...每个文件都有未暂存的更改。当我将遥控器克隆到另一个目录以尝试比较差异时.. 该 repo 还对每个文件进行了未暂存的更改。

在我移动它之前,repo 很好,我克隆了一个新的,它也显示了这种特殊的行为;所以.git文件不会损坏。我唯一能想到的就是更改权限,就像我对新仓库所做的那样。

更改此目录的权限会导致这种情况吗?我以前没有发生过,但这是我唯一能想到的。如果是这样,有没有一种简单的方法可以解决这个问题?现在有点像噩梦。

我见过另一个类似的问题,但似乎不一样:有时 Git 告诉我每个新文件都是 new 和 unstaged。这个问题的答案似乎是使用不同操作系统的用户在同一个 repo 上工作,并且行尾会导致问题。在这种情况下,两个开发人员都使用 OS X。

4

2 回答 2

1

取决于对确实可能成为问题的权限所做的更改。虽然 git 会忽略大多数权限,但它跟踪文件是否应该是可执行的。

无论存在什么差异,都应该用 来表示git diff

既然您在回答中说 git diff 显示:

old mode 100644
new mode 100755

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

你说你已经通过设置core.filemode为 false 来解决这个问题,但我不建议这样做。相反,我建议要么从不需要的任何文件中删除执行权限,要么提交对权限的更改。

于 2013-08-19T20:15:10.830 回答
0

非常感谢@qqx,他在评论部分跳了起来,问什么git diff节目。(令人惊讶的是,我检查过git status但我git diff没有想到!

每个文件的输出是:

old mode 100644
new mode 100755

这意味着它确实是文件权限。我认为 .git 不可能做到的事情 - doh!

如果有人有兴趣,我纠正这个的方式是:

git config core.filemode false
于 2013-08-19T20:04:39.570 回答