说服git在vboxsf文件系统上正确处理符号链接

时间:2013-09-12 18:36:54

标签: git virtual-machine virtualbox vagrant

当我在vboxsf文件系统上使用符号链接克隆存储库时,符号链接一切正常,但是git总是说文件已经更新,即使更改已添加到存储库中。

当我在root上的ext4文件系统上使用它时,一切正常。

我在Windows上使用Vagrant VM。 vboxsf文件系统是用于与Windows主机共享的目录的类型。它能够支持符号链接(尽管底层文件系统在Windows上)。

$ git --version
git version 1.7.9.5
$ mount
--- snipped ---
vagrant-root on /vagrant type vboxsf (uid=1000,gid=1000,rw)
$ git init repo
Initialized empty Git repository in /vagrant/dev/repo/.git/
$ cd repo
$ echo foo > foo
$ ln -s foo bar
$ cat bar
foo
$ ls -l
total 1
lrwxrwxrwx 1 vagrant vagrant 0 Sep 12 17:34 bar -> foo
-rwxrwxrwx 1 vagrant vagrant 4 Sep 12 17:34 foo
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       bar
#       foo
nothing added to commit but untracked files present (use "git add" to track)
$ git add --all
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   bar
#       new file:   foo
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   bar
#
$ git commit -m "1st commit"
[master (root-commit) ec99b71] 1st commit
 2 files changed, 2 insertions(+)
 create mode 120000 bar
 create mode 100644 foo
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   bar
#
no changes added to commit (use "git add" and/or "git commit -a")

升级到git v1.8.4

后,我仍然会遇到相同的行为

因此,git似乎在克隆期间正确创建了符号链接,但是在提交文件时它无法正确处理它们。

是否有任何git设置可以帮助我说服git我的奇怪fs确实做了符号链接?

更新 我已经设法让git在一个带有Windows主机的虚拟机共享文件夹文件系统(vboxsf)上工作(出于我的目的)。

  1. 以管理员身份运行Virtual Box - 允许使用符号链接 在主机文件系统上创建,因此允许访客 用于创建和使用符号链接的文件系统
  2. 对每个符号链接使用git update-index --assume-unchanged。这允许提交其他文件,而git认为符号链接已被更改。
  3. 问题

    1. 符号链接在Windows中不起作用(我不认为 - 虽然我不需要在那里使用它们, 所以没有多尝试)
    2. 为了创建新的符号链接或编辑旧的符号链接,我必须在ext4卷上进行。

1 个答案:

答案 0 :(得分:0)

基于mount输出使用默认同步文件夹,即VirtualBox的vboxsf

不确定您是否知道vboxsf缺少对符号/硬链接的支持,这可能会导致使用git出现问题。在这里看到ticket #818,它仍然没有修复。

所以我会避免使用vboxsf,而是使用sshfs或NFS来共享主机和来宾之间的文件和目录。

  

注意:sshfs非常方便,我们将能够通过SSH挂载远程路径并使用它们,就像它们是本地的一样。我还没有听说过像vboxsf这样的git问题(但仍然可以)。

快速举例:

将远程ssh目录挂载为sshfs =&gt; sudo sshfs user@host:~user /mnt/sshfs

unmount sshfs =&gt; sudo fusermount -u /mnt/sshfs