前文中,基于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. Android-Activity启动模式-应用场景

    在上一篇博客中,Android-Activity启动模式(launchMode),就介绍了Activity四种启动模式的特点与使用等,但是到底什么样子的场景,去使用什么样子的启动模式呢 Activit ...

  2. Postgres-XL9.5r1.6 搭建

    Postgres-XL9.5r1.6 安装部署1,环境准备 关闭防护墙 关闭selinux 下载依赖 yum install -y flex bison readline-devel zlib-dev ...

  3. easyui 导出 excel

    <div style="margin-bottom:5px" id="tb"> <a href="#" class=&qu ...

  4. 深入理解js立即执行函数

    看过jQuery源码的人应该知道,jQuery开篇用的就是立即执行函数.立即执行函数常用于第三方库,好处在于隔离作用域,任何一个第三方库都会存在大量的变量和函数,为了避免变量污染(命名冲突),开发者们 ...

  5. C#语言各个版本特性(二)

    二.排序Product 1.按名称对产品进行排序,以特定顺序显示一个列表的最简单方式就是先将列表排序,再遍历并显示其中的项. C#1.1 使用IComparer对ArrayList进行排序 produ ...

  6. [翻译]pytest测试框架(一)

    此文已由作者吴琪惠授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 纯官网译文而已... pytest是一个成熟的.全功能的python测试工具. pytest框架编写测试用例 ...

  7. “全栈2019”Java异常第十八章:Exception详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  8. Python FLask Web 学习笔记:jinjia2的使用方法1

    # coding:utf-8 from jinja2 import Template x = """ <p>大爷的孙子</p> <ul> ...

  9. redis5.0.4-cluster集群搭建及jedis客户端操作

    一.去官网下载redis5.0 https://redis.io/download 然后解压安装 $ .tar.gz $ cd redis- $ make 二.准备配置文件 打开redis-5.0.4 ...

  10. tomcat 线程模型

    最近看到了内网ATA上的一篇断网故障时Mtop触发tomcat高并发场景下的BUG排查和修复(已被apache采纳),引起了我的好奇,感觉原作者对应底层十分了解,写的很复杂.原来对于tomcat的线程 ...