首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归目录-接受外部diff的diff

递归目录-接受外部diff的diff
EN

Stack Overflow用户
提问于 2013-12-17 06:02:36
回答 2查看 341关注 0票数 1

考虑一下在两个被分叉的项目中找到改变了什么的任务。

diff -r使我更加接近:它能够找到每个目标文件夹中缺少的文件,并指出通过显示它们的差异而更改的文件。

我想使用自定义的diff实用程序。我不想在diff实用程序中实现递归目录遍历逻辑。

所以,我基本上只想要一个程序来做diff -r所做的事情,但实际上它不会继续运行差异。

这样的东西存在吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-17 06:31:17

我认为这更优雅:

代码语言:javascript
复制
diff -rq dir1 dir2 | sed -ne 's/^Files \(.*\) and \(.*\) differ$/\1\n\2/p' | xargs -n 2 sift

主要技巧是使用-q标志,它将以简短格式打印差异,例如:

代码语言:javascript
复制
Files dir1/x and dir2/x differ
Only in dir1: path/to/file
Only in dir2: path/to/another

然后你如何分析输出是你的品味问题。

最后,要正确处理文件名中的空格:

代码语言:javascript
复制
diff -rq dir1 dir2 | sed -ne 's/^Files \(.*\) and \(.*\) differ$/sift "\1" "\2"/p' | sh

将其封装在一个函数中可能是有意义的:

代码语言:javascript
复制
xdiff() {
    diff=$1; shift
    dir1=$1; shift
    dir2=$1; shift
    diff -rq $dir1 $dir2 | sed -ne 's/^Files \(.*\) and \(.*\) differ$/'$diff' "\1" "\2"/p' | sh
}

所以你可以这样称呼它:

代码语言:javascript
复制
xdiff sift dir1 dir2
票数 0
EN

Stack Overflow用户

发布于 2013-12-17 06:02:36

我认为diff -r的输出结构已经足够让我“变得聪明”了。这是它的要点。

代码语言:javascript
复制
diff -r proj1/src proj2/src | grep 'diff -r' | cut -d ' ' -f 3,4 | xargs -n 2 sift

其中,sift是我的小命令行、基于char的diff,它围绕着diff的diff输出运行。

并使用diff (GNU diffutils) 2.8.1

我对更优雅的解决方案也是开放的!

编辑:谢@janos,-q选项使其非常理想!

最后要提到的一点是,这可以通过在Mac命令行上的opendiff程序(将所需的dir中的相应文件指定为目标,这当然已经在Git中了,对吗?)变得非常强大。快速完成手动合并。

事实上,当Git需要人的合并时,设置Git使用的opendiff可能是一条路。

只是我还没有遇到过很多跨相同代码回购的合并冲突情况,主要是当分叉式回购(以及对包含共享代码的不同项目进行单独的repos )时,我需要进行这种合并,以手动使我的“主”项目与战壕中的更改保持一致。

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

https://stackoverflow.com/questions/20627075

复制
相关文章

相似问题

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