【问题标题】:How to get Linux VM (on Windows host) to access the git working files on a shared directory如何让 Linux VM(在 Windows 主机上)访问共享目录上的 git 工作文件
【发布时间】:2016-05-02 02:02:19
【问题描述】:

我有一台 Windows PC,在同一台 PC 上我在 VMWare 播放器中有一个 Lubuntu VM。

我共享我的 Windows 文件夹,以便我可以从 Lubunutu VM 中查看它们。

我的问题是,当我在 Windows 上克隆一个 Git 存储库(使用 Tortoise Git)然后尝试从 Lubuntu 访问它(使用命令行中的 Git)时,所有文件都显示为已修改,尽管我没有更改它们。

我知道这样做的原因是 Windows 和 Linux 处理新行的方式不同。

我的问题是如何在 Windows 和 Lubuntu 上配置我的 Git 安装,这样我就没有这个问题了?

更新:

正如 Craig Estey 所建议的那样,这似乎不是 CRLF 问题。我尝试在共享目录上克隆我的 Linux VM 中的存储库并收到以下错误:

fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.`

在虚拟机的本地驱动器上克隆相同的存储库没有问题。

知道可能是什么原因吗?

注意:我想这样做的主要原因是保持我的 VM 的驱动器大小较小并尽可能使用共享驱动器。我的 VM 的本地驱动器位于 SSD 驱动器上,而共享驱动器位于更大的 HDD 上。

【问题讨论】:

  • AFAIK,换行符不是的问题。 git 不会在任何系统上将 \n 更改为 \r\n。如果一个文本文件有 CRLF,它将在所有系统上都有。更有可能的是,以这种方式共享 working 目录存在问题。仅共享 repo 文件可能会更好。但是,我会让 linux 托管 repo [非共享] 并让 windows 进行拉取,每个都有一个单独的私有工作目录。共享 [与 samba] 似乎有问题。如果您真的想要这个,请创建一些测试存储库并创建一些文件以先查看它。
  • 这更可能与时间戳或权限有关,而不是 CRLF 问题。或者,两个不同的系统尝试从两个仅半兼容的不同虚拟机同时访问 repo 或工作目录时出现文件锁定问题
  • 你可以尝试从git config --global core.autocrlf false开始吗?

标签: linux windows git


【解决方案1】:

假设您将存储库放入 Windows 共享文件夹中。

并且 mount(Mount shared folder on Ubuntu) Ubuntu 上的共享文件夹,因此您可以克隆该存储库。 (说不能克隆,肯定是另外一个问题。我测试过了,对我有好处。)

当你 cd 到那个挂载的存储库时,你会看到所有文件在 Ubuntu 上都被修改了,那么应该是 EOL 问题。

在 Windows 上,autocrlf 默认为 true(假设您使用的是 Windows 版 Git)。

当您在 Windows 上克隆存储库时,文件将使用 CRLF EOL 签出。

但是,在 Ubuntu 上,autocrlf 默认为 false。在安装在 Ubuntu 上的存储库中使用 git,git 期望 EOL 是 LF。但是,EOL 仍然是 CRLF。这就是 git 将所有文件视为在 Ubuntu 上修改的原因。

要解决此问题,请确保两个操作系统使用相同的 autocrlf 值,或使用 .gitattributes 来控制 EOL。

例如使用假值:

在窗户上,

  1. 删除该存储库工作树中的所有文件

    (注意:如果您有本地更改,请先提交。)

  2. 仅为该存储库运行 git config core.autocrlf false。或者

    • 右键单击该存储库,单击TortoiseGit -> Setting
    • 在“设置”对话框中,转到Git 节点,选择local 并取消选中AutoCrlf
    • 应用更改
  3. 执行 git reset hard 以使用正确的 EOL 取回所有文件。

    • 打开 TortoiseGit 日志消息对话框
    • 右击当前分支并执行Reset "<current branch name>" to this
    • 选择“硬”选项

在 Ubuntu 上,您应该不会看到所有文件都已修改。

对于使用 .gitattributes:

* -crlf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2019-07-16
    • 2021-12-26
    相关资源
    最近更新 更多