在Linux上创建webrev(cont)[基于svn]
在前文中,基于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]的更多相关文章
- 在Linux上创建webrev[基于git]
在Sun/Oracle工作了N(>12)年后,对webrev工具甚为喜欢,因为其易用性确实非常好.幸运的是,有工程师将webrev工具放到了GitHub上,而且支持git. 下面给出使用webr ...
- 在LINUX上创建GIT服务器【转】
转自:http://blog.csdn.net/xiongmc/article/details/9176785 如果使用git的人数较少,可以使用下面的步骤快速部署一个git服务器环境. 1. Cli ...
- #内存不够,swap来凑# Linux上创建SWAP文件/分区
转自:https://www.vmvps.com/how-to-create-a-swap-file-on-the-linux-os.html 很久很久以前,电脑的内存是个珍贵东西,于是乎就有了swa ...
- 如何在Linux上创建,列出和删除Docker容器
本篇文章介绍的内容是关于在Linux机器上创建,列出和删除docker容器,下面我们来看具体的内容. 1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个新的容器,并为你提供 ...
- 在Linux上搭建VisualSVN Server(svn服务端)
一.检查是否安装了低版本的SVN # rpm -qa | grep subversion 如果已安装SVN,则会返回版本信息.这时需要卸载旧版本的SVN. 卸载旧版本SVN # yum remove ...
- Linux上创建SSH隧道
Win上有好用的Xshell,可以做SSH隧道,但是Linux没有很好用的工具,本来gSTM还可以,但是死活装不上,也很久没更新了. 但其实,Linux上直接使用ssh命令就可以创建SSH隧道,非常方 ...
- 在 Linux 上创建第一个 Service Fabric Java 应用程序
先决条件 开始之前,请安装 Service Fabric SDK.Azure CLI,并在 Linux 开发环境中设置开发群集. 如果使用 Mac OS X,则可使用 Vagrant 在虚拟机中设置 ...
- Linux上创建RStudio快捷方式
在Linux平台上经常会有一些软件需要通过命令行的方式启动,这没有图标启动方便,下面是在Linux平台为RStudio创建图标链接的方法: 下面以在桌面上创建RStudio快捷方式为例: (1) 首先 ...
- 在linux上创建slave节点
在slave机器上创建一登录用户,步骤如下: 切换至/usr/sbin目录,执行useradd -m test007 -d /home/test007,test007就是我们所创建的用户 执行su+ ...
随机推荐
- Lucene4:获取中文分词结果,根据文本计算boost
1. 要求 环境: Lucene 4.1版本/IKAnalyzer 2012 FF版本/mmseg4j 1.9版本 实现功能: 1).给定输入文本,获取中文拆分词结果:2).给定输入文本,对该文本按一 ...
- Lucene索引的【增、删、改、查】
前言 搞检索的,应该多少都会了解Lucene一些,它开源而且简单上手,官方API足够编写些小DEMO.并且根据倒排索引,实现快速检索.本文就简单的实现增量添加索引,删除索引,通过关键字查询,以及更新索 ...
- ASP.NET2.0 Newtonsoft.Json 操作类分享
JSON 是现在比较流行的数据交互格式,NET3.0+有自带类处理JSON,2.0的话需要借助Newtonsoft.Json来完成,不然自己写的话,很麻烦. 网上搜索下载 Newtonsoft.Jso ...
- Windows10 下 github ssh 访问出现 Permission denied(publickey)错误的解决方法
Windows10 下 github ssh 访问出现 Permission denied(publickey)错误的解决方法. 错误信息: git clone git@github.com:ediw ...
- .Net C# 阿拉伯数字转为中文金额数字
一个练习,将阿拉伯数字转为中文金额数字,针对包含整数的金额有问题 代码: public string ReturnStr(string inputNum) { ", }; string[] ...
- Java--下载历史版本登录账户
目前在官网下载低于jdk1.8的java jdk的时候需要登陆,这边分享一个账号,方便下载 2696671285@qq.com 密码:Oracle123 转自-- jdk下载以前版本需要的账号(转) ...
- Jenkins+.Net Core+Git集成发布 - SkyMallCore快速开发平台
准备工作:安装 Jenkins+java 直接百度安装,在此忽略 dotnet sdk(iis部署已经安装) 一:windows 部署到IIS 首先搭建IIS,站点应用程序池选择 ‘无托管代码’ 安装 ...
- c++实验6 递归
1 利用递归设计此函数. int p(int a,int b) { if(a>=b) ; else ; } //粘贴测试数据及运行结果: //测试数据 int main() { cout < ...
- Django的views视图系统
老师的博客:http://www.cnblogs.com/liwenzhou/articles/8305104.html 以看老师的博客为主 一个视图函数(类),简称视图,是一个简单的Python 函 ...
- Java中 IO类 - File类中的判断功能
package com.hxzy.IOSer;import java.io.*;public class Demo05 { public static void main(String[] args) ...