Git for Windows/WSL2/VS 代码的非常奇怪的问题

Very strange issue with Git for Windows/WSL2/VS Code

我有 Windows 10 并且正在使用 VS Code,Git 用于 Windows,WSL2 带有 Ubuntu 20.04 LTS(我通过 [=46= 访问]终端)。

我需要重置我的计算机,所以我 tar.gz 编辑了我 Ubuntu 上的本地存储库,并将该 tar.gz 存储在我的辅助驱动器上。

重置后,我重新安装了所有应用程序。

我将我的 repo 解压缩到 Ubuntu 中的相同位置,然后我执行了 chown -R gesslar:gesslar /path 以确保它上面有我当前的 ID。

在 Windows 终端中,使用 WSL2 配置文件,我 cd 到 /path 并执行 git 状态,它说我没有要提交的更改。

$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

但是,在 VS Code 中,我通过转到目录并在 Windows 终端的 WSL 配置文件中键入 code . 来访问它,它说我有 950 个待处理的更改。

如果我使用 Git Bash,我会得到类似的读数,它会显示大量标记为已删除的文件

对我来说超级奇怪的是,尽管被标记为已删除,但文件实际上在那里。

在未跟踪文件下,它说的是新文件,实际上并不存在。

如果有人对此有什么奇怪的想法,我将不胜感激。我怀疑它与 Windows 的 Git 有关,因为我认为 VS Code 正在使用它来确定更改并且它在 Git Bash 中我看到了这种怪异.

备注 我知道有些人可能会建议我只是重新克隆,但我的工作目录是生产的副本,我们的 .gitignore 忽略了我需要在我的工作目录中使用的数千个数据文件,它们有点像到处都是。如果可能的话,重新创建环境绝对是最后的努力。

这听起来真的很蠢,但是,我发现还没有为 VS Code 安装 Remote WSL 扩展。

这不会阻止 Git 因为 Windows 对什么是什么感到困惑,但是,它确实使 VS Code 能够使用 git 的 WSL 版本而不是 Git 对于 Windows.

因此,结果是 VS Code 现在知道我的 git repos/working 目录在我的 WSL2 实例中的实际状态。

谢谢你的帮助,TTT。非常感谢您的回复,我确实从中学到了一些东西。 ♥

还有一件事要检查,就是行尾。如果您在 windows 和 WSL 中使用相同的 repo 和不同的 git 可执行文件,它们会感到困惑并将文件标记为已修改,这仅仅是因为行结尾是该系统的错误类型。 您可以通过 configuring the line endings in git accordingly.

来避免这种情况

如果您在 windows 中开发,那么 git config core.autocrlf true 会在检出文件时将行结尾转换为 CRLF (Windows)。

如果您改为在 Linux 中开发,那么 git config core.autocrlf input 将在 repo 和 Linux 系统中保留 LF 结尾,但同时将 CRLF 行结尾保留在 Windows结账。

您还可以通过添加 --global 选项对这些设置进行全局设置。