当我通过Windows目录(git status
)上的WSL(Linux的Windows子系统)在git存储库上运行/mnt/c/Users/....
时,我发现目录中的每个文件都已被修改。每次修改都只是删除并重写原始文件。见下文:
现在,如果我在Windows端完全相同的存储库上运行git status
(通过powershell),我什么也没得到:
这背后的任何特殊原因?我知道^M
与Linux和Microsoft使用的不同行尾有关,但是git会不同意是否进行了更改,这对我来说似乎很奇怪。
注意:我一直在通过WSL仓库的单独克隆来处理仓库(因此,为什么Windows端要落后15个)。但是,尚未对Windows存储库进行任何编辑。不知道这是否会改变任何东西,但是我想我会提到它。
答案 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