我认为这是一个配置错误,但我无法弄清楚在哪里。常规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存储库中。
关于我可以做些什么来解决这个问题的任何想法?
答案 0 :(得分:101)
git diff
的默认输出是尚未提交/添加到索引的更改列表。如果没有变化,则没有输出。
git diff [--options] [ - ] [...]
此表单用于查看您对索引所做的更改(下一次提交的暂存区域)。换句话说,差异就是你可以告诉git进一步添加到索引但你仍然没有。
有关详细信息,请参阅documentation。特别是,向下滚动到示例,并阅读本节:
$ git diff # (1)
$ git diff --cached # (2)
$ git diff HEAD # (3)
在您的工作区之外,正如您所猜测的那样,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
”添加到错误消息中。
请参阅:
git diff --no-index
可以像普通(非git)diff
一样行事。澄清“
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
什么都没发生