gpt4 book ai didi

linux - Windows 和 Linux 之间的 git status 不一致

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:04 24 4
gpt4 key购买 nike

如果我在 Linux 系统和 Windows10 笔记本电脑上运行 Git 状态,它会返回不同的结果。

原始目录是在 Linux 机器(运行 RedHat 6.4)上启动的。我厌倦了使用 VIM 编辑我们所有的 Python 代码,所以我决定将我的 Windows10 笔记本电脑上的网络驱动器映射到远程 Linux 机器(它控制我们所有的测试设备)和使用 Git 设置的目录。所以现在我可以使用 Visual Studio Code 轻松查看/编辑/更新远程 Linux 机器上的任何文件。我从 Linux 机器上运行我所有的 git 命令,但如果我可以直接从 VS Code 运行它们就更好了,但是这两个版本的 Git 之间显然存在差异。

'git status' --> on the Linux box returns no updated or modified files.

'git status' --> on Windows shows I have over 200 modified files and 2 directories that are deleted.

我已经看过这个帖子了:Git - Windows AND linux line-endings

那里有很多我试过的重要信息。唯一似乎有任何影响的是添加 'git config core.filemode false' 设置,这是我在 Linux 机器上所做的。现在,当我在我的 Windows 机器上运行“git status”时,我看到它把我修改过的文件从 200 多个减少到 4 个。这太棒了。但是,我仍然看到这 4 个文件已修改,并且它认为已删除的 2 个文件夹。

关于我可以检查的内容还有其他建议吗?

作为旁注,我有 112 个文件在 VS Code 中显示为未跟踪,但我相信这并非巧合,所有 112 个文件都位于 Windows git status 认为已删除的 2 个目录中。

最佳答案

Git 在索引中存储一些特殊的信息位,以便轻松了解工作树中的文件是否被修改。索引本身是一个驻留在 Git 存储库中的文件(.git/index;这里可能还有其他辅助文件和临时索引文件,但是 .git/index 索引,可以说是第一个也是最真实的索引)。

索引中的这些特殊信息位是(派生自)操作系统 stat 调用的结果。 Linux 上的 stat 调用和 Windows 上的 stat 调用传递不同数据(特别是 st_dev,虽然 inouidgid 也可能是一个问题),因此单个索引(以及 Git 存储库和工作树)不能< sup>1 跨机器边界正确共享。这适用于网络驱动器、VM 镜像、Dropbox 文件夹(存在其他问题)或允许任一系统直接查看另一系统数据的任何其他共享机制。

所有这一切的最终结果是,有时,几乎不可能以这种方式共享 Git 存储库,但这是个坏主意:你会得到奇怪的效果,例如 Git缺少一些修改过的文件,或者认为文件在未修改的情况下被修改了。后者可能就是您所看到的。

不过,如果不像这样共享存储库目录(也不是工作树),效果会更好。在“更友好”的系统上什至如此,例如在使用 VM 时使用 MacOS 与 Linux,例如 vagrant。有时它有点有用,但它就是不可靠。使用单独的克隆,你的生活会更快乐。


1在编译时,可以选择让 Git 忽略 st_dev 字段,以启用跨网络驱动器共享。这有时会有所作为,有时则不会。我怀疑在大多数 Windows 构建中都选择了此选项,以便 Windows 可以与 Windows 共享,但在 Linux 构建中未启用,这意味着 Linux 端不会忽略 Windows 端所做的更改——这将导致奇怪的行为。

时间戳通常是兼容的,但如果启用纳秒分辨率的时间戳,那也可能有问题。

关于linux - Windows 和 Linux 之间的 git status 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54410355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com