git 回购从 WSL 提供的信息与 Windows 提供的信息相互矛盾
git repo gives contradictory info from WSL than from Windows
当我通过 Window 上的 WSL(Windows Linux 的子系统)在 git 存储库上 运行 git status
时' s 目录 (/mnt/c/Users/....
),我知道目录中的每个文件都已被修改。每次修改只是对原文件的删除和重写。见下文:
下面是其中一个文件的 git diff
现在,如果我 运行 在 Windows 端(通过 powershell)的完全相同的存储库上 git status
,我什么也得不到:
这背后有什么特别的原因吗?我知道 ^M
与 Linux 和 Microsoft 使用的不同行尾有关,但是 git 不同意是否进行了更改对我来说似乎很奇怪。
注意:我一直在通过存储库的单独克隆在 WSL 端处理存储库(因此 Windows 端落后 15 次提交)。但是,Windows 存储库没有进行任何编辑。不确定这是否会改变什么,但我想我会提到它。
两个 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#_core_autocrlf
这可能与 WSL 报告 Windows 文件系统上所有文件的权限为 777 有关。Git 然后将所有文件视为已更改,因为它们的权限不同。
尝试更改 Git 配置以便忽略权限更改:
# For the current repository
git config core.filemode false
# Globally
git config --global core.filemode false
当我通过 Window 上的 WSL(Windows Linux 的子系统)在 git 存储库上 运行 git status
时' s 目录 (/mnt/c/Users/....
),我知道目录中的每个文件都已被修改。每次修改只是对原文件的删除和重写。见下文:
下面是其中一个文件的 git diff
现在,如果我 运行 在 Windows 端(通过 powershell)的完全相同的存储库上 git status
,我什么也得不到:
这背后有什么特别的原因吗?我知道 ^M
与 Linux 和 Microsoft 使用的不同行尾有关,但是 git 不同意是否进行了更改对我来说似乎很奇怪。
注意:我一直在通过存储库的单独克隆在 WSL 端处理存储库(因此 Windows 端落后 15 次提交)。但是,Windows 存储库没有进行任何编辑。不确定这是否会改变什么,但我想我会提到它。
两个 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#_core_autocrlf
这可能与 WSL 报告 Windows 文件系统上所有文件的权限为 777 有关。Git 然后将所有文件视为已更改,因为它们的权限不同。
尝试更改 Git 配置以便忽略权限更改:
# For the current repository
git config core.filemode false
# Globally
git config --global core.filemode false