考虑一下在两个被分叉的项目中找到改变了什么的任务。
diff -r使我更加接近:它能够找到每个目标文件夹中缺少的文件,并指出通过显示它们的差异而更改的文件。
我想使用自定义的diff实用程序。我不想在diff实用程序中实现递归目录遍历逻辑。
所以,我基本上只想要一个程序来做diff -r所做的事情,但实际上它不会继续运行差异。
这样的东西存在吗?
发布于 2013-12-17 06:31:17
我认为这更优雅:
diff -rq dir1 dir2 | sed -ne 's/^Files \(.*\) and \(.*\) differ$/\1\n\2/p' | xargs -n 2 sift主要技巧是使用-q标志,它将以简短格式打印差异,例如:
Files dir1/x and dir2/x differ
Only in dir1: path/to/file
Only in dir2: path/to/another然后你如何分析输出是你的品味问题。
最后,要正确处理文件名中的空格:
diff -rq dir1 dir2 | sed -ne 's/^Files \(.*\) and \(.*\) differ$/sift "\1" "\2"/p' | sh将其封装在一个函数中可能是有意义的:
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
}所以你可以这样称呼它:
xdiff sift dir1 dir2发布于 2013-12-17 06:02:36
我认为diff -r的输出结构已经足够让我“变得聪明”了。这是它的要点。
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 )时,我需要进行这种合并,以手动使我的“主”项目与战壕中的更改保持一致。
https://stackoverflow.com/questions/20627075
复制相似问题