“git diff”什么都不做

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

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

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

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

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

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

任何想法,我可以做什么来解决这个问题?

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

git diff [–options] [ – ] […]

这种forms是查看你所做的相对于索引的变化(下一次提交的登台区域)。 换句话说,差异是你可以告诉git进一步添加到索引,但你还没有。

请参阅文档了解更多详情。 特别是向下滚动到示例,并阅读本节:

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

在你的工作区之外,正如你猜测的那样,git不知道该怎么区分,所以你必须明确地指定两条path进行比较,因此也就是用法消息。

注意: 从2013年第四季度开始,git 1.8.5或1.9 :

当用户在工作树外面键入“ git diff ”时,认为他是在一个内部,当前的错误信息是单行的:

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

可能不足以使他意识到这个错误。

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


看到:

  • 提交286bc123cd ( gitster,Junio C Hamano ),它解释了git diff --no-index可以像一个常规(非git) diff
  • 提交b214eddfb2 (Dale R. Worley),其中澄清了错误消息:

澄清“ diff --no-index ”的文档。
声明当不在仓库内时,– --no-index是隐含的,两个参数是强制的。

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

 To compare two paths outside a working tree: usage: git diff --no-index <path> <path> 

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

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

git diff old_dir new_dir

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

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

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

什么都没发生