git repo从WSL提供的信息与从标准Windows提供的信息相矛盾

时间:2018-12-23 02:47:15

标签: git windows-subsystem-for-linux

当我通过Windows目录(git status)上的WSL(Linux的Windows子系统)在git存储库上运行/mnt/c/Users/....时,我发现目录中的每个文件都已被修改。每次修改都只是删除并重写原始文件。见下文: enter image description here

以下是其中一个文件上的git diff git diff on specific file

现在,如果我在Windows端完全相同的存储库上运行git status(通过powershell),我什么也没得到:

enter image description here

这背后的任何特殊原因?我知道^M与Linux和Microsoft使用的不同行尾有关,但是git会不同意是否进行了更改,这对我来说似乎很奇怪。

注意:我一直在通过WSL仓库的单独克隆来处理仓库(因此,为什么Windows端要落后15个)。但是,尚未对Windows存储库进行任何编辑。不知道这是否会改变任何东西,但是我想我会提到它。

2 个答案:

答案 0 :(得分:3)

这两个git安装(本机Windows和WSL)为core.autocrlf配置使用了不同的设置,因为这两个安装没有使用相同的全局配置文件。

简单地说,本机Windows客户端在结帐时将LF转换为CRLF,因此git status不会将CRLF的存在“视为”更改。相反,WSL客户端期望使用UNIX风格的LF行结尾,因此git status认为每个文件都已被修改为将LF更改为CRLF。

您不应依赖全局设置core.autocrlf,而应在存储库中为任何共享存储库本地设置它。如果要同时从Linux / WSL和本机Windows访问同一存储库,则您可能希望将此设置为false,因此git根本不会更改任何行尾。请注意,如果确实将其设置为false,则必须确保编辑器可以按原样处理行尾(通常,我使用的大多数程序员编辑器都支持使用UNIX LF,即使在Windows上也是如此)。

此处记录了core.autocrlf,以获取更多信息:

https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

答案 1 :(得分:1)

这可能与WSL报告Windows文件系统上所有文件的权限为777有关。然后Git将所有文件视为已更改,因为它们的权限不同。

尝试更改Git配置,以便忽略权限更改:

# For the current repository
git config core.filemode false   

# Globally
git config --global core.filemode false

请参阅:https://github.com/microsoft/WSL/issues/184