有人能解释一下为什么在Linux共享文件夹上运行“git status”时,会显示文件已被修改吗?

5
这些文件托管在 Windows 机器上,我想知道是否可以使用 Linux 管理 Git,所以我挂载了共享文件夹。然后我发现当执行 git status 时,所有文件都会显示为已修改,而且当尝试从这个共享文件夹推送时,它不接受我的密钥。 这张图片是同一时间、同一文件夹的快照。 Linux --------------------------------------------------------winGitBash enter image description here

3
git diff 显示那些文件中的修改是什么? - user849425
3个回答

5
这篇博客文章非常清楚地解释了这个问题。基本上,最好设置如下内容:

git config --global core.autocrlf true

这将有助于处理文本文件在不同操作系统上的换行符差异。

5
你检查了两台机器上的crlf设置吗?其中一台可能会重新创建CRLF(Windows)格式的文件,而另一台只有LF结尾。这足以使状态变为“已修改”。
不要忘记你的个人设置以及仓库设置。

1

Git在换行符上的行为取决于几个配置:

  • core.eol
  • core.autocrlf
  • .gitattributes文件

对于您的情况,我怀疑以下可能是原因:

  • 在您的git“数据库”(.git)中,所有文本文件都以换行符LF存储。
  • 您的本地仓库是在Windows下克隆的,在检出期间,git将LF转换为CRLF
  • 当您在Linux/cygwin下执行git status时,“cygwin git”认为它正在工作在“*inux”环境下,因此该git认为本地仓库应该使用LF检出文本文件。但是当它实际发现CRLF时,它认为CRLF已从LF更改,因此git报告它们已被修改。

要验证这一点(而不是修复它),您可以执行以下操作:

# under linux 

# save your change
git stash

# delete working directory
git rm --cached -r .

# re-checkout
git reset --hard

然后再次运行git status,你将/应该看到输出报告没有修改。

参考资料:

注意行尾


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