运行git diff时忽略文件中的某些行
比方说,我想比较两个日志文件的差异,这不是我真正的用例,但很好地指出了问题,但因为它们在开始时有时间戳,而且这些时间戳明显不同,所以它们会将每一行显示为不同的 让我们来考虑这个愚蠢的例子:运行git diff时忽略文件中的某些行,git,git-diff,Git,Git Diff,比方说,我想比较两个日志文件的差异,这不是我真正的用例,但很好地指出了问题,但因为它们在开始时有时间戳,而且这些时间戳明显不同,所以它们会将每一行显示为不同的 让我们来考虑这个愚蠢的例子: 00:00:05 something1 00:00:06 something1 00:00:06 something2 00:00:07 something2 00:00:07 something__3 00:00:08 something__4 00:00:08 something5
00:00:05 something1 00:00:06 something1
00:00:06 something2 00:00:07 something2
00:00:07 something__3 00:00:08 something__4
00:00:08 something5 00:00:09 something5
在这里,我们有两个并排的日志,每一行的时间间隔都不同,但只有第3行的内容不同-something3与something4
我现在做的是在区分时间戳之前使用Notepad++擦除时间戳,但这需要大量的手工工作,尤其是对于许多文件。我希望我能告诉git diff在区分文件之前先对文件应用一个过滤器
可能吗?我在这里看到了这个问题-,其中他们讨论了diff-u-I.*'test{1,2},但是git-diff不识别-I标志。假设这两个修订是commit1和commit2,存储库中的文件路径是foo/bar.log git cat file-p commit1:foo/bar.log打印一个版本的文件内容。awk删除第一个字段,即时间戳。git散列对象-stdin-w创建一个blob。git diff比较了这两个blob-U0从输出中删除上下文 这两个小家伙在晃来晃去。您可以运行git gc-prune=now来删除它们。你也可以别管他们,因为他们几天后就会被消灭 ~/.bashrc中的示例函数:
要调用该函数,请使用difflog HEAD~1 foo/bar。我想知道是否可以将其转换为.bashrc函数。我们可以用HEAD和HEAD~1替换提交,也可以将工作文件夹文件与HEAD进行比较。@sashoalm更新了答案。您可以定义函数名和参数。
git diff -U0 \
$(git cat-file -p commit1:foo/bar.log | awk '{$1=""}1' | awk '{$1=$1}1' | git hash-object --stdin -w) \
$(git cat-file -p commit2:foo/bar.log | awk '{$1=""}1' | awk '{$1=$1}1' | git hash-object --stdin -w)
function difflog() {
local left=$1
local right=$2
local path=$3
git diff -U0 \
$(git cat-file -p ${left}:${path} | awk '{$1=""}1' | awk '{$1=$1}1' | git hash-object --stdin -w) \
$(git cat-file -p ${right}:${path} | awk '{$1=""}1' | awk '{$1=$1}1' | git hash-object --stdin -w)
git gc --prune=now --quiet
}