bal*_*lki 105 git diff git-diff
如何创建适合在坩埚中检查的补丁?
git diff branch master --no-prefix > patch
Run Code Online (Sandbox Code Playgroud)
这只产生3行上下文.所以我做了以下几点
git diff --unified=2000 branch master --no-prefix > patch
Run Code Online (Sandbox Code Playgroud)
希望所有文件都少于2000行.有没有办法告诉git包含补丁文件中的所有行而不必指定最大行?
c24*_*24w 86
这看起来非常好用:
git diff --no-prefix -U1000
Run Code Online (Sandbox Code Playgroud)
随着警告:
该
-U标志指定上下文行.如果更改之间的行数超过1000行,则可能需要增加此值.
Ezr*_*zra 48
我知道这是旧的,但我也不喜欢硬编码的解决方案,所以我测试了这个:
git diff -U$(wc -l MYFILE)
Run Code Online (Sandbox Code Playgroud)
使用-U似乎是解决问题的唯一方法,但使用行计数可以证明它可以在非常大的文件中进行小的更改.
注:git1.8.1rc1宣布(2012年12月8日)包括:
diff.context可以使用新的配置变量" "来提供补丁输出中的默认上下文行数,以覆盖硬编码的默认值3行.
这样可以帮助生成更完整的上下文.
我只是使用
git diff -W Git.md
Run Code Online (Sandbox Code Playgroud)
列出文件的完整补丁。从man git diff:
-W, --function-context
将整个函数显示为每个更改的上下文行。
得到灵感,所以我添加了一个 git 别名。
$ cat ~/.gitconfig | fgrep diff
df = "!git diff -U$(wc -l \"$1\" | cut -d ' ' -f 1) \"$1\""
$ git df <file>
Run Code Online (Sandbox Code Playgroud)
更新:
刚刚发现git df有时不起作用,因为执行git alias时目录发生了变化。(请参阅git 别名在错误的目录中操作)。@Moises Soto还提到在 macOS 上该wc命令的工作方式不同(输出前面有 6 个空格wc -l)并建议使用awk. 这是更新后的版本:
$ 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}" | awk '{print $1}') "${FILE}"
done
exit 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35704 次 |
| 最近记录: |