如何创建具有完整上下文的修补程序?我尝试了--unified=2000,它提供了2000行上下文:
--unified=2000
git diff --unified=2000 branch master --no-prefix > patch
如何在不指定最大行数的情况下包含文件中的所有行?
k5hmc34c1#
This似乎工作得很好:
git diff --no-prefix -U1000
附带说明:-U标志指定了上下文的行数。如果更改之间的行数超过1000行,则可能需要增加此值。
-U
2skhul332#
我知道这是旧的,但我也不喜欢硬编码的解决方案,所以我测试了这个:
git diff -U$(wc -l MYFILE)
使用-U似乎是解决这个问题的唯一方法,但是使用行数可以保证即使在非常大的文件中进行很小的更改也能正常工作。
ds97pgxw3#
注:git1.8.1rc1 announce (December 8th, 2012)包括:可以使用新的配置变量“diff.context”来给予补丁输出中的默认上下文行数,以覆盖硬编码的默认值3行。这样可以帮助我们生成更完整的上下文。
diff.context
r7s23pms4#
有了灵感,所以我添加了一个git别名。
$ cat ~/.gitconfig | fgrep diff df = "!git diff -U$(wc -l \"$1\" | cut -d ' ' -f 1) \"$1\"" $ git df <file>
更新:刚发现“git df”有时候不起作用,因为在执行git alias的时候目录改变了。(参见git aliases operate in the wrong directory)。所以这是更新后的版本:
$ 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
weylhg0b5#
这在macOS上是可行的:
git diff -U$(wc -l main.htm | xargs)
参见"How to trim whitespace from a Bash variable?"
i34xakig6#
我只是用
git diff -W Git.md
列出文件的完整修补程序。来自man git diff:-W,--函数上下文将整个函数显示为每个更改的上下文行。
man git diff
dxxyhpgq7#
以前接受的解决方案在查看 * 特定 * 文件/提交时对我不起作用(-U选项似乎会扰乱rev/path解析),但--inter-hunk-context=在这种情况下适用于git version 2.24.0:
--inter-hunk-context=
git version 2.24.0
git diff \ --no-prefix \ --inter-hunk-context=2000 \ master -- \ path/to/file.py
如果你不知道文件的大小,你当然可以用wc -l来找到它,而不是硬编码:
wc -l
git diff \ --no-prefix \ --inter-hunk-context=$(wc -l path/to/file.py) \ master -- \ path/to/file.py
7条答案
按热度按时间k5hmc34c1#
This似乎工作得很好:
附带说明:
-U
标志指定了上下文的行数。如果更改之间的行数超过1000行,则可能需要增加此值。2skhul332#
我知道这是旧的,但我也不喜欢硬编码的解决方案,所以我测试了这个:
使用-U似乎是解决这个问题的唯一方法,但是使用行数可以保证即使在非常大的文件中进行很小的更改也能正常工作。
ds97pgxw3#
注:git1.8.1rc1 announce (December 8th, 2012)包括:
可以使用新的配置变量“
diff.context
”来给予补丁输出中的默认上下文行数,以覆盖硬编码的默认值3行。这样可以帮助我们生成更完整的上下文。
r7s23pms4#
有了灵感,所以我添加了一个git别名。
更新:
刚发现“git df”有时候不起作用,因为在执行git alias的时候目录改变了。(参见git aliases operate in the wrong directory)。所以这是更新后的版本:
weylhg0b5#
这在macOS上是可行的:
参见"How to trim whitespace from a Bash variable?"
i34xakig6#
我只是用
列出文件的完整修补程序。来自
man git diff
:-W,--函数上下文
将整个函数显示为每个更改的上下文行。
dxxyhpgq7#
以前接受的解决方案在查看 * 特定 * 文件/提交时对我不起作用(
-U
选项似乎会扰乱rev/path解析),但--inter-hunk-context=
在这种情况下适用于git version 2.24.0
:如果你不知道文件的大小,你当然可以用
wc -l
来找到它,而不是硬编码: