1

当我在文件系统上 git clone 带有符号链接的存储库时,符号vboxsf链接都可以正常工作,但是 git 总是说文件已更新,即使更改已添加到存储库中也是如此。

当我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 在vboxsf带有 Windows 主机的 virtualbox 共享文件夹文件系统()上工作(出于我的目的)。

  1. 以管理员身份运行 Virtual Box - 允许在主机文件系统上创建符号链接,因此允许来宾文件系统创建和使用符号链接
  2. 用于git update-index --assume-unchanged每个符号链接。这允许提交其他文件,而无需git考虑符号链接已更改。

问题

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

1 回答 1

0

根据mount输出使用默认同步文件夹,即 VirtualBox 的vboxsf.

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

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

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

快速示例:

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

卸载 sshfs =>sudo fusermount -u /mnt/sshfs

于 2013-09-13T01:28:44.110 回答