Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行git diff时忽略文件中的某些行_Git_Git Diff - Fatal编程技术网

运行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
}