前文中,基于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. Unity3d中使用Lua

    对于手机游戏,如果可以在线更新以实现bug修复.新功能添加等等,其好处自不必多说. 通过C#的反射机制,也可以实现某种程度上的脚本级更新,具体可以参考 http://docs.unity3d.com/ ...

  2. 使用centos官方镜像制作jdk8环境镜像

    首先将jdk文件或者tar包放在/var/local路径下 然后Dockerfile中写 # 以 centos7 为基础镜像 FROM centos:latest MAINTAINER chen # ...

  3. 【MVC】输出HTML内容,不输出HTML标签

    第一种方式: @Html.Raw("内容") 第二种方式 @(new HtmlString("<h1>abcd</h1>")) 第三种方 ...

  4. cesium编程入门(六)添加 3D Tiles,并调整位置,贴地

    添加 3D Tiles,并调整位置 3D Tiles 是什么 3DTiles数据集是cesium小组AnalyticlGraphics与2016年3月定义的一种数据集,3DTiles数据集以分块.分级 ...

  5. pageadmin CMS Sql Server2008 R2数据库安装教程

    sql sever数据库建议安装sql2008或以上版本,如果电脑上没有安装数据库,参考下面步骤安装. sql2008 r2下载地址:点击下载   提取码: wfb4 下载后点击安装文件,安装步骤如下 ...

  6. Wannafly挑战赛29题解

    这套题目非常有意思啊23333--话说为啥没有上条先生的呢-- 传送门 \(A\) 御坂美琴 蠢了--首先先判总共加起来等不等于\(n\),不是的话就不行 然后dfs记录\(n\)不断分下去能分成哪些 ...

  7. 点击文字,把input type="radio"也选中

    本文原文地址:https://my.oschina.net/jack088/blog/469815 1. <label> <input type="radio" ...

  8. Leetcode 98 验证二叉搜索树 Python实现

    给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是二叉搜索 ...

  9. Python的科学计算包matplotlib setup

    回想起大学四年 专业一直使用matlab,然而我却没在PC上装成功过,以前懒于思考这种数学工具的作用,直到最近,大学同学研究生要毕业了,几经交流,和自己阅读了一些机器学习的教材之后,发觉科学计算包和画 ...

  10. Spring中applicationContext.xml详解

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...