当我在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
)上工作(出于我的目的)。
git update-index --assume-unchanged
。这允许提交其他文件,而git
认为符号链接已被更改。问题
答案 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