错误或功能?由符号链接替换的路径被git“遗忘”

时间:2010-09-09 17:40:47

标签: git

我在这里看到了一些git-with-symlinks的问题,但是我仍然对这个问题感到困惑。

假设我已经将目录添加到git存储库,然后使用具有相同名称的符号链接替换目录。文件“仍然存在”,因为它们仍然具有通过符号链接的相同路径。但是,由于git不遵循链接,因此表面上忘记/删除了文件。但是,当我运行“git status”时,没有提到这一点。

在我意识到通过运行“git diff”来删除文件被删除之前,我很高兴地想到没有错。

因此,我有两个问题:文件是否有理由在“git status”中显示为已删除或移动?另外,如何重新添加文件?

对于那些不确定我在说什么的人,请考虑这个例子:


$ git init
$ mkdir path
$ touch path/file
$ git add path
$ git commit -a -m "added file"

则...


$ git status
# On branch master
nothing to commit (working directory clean)

则...


$ mv path path2
$ ln -s path2 path
$ git status
# On branch master
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#   path
#   path2/
nothing added to commit but untracked files present (use "git add" to track)

...然而


$ git diff
diff --git a/path/file b/path/file
deleted file mode 100644
index e69de29..0000000


谢谢! 汤姆

2 个答案:

答案 0 :(得分:1)

我说这显然是一个错误。据推测,status使用的机制与diff不同,因此它不小心看到path/file没有变化,也没有意识到它在链接后面。它处理目录 - >常规文件更改很好,如果符号链接指向包含相应文件的目录,也可以正常工作,所以这只是这种特殊情况。接得好!您可能希望将其报告给git邮件列表(git@vger.kernel.org),

答案 1 :(得分:0)

您使用的是哪个版本的git,我使用的是1.7.0.4,我无法复制您的错误,通过我的测试显示原始文件是一个typechange并且新文件是新文件。

http://pastie.org/1149236