从无到有创建git差异

从无到有创建git差异,git,diff,patch,review-board,Git,Diff,Patch,Review Board,我正在尝试创建要通过使用的修补程序文件。 这将是最初的补丁 diff-ruN--exclude=.git empty\u dir working\u dir>mypatch\u 00.patch运行正常,但我收到一个“所选文件似乎不是diff”错误 有没有任何方法可以使用git diff或diff使其工作?谢谢如果您想获得初始提交的差异(可能我误解了您的问题),可以使用 git show COMMIT 或者,要将其作为文件获取,请执行以下操作: git format-patch -1 COMM

我正在尝试创建要通过使用的修补程序文件。
这将是最初的补丁

diff-ruN--exclude=.git empty\u dir working\u dir>mypatch\u 00.patch
运行正常,但我收到一个“所选文件似乎不是diff”错误


有没有任何方法可以使用git diff或diff使其工作?谢谢

如果您想获得初始提交的差异(可能我误解了您的问题),可以使用

git show COMMIT
或者,要将其作为文件获取,请执行以下操作:

git format-patch -1 COMMIT
其中,
COMMIT
是此提交的修订版。如果这也是您当前的提交,那么您根本不必指定它

但是,如果您的提交不是初始的,并且您希望获得历史记录的完整差异,则需要首先创建空分支:

git checkout --orphan empty         # Create orphaned branch
git read-tree --empty               # Remove all files from index
git commit --allow-empty -m 'Empty' # Initial commit
现在,您可以对空分支执行完全差异:

git diff empty..master

如果您想要从无到特定提交的完整差异,有一种比接受答案更简单的方法:

empty_tree=$(git hash-object -t tree /dev/null) 
git diff-tree -p ${empty_tree} $MY_COMMIT [${files}...]
${empty\u tree}
的值始终是
4B825DC642CB6EB9A060E54BF8D6928FBEE4904
,但我不希望在其中包含幻数。

我更喜欢将“empty”作为标记。最简单的方法是:

git tag empty $(git hash-object -t tree /dev/null)
因为标记可以直接指向树,而无需提交。 现在要获取工作树中的所有文件:

git diff --name-only empty
或与stat相同:

git diff --stat empty
所有文件都是不同的:

git diff empty
检查所有文件中的空白:

git diff --check empty

差异的内容是什么?我认为您正在运行的命令只会产生一个文件名列表,而不是实际的差异。这也是您使用
git log-p所得到的,否则它将对您有用。@AndrewMyers我得到了关于
git show
git format patch
的这类条目。我想创建一个diff,这意味着它将只添加行,并且我的文件将是完全绿色的。这是我从
diff-ruN--exclude=.git empty\u dir working\u dir>mypatch\u 00.patch中得到的。但是reviewboard不认为它是正确的差异。啊,我想你想要的是git中第一次修订的差异,很抱歉误解。。。我已经更新了答案,也涵盖了这一点。现在这正是我想要的。非常感谢。编辑:看来我只能在20小时内奖励我的赏金了。明天你就可以得到它了。我建议在删除索引文件时使用
git read tree--empty
。@RichardHansen确实这是一种更干净的方法,我不知道这个命令。更新了答案。最佳答案(:还提供了一个很好的搜索关键字以获取更多信息(4b825d…)。