2012-11-29 108 views
68

如何创建适合在坩埚中检查的补丁?如何获得完整上下文的git diff?

git diff branch master --no-prefix > patch 

这只产生3行上下文。所以我做了以下

git diff --unified=2000 branch master --no-prefix > patch 

希望所有的文件将有不到2000行。有没有办法告诉git在补丁中包含文件中的所有行而不必指定最大行数?

+1

我张贴的-U 选项来显示整个文件,作为一个单独的问题http://stackoverflow.com/questions/28727424/for-git-diff-is-there-a-uinfinity-option-to-show-the-whole-file –

回答

15

我知道这是旧的,但我也喜欢硬编码解决方案,所以我测试了这一点:

git diff -U$(wc -l MYFILE) 

使用-U似乎是处理这一问题的唯一方法,但使用行计数承诺,它将适用于非常大的文件中的一个小改动。

+1

'<'没有必要。 'git diff -U $(wc -l MYFILE)MYFILE' – balki

+2

Thanks @balki,我试过你的建议,并注意到

$(wc -l MYFILE)
扩展为行计数和文件名,所以文件名的第二次使用也可以省略。我正在更新我的答案以反映这一点。 – Ezra

7

注:git1.8.1rc1 announce (December 8th, 2012)包括:

一个新的配置变量“diff.context”可被用来给出的在贴片输出上下文行默认号码,要覆盖的3条线的硬编码默认值。

这样可以帮助在这里生成更完整的上下文。

+5

但是,没有选项说'文件中的所有行' – balki

+2

我怀疑把一大堆,这将模拟“所有线” – VonC

+3

“我怀疑,把大量,这将模拟”所有线“”......除了wh它不会,然后事情就会破裂。所有这些都是无限的同义词,而一个非常大的数字就是这样 - 一个数字,而不是无穷大。 – Trenton

60

This似乎相当很好地工作:

git diff --no-prefix -U1000 

并警告:

-U标志指定上下文的行。如果您的更改之间的行数超过1000行,则可能需要增加此项。

+9

你建议的'-U'选项和asker使用的'--unified ='选项相同。唯一的区别是,你指定的上下文行数少于1000,比使用的提问者2000少。@balki想知道如何将数量增加到无穷大,但是你建议将数量减半。为什么? –

+3

@LS:是的,我现在意识到,但几年前忽略了这一点。尽管如此,这个问题比这个问题更加明显,似乎有助于这个奇怪的人在这里降落。 – c24w

+0

非常感谢您使用'git show',它也很棒! – Shakeel

相关问题