git status在Virtualbox共享文件夹中无法正常工作

5

详情

  • 主机: macOS Sierra
  • 虚拟机: Ubuntu 64位16.04 LTS
  • 虚拟机软件: 5.1.14

目前在主机上,该代码库仅为本地存储。已初始化并有多个[本地]提交,但没有推送到远程。

症状

在我的主机上,我有一个带有Git代码库的parent文件夹。 我共享了parent文件夹给虚拟机,登录虚拟机后,该文件夹在/media/sf_parent中。

在终端中,我执行cd /media/sf_parent,此时似乎内容已正确共享。 但是当我切换到repo文件夹时,尝试执行git status,输出结果显示所有单个文件都被跟踪但已修改。

奇怪的是,git log提供了我在主机上进行的最后一次提交。 我尝试使用ls直观比较两个仓库文件夹的“版本”,它们的“更新日期”和“文件大小”具有相同的值,但是“所有者”、“组”和“权限”具有不同的值。


问题可能出在哪里?

也许Virtualbox不支持这种方式?

可能是“所有者”和“权限”在文件系统级别上发生了冲突?

3个回答

8

git config的帮助下,我成功解决了这个问题,正如我所怀疑的那样,@g19fanatic提到这个问题似乎与“用户权限”有关。

在阅读了页面上的许多属性后,我测试了这两个:

git config core.filemode false
git config core.ignorecase false

PS: 默认情况下,它们都是true

重新启动虚拟机,它就可以工作了,现在工作树在主机和客户端之间同步。


谢谢。这似乎解决了我在Windows和Linux之间共享git目录的问题,许多人声称这是不可能的(例如https://stackoverflow.com/questions/54410355/git-status-between-windows-and-linux-does-not-agree)。 - Penghe Geng

1
Linux用户管理是您的问题。您的虚拟机不知道来自主机的组/用户是什么/谁,反之亦然。可以通过使用单独的身份验证服务器来修复此问题,但该答案超出了StackOverflow的范围。
解决此问题的一种git方法是在共享文件夹上托管裸库并在VM本地克隆。根据需要推送/拉取更改。 来自主机
cd shared/folder
mkdir <repo name>.git    #.git isn't really needed but is typical
cd <repo name>.git
git init --bare

cd <current repo location>
git remote add origin <path to repo.git folder>
git push --all

来自虚拟机

cd ~
git clone <path to shared folder bare repo.git>

确保在虚拟机上设置用户名和电子邮件地址,以便将提交归属于正确的人(使用 git config


如果已经在远程中有代码,我就不需要共享文件夹...但是你第一行所说的与我的怀疑相符。 - Paulo Oliveira

1

将缓存刷新到磁盘上解决了我的问题:

echo 3 > /proc/sys/vm/drop_caches

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接