从零开始创建一个git diff

时间:2013-01-28 14:19:55

标签: git diff patch review-board

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

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

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

3 个答案:

答案 0 :(得分:22)

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

显示它
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

答案 1 :(得分:20)

如果你想从完整的差异到特定的提交,那么比接受的答案更简单:

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

${empty_tree}的值始终为4b825dc642cb6eb9a060e54bf8d69288fbee4904,但我不想在那里使用幻数。

答案 2 :(得分:0)

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

git tag empty 4b825dc642cb6eb9a060e54bf8d69288fbee4904

因为标签可以直接指向树状结构,而无需提交。 现在要获取工作树中的所有文件:

git diff --name-only empty

或与stat相同:

git diff --stat empty

所有文件均以diff:

git diff empty

检查所有文件中的空格:

git diff --check empty