svn diff和vimdiff的使用
SVN的子命令SVN diff功能介绍
2010-05-24 14:16 佚名 字号:T | T
本文向大家介绍一下SVN的子命令SVN diff,它的主要用法师比较两条路径的区别,在这里和大家分享一下,希望大家共同学习。
AD:WOT2014:用户标签系统与用户数据化运营培训专场
本节和大家讨论一下版本控制工具SVN的子命令SVN diff使用情况,包括子命令SVN diff概念的基本介绍,以及关于子命令SVN diff的一个实例介绍,下面我们就为大家一一讲解。
名称
svn diff — 比较两条路径的区别。
概要
diff [-c M | -r N[:M]] [TARGET[@REV]...]
diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] [PATH...]
diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]
描述
显示两条路径的区别,子命令SVN diff有三种使用方式:
运行svn diff以标准差别格式查看本地工作拷贝修改的内容。
显 示TARGET在REV的样子时两个修订版本之间所作的修改,TARGET可以是任何工作拷贝路径或任何URL,如果TARGET是工作拷贝路径,则N缺 省是BASE,而M是工作拷贝;如果是URL,则必须指定N,而M缺省是HEAD。“-c M”选项与“-r N:M”等价,其中N = M-1。使用“-c -M”则相反:“-r M:N”的意思是N = M-1。
显示在OLDREV的OLD-TGT和NEWREV的NEW- TGT之间的区别。如果提供PATH,则与OLD-TGT和NEW-TGT关联,将输出限制在那些路径。OLD-TGT和NEW-TGT可能是工作拷贝路 经或URL[@REV]。如果没有指定,NEW-TGT缺省是OLD-TGT。“-r N”设置OLDREV缺省为N,而-r N:M设置OLDREV缺省为N,而NEWREV缺省为M。
svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]的简写方式。
svn diff -r N:M URL是svn diff -r N:M --old=URL --new=URL的简写。
svn diff [-r N[:M]] URL1[@N] URL2[@M]是 svn diff [-r N[:M]] --old=URL1 --new=URL2的简写。
TARGET是一个URL,然后可以使用前面提到的--revision或“@”符号来指定N和M。
如果TARGET是工作拷贝路径,则--revision选项的含义是:
--revision N:M
服务器比较 TARGET@N和TARGET@M。
--revision N
客户端比较TARGET@N和工作拷贝。
(无--revision)
客户端比较base和 TARGET的TARGET。
如果使用其他语法,服务器会比较URL1和URL2各自的N和M。如果省掉N或M,会假定为HEAD。
缺 省情况下,svn diff忽略文件的祖先,只会比较两个文件的内容。如果你使用--notice-ancestry,比较修订版本(也就是,当你运行svn diff比较两个内容相同,但祖先历史不同的对象会看到所有的内容被删除又再次添加)时就会考虑路径的祖先。这是子命令SVN diff的描述。
选项
--revision (-r) ARG
--change (-c) ARG
--old ARG
--new ARG
--non-recursive (-N)
--diff-cmd CMD
--extensions (-x) "ARGS"
--no-diff-deleted
--notice-ancestry
--summarize
--force
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR
例子:
我们来看一下SVN子命令SVN diff的一个实例:比较BASE和你的工作拷贝(svn diff最经常的用法):
$ svn diff COMMITTERS
Index: COMMITTERS
===================================================================
--- COMMITTERS (revision 4404)
+++ COMMITTERS (working copy)
查看文件COMMITTERS在修订版本9115修改的内容:
$ svn diff -c 9115 COMMITTERS
Index: COMMITTERS
===================================================================
--- COMMITTERS (revision 3900)
+++ COMMITTERS (working copy)
察看你的工作拷贝对旧的修订版本的修改:
$ svn diff -r 3900 COMMITTERS
Index: COMMITTERS
===================================================================
--- COMMITTERS (revision 3900)
+++ COMMITTERS (working copy)
使用“@”语法与修订版本3000和35000比较:
$ svn diff http://svn.collab.net/repos/svn/trunk/COMMITTERS@3000 http://svn.collab.net/repos/svn/trunk/COMMITTERS@3500
Index: COMMITTERS
===================================================================
--- COMMITTERS (revision 3000)
+++ COMMITTERS (revision 3500)…
使用范围符号来比较修订版本3000和3500(在这种情况下只能传递一个URL):
$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk/COMMITTERS
Index: COMMITTERS
===================================================================
--- COMMITTERS (revision 3000)
+++ COMMITTERS (revision 3500)
使用范围符号比较修订版本3000和3500trunk中的所有文件:
$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk
使用范围符号比较修订版本3000和3500trunk中的三个文件:
$ svn diff -r 3000:3500 --old http://svn.collab.net/repos/svn/trunk COMMITTERS README HACKING
如果你有工作拷贝,你不必输入这么长的URL:
$ svn diff -r 3000:3500 COMMITTERS
Index: COMMITTERS
===================================================================
--- COMMITTERS (revision 3000)
+++ COMMITTERS (revision 3500)
使用--diff-cmdCMD-x来指定外部区别程序
$ svn diff --diff-cmd /usr/bin/diff -x "-i -b" COMMITTERS
Index: COMMITTERS
===================================================================
0a1,2
> This is a test。子命令SVN diff讲解在这里就告一段落了,请关注本节的其他相关报道。
使用vimdiff作为svn diff的查看代码工具
1. vimdiff file1 file2打开两个文件的对比,会对不同的地方做高亮指示。
2. ]c跳到下一个不同行,[c 跳到上一个
3. 在一行不同处,do将另一个buffer的改动应用于当前buffer
dp 将当前buffer的该行内容应用于另一个buffer
4. 因为两个buffer横向对比,而屏幕宽度有限,所以每次要到两个buffer分别:set wrap来使其折行,
为了省事,写一个键盘影射来做这个事。
func Wrap()
:set wrap
endfunc
map <F10> :call Wrap() <CR><C-W><C-W> :call Wrap() <CR> <C-W><C-W>
imap <F10> <Esc>:call Wrap() <C-W><C-W> :call Wrap() <C-W><C-W>
http://www.cnblogs.com/zhouej/archive/2012/02/09/2343756.html
在linux下,直接使用svn diff命令查看代码的修改是很吃力的,于是在网上搜索到了一个比较好的解决方案,就是让vimdiff作为svn diff的查看代码工具,尤其对于习惯用vim的人来说真的是很方便。
当使用svn diff命令比较某个文件的修改前后时,例如执行以下命令:
$ svn diff -r4420 ngx_http_limit_req_module.c
那么实际会向默认的diff程序发送如下命令:
-u -L ngx_http_limit_req_module.c (revision 4420) -L ngx_http_limit_req_module.c (working copy) .svn/tmp/tempfile.tmp ngx_http_limit_req_module.c
svn官方FAQ中对于svn diff的解释(中文、英文):
当 使用一个外部的diff命令时,Subversion会生成一个非常复杂的命令行。第一个参数就是具体的--diff-cmd,然后就是具体的 --extensions (尽管使用空白的 --符号时会忽略扩展),或者如果没有指定--extensions或者--extensions为空的话,就加上‘-u’参数。第三和第四个参 数,Subversion会传递一个“-L”还有第一个文件的标签(例如,“"project_issues.html (revision 11209)”)。第五个和第六个就是另一个“-L”和第二个文件的标签。第七和第八个参数分别是第一个和第二个文件的名称(例 如,“.svn/text-base/project_issues.html.svn-base”和“.svn/tmp /project_issues.html.tmp”)。
了解了diff的内部调用命令,那么实现用vimdiff作为diff程序就比较简单了。
vimdiff在比较2个文件时,只要知道这2个文件的路径及文件名就可以了,也就是上述diff内部命令中的第7个和第8个2个参数;
同时也说明了由于diff内部命令的参数过多导致用--diff-cmd直接调用vimdiff是行不通的(命令如下)。
$ svn diff --diff-cmd vimdiff -r4420 ngx_http_limit_req_module.c
所以,我们需要自己另外写一个脚本,让这个脚本作为diff程序,获得diff的内部命令,然后只取其中的第7个和第8个参数,再传给vimdiff,这样就能解决参数多的问题了。
脚本(diffwrap.sh)如下:
shift 5
vimdiff
或者是 vim -d o "$@" 再或者是下面也是一样的
#!/bin/sh
# 配置你喜欢的diff程序路径
DIFF="vimdiff"
# SVN diff命令会传入两个文件的参数
LEFT=${6}
RIGHT=${7}
# 拼接成diff命令所需要的命令格式
$DIFF $LEFT $RIGHT
另外,svn还提供了在配置文件中修改diff默认程序的功能,这样就不用每次使用svn diff时再指定--diff-cmd了。
修改~/.subversion/config,找到如下配置行:
# diff-cmd = diff_program (diff, gdiff, etc.)
将上面那个脚本的路径添加进去就行,例如修改为
diff-cmd = /usr/local/bin/diffwrap.sh
以后,使用svn diff命令就会默认打开vimdiff比较2个文件了。
效果图:
转载于:https://my.oschina.net/alphajay/blog/286903
svn diff和vimdiff的使用相关推荐
- svn diff 使用 vimdiff 作为比较差异工具
转载自<http://www.coreymaynard.com/blog/improving-svn-diff-with-the-power-of-vim/> One of vim's n ...
- 如何使用 vimdiff 来 git diff /svn diff
#git 如何实现vimdiffgit config --global diff.tool vimdiff git config --global difftool.prompt false git ...
- 将svn diff改成用vimdiff命令进行可视化差异显示
本文对原文稍作修改. svn的其他命令可在我的 各种平台常用命令和快捷键_莫能长老的博客-CSDN博客 SVN介绍.安装及常用命令总结_莫能长老的博客-CSDN博客 这两篇文章中找到. 基本原理是通过 ...
- 使用svn diff的-r参数的来比较任意两个版本的差异
来源:http://blog.csdn.net/feliciafay/article/details/8962515 1 svn diff的用法 1.1 对比当前本地的工作拷贝文件(working c ...
- 提交代码前没有用svn st命令(只用了svn diff), 差点踩坑!
我还是建议大家在Windows上通过对比工具来提交程序, Windows上一切可见, 一目了然啊. 文件状态用颜色区分得一清二楚. 当然, 有的时候, 我们也可以在linux下提交程序. 最近我直接在 ...
- 3.14-19 wc、iconv、dos2unix、diff、vimdiff、rev
3.14 wc:统计文件的行数.单词数或字节数 wc命令用于统计文件的行数.单词数或字节数. -c 统计字节数 -w 统计单词数 -l 统计行数 -L 打印最长行的长度 -m 统计字符数 查看 ...
- L24.linux命令每日一练 -- 第三章 文件过滤及内容编辑处理命令 -- diff和vimdiff命令
3.17 diff:比较两个文件的不同 3.17.1 命令详解 [命令星级] ★★★★☆ [功能说明] diff命令可以逐行比较纯文本文件的内容,并输出文件的差异. [语法格式] di ...
- SVN使用log,list,cat,diff命令查看特定文件版本信息
来源:http://blog.csdn.net/wn_hello/article/details/47295259 svn log 展示给你主要信息:每个版本附加在版本上的作者与日期 ...
- 如何使用 vimdiff 来 git diff
git config --global diff.tool vimdiff git config --global difftool.prompt false git config --global ...
- LINUX下SVN命令大全
1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain 简写:s ...
最新文章
- JavaScript中判断为整数的多种方式
- 人人都能做游戏!3D次世代CE云端引擎发布
- java 的toString()函数
- linux 编译git 客户端源码然后安装
- java的几种对象(PO,VO,DAO,BO,POJO)解释
- 转换流/序列化/反序列化
- 软件项目管理 1.3.敏捷项目管理概念
- 微信能转发邮件吗?邮件怎么用微信发送?微信邮件怎么发?
- bash pitfall
- 艺术字生成工具 | Mixlab创意编程
- SAP 汇率处理总结
- mac怎么切换输入法(在外接键盘下)
- linux系统安全与日志分析
- 微信小程序低功耗蓝牙(BLE)开发总结
- web开发常见问题和解决方法
- 【OGG】extract不抓取日志--running状态--不能stop和kill--自动abended
- 视图实现圆角效果的三种方法及比较
- 个人开公司的流程是怎么样的?
- 【Linux】进程间通信
- 我觉得好听的曲子-持续更新中
热门文章
- POJ-3621 Sightseeing Cows 01分数(参数搜索)规划问题-最优比率环
- JDK笔记-IO流读写
- mysql用utf-8_切记:永远不要在MySQL中使用UTF-8
- controller层没反应_打过蜡的石材再做结晶没效果怎么办?
- pandas读取csv文件数据并对指定字段分类使用matplotlib在一张图里画四张折线图子图
- eclipse python java_如何使用Eclipse使用Python导入Java类?
- net core获取网站运行目录
- Git图形化操作:Revert(恢复)本地的修改到上一个版本
- Golang sha256 加密,PHP hash_hmac(‘sha256‘, $string, $key)加密,Js CryptoJS.HmacSHA256(string, key) 加密
- 几万字的博文,你自己会看吗