首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git-diff:不考虑线订单。

git-diff:不考虑线订单。
EN

Stack Overflow用户
提问于 2013-12-04 13:58:23
回答 2查看 2.2K关注 0票数 19

我的存储库中有一个由软件程序生成的文件。

这个程序有时会重新排序文件中的行,这并不重要,因为行顺序并不重要。问题是,当执行git-diff时,很难看出任何事情是否真的发生了变化。

是否要执行不同的操作,哪些行的顺序没有被考虑?或者,如果不可能使用git-diff,您可能会想到任何shell命令?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-04 15:31:41

到头来,我在手动运行这个命令,然后才会知道文件是实际更改了,还是只是重新排序了一行。也许我会为它设置一个吉特钩。

代码语言:javascript
复制
diff -wB <(sort file.txt) <(git show HEAD:file.txt | sort -)

此命令将工作目录中的文件与分支上一次提交时的文件进行比较,而不考虑行顺序。

在我的例子中,我使用-w-B来忽略程序还添加的空格和行。来自man diff

-w, --ignore-all-space ignore all white space -B, --ignore-blank-lines ignore changes whose lines are all blank

票数 12
EN

Stack Overflow用户

发布于 2014-06-16 04:10:45

下面是使用DIFF_EXTERNAL_TOOL进行的一次相当恶劣的黑客攻击:

代码语言:javascript
复制
#!/bin/bash

# this will be called with path old-file old-hex old-mode new-file new-hex new-mode
echo $*
diff -uw <(tr -s '[[:space:]]' < "$2" | sort -fbi) <(tr -s '[[:space:]]' < "$5" | sort -fbi) || true

这是可以调用的,假设您将上述脚本抛入wdiff-sort程序中的$PATH中。

代码语言:javascript
复制
GIT_EXTERNAL_DIFF=wdiff-sort git diff

例如,在这里,我如何使用它来比较绑定区域文件的一系列更改:

代码语言:javascript
复制
#!/bin/bash

#                path old-file old-hex old-mode new-file new-hex new-mode
#echo $*
atomize_zone="sed 's/^@//;/^\;/d;s/[[:space:]][[:space:]]*/ /g' | egrep -v '^.TTL (1D|86400)' | grep -v '; serial' | grep -v 'RR TTL' | grep -v '^.TTL 1H' | egrep -v 'IN SOA (ns1|bureau).koumbit.net' | sort -fbi" 

output=$(diff -uw <(sh -c "$atomize_zone" <"$2") <(sh -c "$atomize_zone" < "$5") || true)

if [ ! -z "$output" ]; then
        echo $1
        cat <<EOF
$output
EOF

这必须看上去完全疯狂,但它实际上工作很好,并允许清理文件以各种方式之前,扩散。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20377294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档