前文中,基于git介绍了webrev工具。实际上,webrev工具还支持hg和svn。最近的工作中不可避免地要使用svn,故在此总结一下如何基于svn在Linux上创建webrev。顺便吐个槽,没有网页版的代码比对,用svn diff简直就是刀耕火种茹毛饮血啊!技术再娴熟的老司机,也架不住让你在高速公路上开拖拉机Orz!

以前工作上一直用版本管理工具Mercurial (命令为hg), 个人学习的话用Git, 但从来没用过Subversion (命令为svn等) 。所以,下面先简单介绍一下如何搭建一个svn的server然后初始化一个代码仓库。相比之下,基于Mercurial的代码仓库初始化实在是太容易了,只需要一条命令(hg init)就搞定。

1. 搭建一个svn的server

1.1 创建一个项目venus

root# cd /var/tmp && mkdir ducert
root# svnadmin create venus

1.2 配置项目venus

root# tree venus/conf
venus/conf
├── authz #<-- 权限相关的配置
├── hooks-env.tmpl
├── passwd #<-- 帐号相关的配置
└── svnserve.conf #<-- 资源库相关配置 0 directories, 4 files

1.2.1 配置账号 e.g. 添加用户veli, 密码为veli (见第9行)

root# cat -n passwd
1 ### This file is an example password file for svnserve.
2 ### Its format is similar to that of svnserve.conf. As shown in the
3 ### example below it contains one section labelled [users].
4 ### The name and password for each user follow, one account per line.
5
6 [users]
7 # harry = harryssecret
8 # sally = sallyssecret
9 veli = veli

1.2.2 配置权限 e.g. 给用户veli的是可以在/下面进行读写 (见第34和35行)

root# cat -n authz
1 ### This file is an example authorization file for svnserve.
2 ### Its format is identical to that of mod_authz_svn authorization
3 ### files.
...
33
34 [/]
35 veli=rw

1.2.3 配置资源库 e.g. 设置代码库的根目录(见第48行) (第19,20,27,36行只需要把对应的注释符号去掉即可)

root# cat -n svnserve.conf
1 ### This file controls the configuration of the svnserve daemon, if you
2 ### use it to allow access to this repository. (If you only allow
3 ### access through http: and/or file: URLs, then this file is
...
19 anon-access = read
20 auth-access = write
...
27 password-db = passwd
...
36 authz-db = authz
...
48 realm = /var/tmp/ducert/venus
...

1.3 启动svn server (e.g. svnserve -d -r venus)

root# cd /var/tmp/ducert && pkill svnserve

root# svnserve -d -r venus

root# ps -ef | grep venus | grep -v grep
root : ? :: svnserve -d -r venus
root# netstat -an | grep
tcp 0.0.0.0: 0.0.0.0:* LISTEN

1.4 测试svn server "venus" 可以正常工作

1.4.1 checkout

veli$ ifconfig -a | egrep "inet addr:.*255.255.255.0"
inet addr:192.168.228.128 Bcast:192.168.228.255 Mask:255.255.255.0 veli$ svn co svn://192.168.228.128 --username=veli --password=veli
Checked out revision . veli$ ls -A
.svn

1.4.2 add some files

veli$ cd /tmp && mkdir sandbox && cd sandbox
veli$ svn mkdir demo
A demo veli$ cd demo
veli$ svn add foo.c
A foo.c
veli$ svn add bar.py
A bar.py
veli$ svn add Makefile
A Makefile veli$ svn status
A .
A Makefile
A bar.py
A foo.c

1.4.3 commit

veli$ svn commit -m "05/15/2017: init demo"
Adding .
Adding Makefile
Adding bar.py
Adding foo.c
Transmitting file data ...
Committed revision .

到此为止,一个svn server就搭建好了,并且可以很流畅地工作。接下来,使用webrev工具创建代码比对网页。因为在前一节已经介绍了如何下载webrev工具,这里就不再多说了,直接使用就好。 下载webrev工具用如下命令:

git clone https://github.com/joyent/webrev.git

2. 使用webrev创建代码比对网页

2.1 checkout svn库里的demo代码

