How to get git diff with full context?
如何创建适合在坩埚中检查的补丁?
1 | git diff branch master --no-prefix > patch |
这只产生3行上下文。 所以我做了以下几点
1 | git diff --unified=2000 branch master --no-prefix > patch |
希望所有文件都少于2000行。 有没有办法告诉git包含补丁文件中的所有行而不必指定最大行?
这看起来非常好用:
1 | git diff --no-prefix -U1000 |
随着警告:
The
-U flag specifies lines of context. You might need to increase this if there are more than 1000 lines between your changes.
我知道这是旧的,但我也不喜欢硬编码的解决方案,所以我测试了这个:
1 | git diff -U$(wc -l MYFILE) |
使用-U似乎是解决问题的唯一方法,但使用行计数可以证明它可以在非常大的文件中进行小的更改。
注:git1.8.1rc1宣布(2012年12月8日)包括:
A new configuration variable"
diff.context " can be used to give the default number of context lines in the patch output, to override the hardcoded default of 3 lines.
这样可以帮助生成更完整的上下文。
得到了灵感,所以我添加了一个git别名。
1 2 3 | $ cat ~/.gitconfig | fgrep diff df ="!git diff -U$(wc -l "$1" | cut -d ' ' -f 1) "$1"" $ git df <file> |
更新:
刚发现"git df"有时不起作用,因为执行git别名时目录更改了。 (请参阅git别名在错误的目录中运行)。
所以这是更新版本:
1 2 3 4 5 6 7 8 9 | $ cat ~/.gitconfig | fgrep df df ="! [ "$GIT_PREFIX" != "" ] && cd "$GIT_PREFIX"; ~/bin/git_df.sh" $ $ cat ~/bin/git_df.sh #!/bin/bash for FILE in $@; do git diff -U$(wc -l"${FILE}" | cut -d ' ' -f 1)"${FILE}" done exit 0 |
这在Mac OS上对我有用:
1 | git diff -U$(wc -l main.htm | xargs) |
请参阅"如何从Bash变量中修剪空格?"