当找不到文件时,git-difftool将以静默方式失败



获取任何git repo并运行以下

git difftool -- asdfasdfasdsfawerf

即给它一个无效的文件名。它将立即返回,不显示差异,但它也有0个返回代码。显然,它应该会给出某种错误,因为这并不是说我的文件中没有diff,文件本身既不存在于我的工作树中,也不存在于HEAD中,所以我问了一个无效的问题。

如果您认为这是一个人为的例子,那么如果文件名键入错误,这可能是一个真正的问题。你最终认为文件中没有差异,而实际上它找不到文件。

如果找不到文件,有人知道强制它失败的方法吗?

似乎只有在使用--时才会发生这种情况。删除它解决了问题,尽管它看起来仍然是一个bug。

git difftool最终执行git diff "$@"查看第2713:行的相关源代码

2713                         if (strcmp(arg, "--"))
2714                                 continue;
2715                         argv[i] = NULL;
2716                         argc = i;

我们可以看到,当遇到CCD_ 4时,参数列表被缩短。

在代码的后面,在第2782行,如果不是上面的!strcmp("--", arg),文件名会被检查,并且会引发错误:

2781                         for (j = i; j < argc; j++)
2782                                 verify_filename(revs->prefix, argv[j], j == i);

这似乎是修订版设置中的一个错误,但我对git没有贡献,所以不能对源代码说太多,我只花了几分钟时间深入研究。

当调用git diff -- abc时,argv在被截断后将包含{ "diff" },当使用git diff abc调用时,它将包含{ "diff", "abc" }

最新更新