首页 > 解决方案 > 如何在虚拟机的主机-来宾文件系统上使用 Git 工作树

问题描述

我在 Windows 的本地存储库中打开了一个新工作树,但无法在我的 Linux 虚拟机中编译它,因为“.git”包含一个以“C:/Git”开头的完整路径,而虚拟机没有认出。

我有一个 git 存储库,我经常需要在 Windows 和 Linux 上进行交叉编译。我最初在我的 Windows 系统中克隆了存储库,并将我的“C:”驱动器作为共享文件系统安装在虚拟 Ubuntu 机器中。这通常工作得很好。

当试图在 git 中打开一个新的工作树时,链接的存储库没有它自己的“.git”文件夹,而是一个指向原始存储库的“.git”文件夹的链接,这被保存为绝对路径,在以下格式:

gitdir: C:/Git/...

尝试运行时:

git rev-parse

我收到以下消息:

fatal: not a git repository: /mnt/hgfs/WindowsDriveC/Git/WorktreeDir/C:/Git/OriginalGitDir/.git/worktrees/WorktreeDir

由于这个限制,我的几个脚本失败了。

有什么方法可以“欺骗”Linux 识别完整路径并正确识别原始 git 存储库?

标签: linuxwindowsgitvirtual-machinegit-worktree

解决方案


通常,不鼓励这样做,因为它会导致损坏,而且正如您所见,Windows 路径不能很好地与 Linux 路径配合使用。

然而,话虽如此,有几个选择。一种是在 Cygwin 或 Linux 的 Windows 子系统下建立工作树并共享它。这仍然会导致 Linux VM 上不存在的路径,但是可以创建一个从/cygdrive/c/mnt/c到的符号链接/mnt/hgfs/WindowsDriveC,然后其余的东西就可以工作了。

另一种选择是使用 Windows Subsystem for Linux,这意味着您可以在不离开 Windows 的情况下进行编译并生成 Windows 二进制文件。您将生成 Linux 二进制文件,但不必担心与 VM 共享。不过,工作树需要在 WSL 下创建。

最后一个选项是编辑工作树中的.git文件以使用主存储库的相对路径。这是不受支持的,可能会中断,但它可能再次满足您的需求。为此,请务必使用正斜杠。


推荐阅读