在Git repo中覆盖了符号链接文件,但符号链接标志仍然存在

时间:2012-06-22 07:03:25

标签: git symlink

我的git repo中有一些符号链接,我从两台机器(比如A和B)处理。两者都运行Linux,但是B运行通过VirtualBox,文件系统是从Win7主机系统共享的。因此,B不支持符号链接。

在B上做一些工作时,我意识到在我的情况下使用符号链接是一个坏主意。所以在B上我复制了所有目标,以便它们覆盖“符号链接”。然后我承诺,把它推到我的中央仓库,然后把它拉到A上。

问题在于A,其中文件现在具有符号链接的权限,但具有文件的内容。例如。如果原始文件是包含“Lorem ipsum dolor sit amet ...”的文本文件,则A上的符号链接现在指向无意义的路径'Lorem ipsum dolor sit amet ...'并且其上的所有文件操作都将失败。

示例(首先,foo.png是../bar.png的符号链接,两者都在回购中):

user@B> cat foo.png
../bar.png
user@B> cp ../bar.png ./foo.png
user@B> git add foo.png
user@B> git commit -m "Removed symlink"
user@B> git push

...

user@A> git pull
user@A> ls -l foo.png
lrwxrwxrwx 1 user user 8 2012-06-22 15:13 foo.png -> ?PNG????
user@A> git status foo.png
# 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:   foo.png
#

我无法想办法从文件中删除符号链接标志,或者以正常文件结帐,我希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:1)

如果其他人有这个问题,我发现快速而肮脏(而且显而易见)的解决方案是:

  1. 删除A
  2. 上有问题的符号链接
  3. 将相应的文件从B复制到A.
  4. 'git add'文件
  5. 提交并推送
  6. 当您暂存要提交的文件时,它们将标记为

    user@A> git status .
    # [...]
    #     typechange: foo.png