108

我认为这是某处的配置错误,但我不知道在哪里。常规的 git 命令似乎工作正常,但“git diff”什么也没做。为了安全起见,我从 .gitconfig 文件中删除了外部差异工具。这是通过 MacPorts 安装的,是最新版本 (1.7.2.2)。

我看到的是,当我从我的工作区运行“git diff”时,它只是退出,什么都不做。

$ git --version
git version 1.7.2.2
$ git diff
$ 

如果我备份一个目录,在我的根工作区之外,输入“git diff”会给我这个:

$ git diff
usage: git diff [--no-index] <path> <path>

这可能是预期的行为,因为我不在 git 存储库下。

关于我可以做些什么来解决这个问题的任何想法?

4

5 回答 5

126

的默认输出git diff是尚未提交/添加到索引的更改列表。如果没有变化,则没有输出。

git diff [--options] [--] […]

此表单用于查看您相对于索引(下一次提交的暂存区)所做的更改。换句话说,差异是你可以告诉 git 进一步添加到索引但你仍然没有。

有关更多详细信息,请参阅文档。特别是,向下滚动到示例,并阅读本节:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. 将工作副本与索引进行比较
  2. 用 HEAD 区分索引
  3. 使用 HEAD 区分工作副本

正如您所猜测的那样,在您的工作区之外,git 不知道要区分什么,因此您必须明确指定要比较的两条路径,因此使用消息。

于 2010-08-27T00:59:42.757 回答
4

注意:从 git 1.8.5 或 1.9,Q4 2013 开始

当用户在工作树外git diff键入 " "时,认为他在其中一个,当前的错误消息是单行:

usage: git diff --no-index <path> <path>

可能不足以让他意识到错误。

Not a git repository当我们进入“ --no-index”模式而没有明确的命令行选项指示我们这样做时,将“”添加到错误消息中。


看:

澄清“ diff --no-index”的文档。
声明当不在存储库中时,--no-index是隐含的,并且两个参数是强制性的。

澄清错误消息diff-no-index以通知用户 CWD 不在存储库内,因此两个参数是必需的。

To compare two paths outside a working tree:
usage: git diff --no-index <path> <path>
于 2013-09-19T13:06:25.337 回答
2

如果您的工作目录是干净的并且与上次更新没有区别,则它什么也不做。尝试编辑一个文件,然后再次运行 git diff,它应该会显示差异。

于 2010-08-27T00:54:00.553 回答
1

如果您在真实存储库或工作副本之外使用它,它的行为与 GNU diff 相同。所以你需要告知要比较的2个目录或文件。例子:

git diff old_dir new_dir.

如果它们之间有任何区别,输出将按预期显示。

于 2010-08-27T01:05:03.560 回答
0

不是你的情况,但可能是因为你传递的文件不存在

$ git difftool HEAD HEAD^ -- path/that-not-exists

什么都没发生

于 2015-12-28T16:30:27.057 回答