git 状态不能与 Virtualbox 共享文件夹一起正常工作

git status does not work properly with Virtualbox Shared Folders

详情

在主机上,存储库目前只是本地的。已初始化并有多个 [本地] 提交,而没有一次推送到远程。

症状

在我的主机上,我有 parent 文件夹,上面有一个 Git 存储库。 我已经与来宾计算机共享 parent 文件夹,在 VM 上登录后该文件夹位于 /media/sf_parent.

目前,我在终端中 cd /media/sf_parent 内容似乎已正确共享。 但是当我更改到 repo 文件夹时,我尝试执行 git status 并且输出是因为存储库中的所有单个文件都被跟踪但被修改。

奇怪的是 git log 提供了我在主机上所做的最后一次提交。 我尝试将存储库文件夹的 "versions" 与 ls 进行视觉比较,它们 "update date" 和 "file size" 的值相同,但 "owner" 的值不同,"group" 和 "permissions".


可能是什么问题?

也许 Virtualbox 不支持这个?

可能是文件系统级别与 "owner" 和 "permissions" 的冲突?

linux 用户管理是你的问题。您的虚拟机不知道 what/who group/users 来自您的主机和 vice/versa。可以通过为用户帐户使用单独的身份验证服务器来解决这个问题,但这个答案超出了 Whosebug 的范围。

一种 git 解决此问题的方法是在共享文件夹上托管一个裸存储库,然后在本地克隆到 VM。 push/pull 根据需要进行更改

来自主机

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

来自 vm

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

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

git config I was able to resolve this problem as I suspected and @g19fanatic 的帮助下提示这个问题似乎与 "user permissions" 有关。

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

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

PS:默认都是true

重新启动 VM,它工作正常,现在工作树在主机和来宾之间同步。

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

echo 3 > /proc/sys/vm/drop_caches