当我在文件系统上 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 共享文件夹文件系统()上工作(出于我的目的)。
- 以管理员身份运行 Virtual Box - 允许在主机文件系统上创建符号链接,因此允许来宾文件系统创建和使用符号链接
- 用于
git update-index --assume-unchanged
每个符号链接。这允许提交其他文件,而无需git
考虑符号链接已更改。
问题
- 符号链接在 Windows 中不起作用(我不认为 - 虽然我不需要在那里使用它们,所以没有尝试太多)
- 为了创建新的符号链接或编辑旧的符号链接,我必须在 ext4 卷上进行。