veli$ rm -rf /tmp/sandbox && mkdir /tmp/sandbox
veli$ cd /tmp/sandbox veli$ svn co svn://192.168.228.128 --username=veli --password=veli
A demo
A demo/bar.py
A demo/Makefile
A demo/foo.c
Checked out revision .

2.2 修改文件

veli$ cd /tmp/sandbox/demo

veli$ vi foo.c
veli$ svn diff foo.c
Index: foo.c
===================================================================
--- foo.c (revision 1)
+++ foo.c (working copy)
@@ -3,7 +3,7 @@
int
main(int argc, char *argv[])
{
- (void) printf("Hello World!\n");
+ printf("Hello World!\n"); return 0;
} veli$ vi bar.py
veli$ svn diff bar.py
Index: bar.py
===================================================================
--- bar.py (revision 1)
+++ bar.py (working copy)
@@ -4,9 +4,9 @@ def main(argc, argv):
print "Hello World!"
+
return 0 if __name__ == '__main__':
- argv = sys.argv
- argc = len(sys.argv)
+ argc, argv = len(sys.argv), sys.argv
sys.exit(main(argc, argv)) veli$ vi Makefile
veli$ svn diff Makefile
Index: Makefile
===================================================================
--- Makefile (revision 1)
+++ Makefile (working copy)
@@ -1,7 +1,7 @@
CC = gcc
CFLAGS = -g -Wall -m32 -all: foo
+all: foo bar foo: foo.o
$(CC) $(CFLAGS) -o $@ $<
@@ -9,7 +9,12 @@
foo.o: foo.c
$(CC) $(CFLAGS) -c $< +bar: bar.py
+ cp $< $@
+ chmod +x $@
+
clean:
rm -f *.o
clobber: clean
- rm -f foo
+ rm -f foo bar
+cl: clobber

2.3 创建webrev

veli$ export PATH=/var/tmp/webrev/bin:$PATH
veli$ webrev
WARNING: codereview(1) not found.
SCM detected: subversion
File list from: svn status ... Done.
Workspace: /tmp/sandbox
Compare against:
Output to: /tmp/sandbox/webrev
Output Files:
demo/Makefile
patch cdiffs udiffs wdiffs sdiffs frames old new
demo/bar.py
patch cdiffs udiffs wdiffs sdiffs frames old new
demo/foo.c
patch cdiffs udiffs wdiffs sdiffs frames old new
Generating PDF: Skipped: no output available
index.html: Done. veli$ cp -r /tmp/sandbox/webev /var/tmp/tmp.sandbox.webrev

2.4 通过浏览器查看

o 扉页

o foo.c.frames.html

o bar.py.frames.html

o Makefile.frames.html

有了网页版的代码比对,是不是高大上了许多?!必须地。还有更高大上的,那就是利用meld工具查看webrev/raw_files。

2.5 通过meld查看

veli$ cd /var/tmp/tmp.sandbox.webrev/raw_files && ls
new old
veli$ meld old new

o 扉页

o foo.c

o bar.py

o Makefile

结束语: 如果说"svn diff"是东风牌农用拖拉机的话(穷矮丑),那么"利用webrev创建的比对网页"就是路虎SUV(高富帅),而"基于webrev的meld对比"则是加长版的林肯(相当拉风)。 一句话,是高手就要开好车,是英雄就要用快刀!

