克隆 Git 后文件被修改

4
在我的电脑上克隆了一个GitHub仓库后,有一个文件显示为已修改文件。但是这个文件的最后一次修改是8个月前完成的。这怎么可能呢?我尝试执行“git checkout -- .”命令,但该文件仍然显示为已修改文件。
.gitattribute文件内容如下: *.java text *.scala text *.xml text *.properties text *.properties.default text *.sh text *.pig text *.py text *.md text
问题文件是Java源文件。我使用的是Ubuntu 12.10操作系统。请问有人有解决此问题的提示/解决方案吗?

我曾经看到过类似的情况,我的最佳猜测是有一些钩子在克隆时修改了文件。 - Michael
1
你能执行 'git diff' 命令,看看是否有任何有意义的更改吗? - Bhaskar
当我执行“git diff”时,就像文件的所有行都被删除和重新包含一样。 - vanz
1
core.autocrlf设置为什么?你使用的是什么类型的文件系统?NTFS?FAT32?SMB? - Edward Thomson
@EdwardThomson,core.autocrlf设置为input,core.text设置为auto。我的文件系统是ext4。 - vanz
显示剩余5条评论
2个回答

0

只需设置 git core.filemode 为 false,即可解决您的问题。

祝好, Tim


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - wviana

-1

每当 git 检出某个文件(例如在 clone 之后),它将修改时间设置为当前时间。

考虑以下场景:您有两个分支,分别称为 One 和 Two。您检出 One,并运行 make。然后您再次检出 Two 并再次运行 make。有一个名为 file 的特定文件,在各自的分支中最后修改了 1 和 2 个月。如果 git 使用其原始修改时间检出 file,每次您切换分支时,file 将会像 make 所看到的那样很久以前就被修改过了。这不是好事情(商标)。


只有在文件发生更改时才是真实的。如果我要切换分支,而一个项目在两个分支中具有相同的内容(例如,如果目标树项与我的当前索引项匹配),则mtime不会更新。否则,当我切换分支时,所有文件的mtime都会更新,make将重新构建所有内容。这也不是一个“好事情”。 - Edward Thomson
1
无论如何,这并不能解释为什么git在自己检出文件后会将其视为已修改。 - Edward Thomson
你的示例包括这种情况,但是你的第一段讨论的是“每当git检出某个文件”的情况。这可能包括checkout命令,并且它表明mtime总是设置为当前时间。 - Edward Thomson
如果文件没有更改,它就不会被签出;-) - vonbrand
@EdwardThomson,如果您认为可以表达得更好,请随意编辑我的答案。 - vonbrand
显示剩余2条评论

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