“git diff”什么都不做

时间:2010-08-27 00:51:49

标签: git git-diff

我认为这是一个配置错误,但我无法弄清楚在哪里。常规git命令似乎工作正常,但“git diff”什么都不做。为了安全起见,我从.gitconfig文件中删除了外部diff工具。这是通过MacPorts安装的,是lates版本(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存储库中。

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

5 个答案:

答案 0 :(得分:101)

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

  

git diff [--options] [ - ] [...]

     

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

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

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. 使用索引
  2. 区分工作副本
  3. 使用HEAD
  4. 区分索引
  5. 使用HEAD
  6. 区分工作副本

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

答案 1 :(得分:4)

注意:starting git 1.8.5 or 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>

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

git diff old_dir new_dir

如果它们之间有任何差异,输出将按预期显示给您。

答案 4 :(得分:0)

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

$ git difftool HEAD HEAD^ -- path/that-not-exists
什么都没发生