14

我正在尝试创建一个要通过reviewboard使用的补丁文件。
这将是最初的补丁。

diff -ruN --exclude=.git empty_dir working_dir > mypatch_00.patch有效,但我收到“所选文件似乎不是差异”。错误。

有没有办法使用 git-diff 或 diff 让它工作?谢谢

4

3 回答 3

24

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

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
于 2013-01-31T10:23:06.510 回答
21

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

empty_tree=$(git hash-object -t tree /dev/null) 
git diff-tree -p ${empty_tree} $MY_COMMIT [${files}...]

的值${empty_tree}总是4b825dc642cb6eb9a060e54bf8d69288fbee4904,但我不喜欢在那里有幻数。

于 2014-07-31T16:28:34.623 回答
0

我更喜欢“空”作为标签。最简单的方法是:

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
于 2019-03-01T13:59:26.863 回答