我正在尝试创建一个通过reviewboard使用的补丁文件。 这将是最初的补丁。
diff -ruN --exclude=.git empty_dir working_dir > mypatch_00.patch
工作,但我得到一个“所选文件似乎不是一个差异。”错误。
有没有办法让它使用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_tree}
的价值总是4b825dc642cb6eb9a060e54bf8d69288fbee4904
,但我不想在那里有神奇的数字。
我更喜欢“空”作为标签。最简单的方法是:
git tag empty $(git hash-object -t tree /dev/null)
因为tag可以直接指向tree-ish而不提交。现在获取工作树中的所有文件:
git diff --name-only empty
或者与stat相同:
git diff --stat empty
所有文件为diff:
git diff empty
检查所有文件中的空格:
git diff --check empty