在Linux上创建webrev(cont)[基于svn]的更多相关文章

  1. 在Linux上创建webrev[基于git]

    在Sun/Oracle工作了N(>12)年后,对webrev工具甚为喜欢,因为其易用性确实非常好.幸运的是,有工程师将webrev工具放到了GitHub上,而且支持git. 下面给出使用webr ...

  2. 在LINUX上创建GIT服务器【转】

    转自:http://blog.csdn.net/xiongmc/article/details/9176785 如果使用git的人数较少,可以使用下面的步骤快速部署一个git服务器环境. 1. Cli ...

  3. #内存不够,swap来凑# Linux上创建SWAP文件/分区

    转自:https://www.vmvps.com/how-to-create-a-swap-file-on-the-linux-os.html 很久很久以前,电脑的内存是个珍贵东西,于是乎就有了swa ...

  4. 如何在Linux上创建,列出和删除Docker容器

    本篇文章介绍的内容是关于在Linux机器上创建,列出和删除docker容器,下面我们来看具体的内容. 1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个新的容器,并为你提供 ...

  5. 在Linux上搭建VisualSVN Server(svn服务端)

    一.检查是否安装了低版本的SVN #  rpm -qa | grep subversion 如果已安装SVN,则会返回版本信息.这时需要卸载旧版本的SVN. 卸载旧版本SVN # yum remove ...

  6. Linux上创建SSH隧道

    Win上有好用的Xshell,可以做SSH隧道,但是Linux没有很好用的工具,本来gSTM还可以,但是死活装不上,也很久没更新了. 但其实,Linux上直接使用ssh命令就可以创建SSH隧道,非常方 ...

  7. 在 Linux 上创建第一个 Service Fabric Java 应用程序

    先决条件 开始之前,请安装 Service Fabric SDK.Azure CLI,并在 Linux 开发环境中设置开发群集. 如果使用 Mac OS X,则可使用 Vagrant 在虚拟机中设置 ...

  8. Linux上创建RStudio快捷方式

    在Linux平台上经常会有一些软件需要通过命令行的方式启动,这没有图标启动方便,下面是在Linux平台为RStudio创建图标链接的方法: 下面以在桌面上创建RStudio快捷方式为例: (1) 首先 ...

  9. 在linux上创建slave节点

    在slave机器上创建一登录用户,步骤如下: 切换至/usr/sbin目录,执行useradd -m test007  -d /home/test007,test007就是我们所创建的用户 执行su+ ...

随机推荐

  1. [Erlang35]Erlang18的time

    在Erlang 18中, 我们还是可以使用erlang:now/0 但也已经 deprecated啦,大量使用可能引发瓶颈. The default time warp mode has the sa ...

  2. Solr相似度名词:VSM(Vector Space Model)向量空间模型

    最近想学习下Lucene ,以前运行的Demo就感觉很神奇,什么原理呢,尤其是查找相似度最高的.最优的结果.索性就直接跳到这个问题看,很多资料都提到了VSM(Vector Space Model)即向 ...

  3. 推荐两款国人开发的html前段框架

    1.http://www.h-ui.net/  H-ui前端框架官方网站 2.http://www.builive.com/  BUI是基于JQuery的富客户端UI框架

  4. WindowsPhone模拟简易Toast弹出框

    Coding4Fun这个开源控件中有ToastPrompt这个弹出框组件,但是由于Coding4Fun太庞大,如果只用到ToastPrompt这个控件的话,整个引用不太值当的.于是自己写了一个差不多的 ...

  5. 了解什么是版本控制 & 用tortoiseSVN 建立本地版本库来管理自己的代码

    什么是版本控制 版本控制系统(Version Control System,简称VCS)广泛地应用于程序开发等领域,它可以协助你将某个指定的文件(甚至是一整个项目)返回至某个之前记录的状态,查看发生了 ...

  6. 红与黑(DFS)

    描述有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动.请写一个程序,计算你总共能够到达多少块黑色的瓷砖.输入包括多个数据集合.每个数据集 ...

  7. set 集合数据类型

    set 数据类型 set 与列表类似,区别在于 set 不能包含重复的值. In [1]: a_list = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n'] In [ ...

  8. iOS水波纹效果

    最近也是在学习一些动画效果的实现,也找了一些Demo进行练习,先放出原地址http://www.cocoachina.com/ios/20161104/17960.html,感谢大神的分享,作者对实现 ...

  9. var在PHP和JS中的使用

    一,var在PHP中的使用 var在PHP中使用很少,只在类中声明成员变量时候,可以使用var,其相当于public,而且以后逐渐用public替代var,所以在PHP中尽量不使用var声明变量. 二 ...

  10. 工作中遇到的两个问题-正则以及console

    一.今天做点击按钮验证邮箱时,遇到以下几个问题: (1)点击按钮后,执行if(regExp.test(str)),出现一种奇怪的现象:第一次输入正确邮箱验证通过,第二次输入正确邮箱就返回false,第 ...