如何让Linux VM(在Windows主机上)访问共享目录中的git工作文件

时间:2016-05-02 02:02:20

标签: linux windows git

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

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

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

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

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

更新

正如所建议的(Craig Estey),这似乎不是CRLF问题。我尝试在共享目录中的Linux VM中克隆一个repo并出现以下错误:

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的本地驱动器上克隆相同的repo没有问题。

任何想法可能是什么原因?

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

1 个答案:

答案 0 :(得分:1)

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

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

当您cd到该安装中的该存储库时,您会看到所有文件都在Ubuntu上被修改,那么它应该是EOL问题。

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

在Windows上克隆存储库时,将使用CRLF EOL结帐文件。

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

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

例如,使用false值:

在Windows上,

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

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

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

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

    • 打开TortoiseGit日志消息对话框
    • 右键单击当前分支并执行Reset "<current branch name>" to this
    • 选择“硬”选项
  4. 在Ubuntu上,您不应该看到所有文件都被修改过。

    使用.gitattributes:

    * -crlf