“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) 
- 使用索引来区分工作副本
- 用HEAD来区分索引
- 用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 
什么都没发生