linux cont配置svn,在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 && mkdirducert

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

9veli = 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 greproot6960 2233 0 11:29 ? 00:00:00 svnserve -d -r venus

root# netstat-an | grep 3690tcp0 0 0.0.0.0:3690 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.0veli$ svn co svn://192.168.228.128 --username=veli --password=veli

Checked out revision 0.

veli$ls -A

.svn

1.4.2 add some files

veli$ cd /tmp && mkdirsandbox && cd sandbox

veli$ svnmkdirdemo

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

Transmittingfiledata ...

Committed revision1.

到此为止,一个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 revision1.

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!

");

+ printf("Hello World!

");

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 扉页

695390d20569dd5836996e89cb19e1d7.png

o foo.c.frames.html

276d6488d38857adf745a68897efbe12.png

o bar.py.frames.html

89f719b4789f0277133b584a2e280493.png

o Makefile.frames.html

846ff42733f033530f072c5a47af6d88.png

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

2.5 通过meld查看

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

new old

veli$ meld old new

o 扉页

a5b304eedd33f3c30a4d3fb3c85d431f.png

o foo.c

a657c5d8a098e0943fa5845963b739a7.png

o bar.py

cce300a0e2806b457f1b7ef5c75396b4.png

o Makefile

d6c2c585e9f6596b29a6a3ee30064dfe.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值