存档

‘svn’ 分类的存档

使用svnsync实现已有svn版本库的镜像

2013年12月16日 没有评论

转自:http://zengrong.net/post/1598.htm

svn不支持分布式开发,所以把svn版本库保存在一台服务器上是不安全的。制作一个镜像svn版本库有多种方式,我采用subversion自带的svnsync程序。

 

此教程基于Archlinux。windows用户请注意路径表示法。

源版本库路径:http://192.168.16.10/svn/project1
镜像版本库路径:/var/svn/project1

一、建立镜像版本库

 


 

二、初始化镜像库

 


 

然后按照提示输入密码,提示信息可能如下:

认证领域: http://192.168.16.10 Subversion Repositories
“zrong”的密码:
认证领域: http://192.168.16.10 Subversion Repositories
用户名: zrong
“zrong”的密码:xxxx
复制版本 0 的属性。

三、同步

 


 

如果系统提示要保存明文密码,输入yes就可以了。这里我没有研究如何对密码进行加密。

接下来进入同步流程,同步的提示可能如下:

已提交版本 1。
复制版本 1 的属性。
传输文件数据………………………………
已提交版本 1。

这个时间可能会很长,具体要看网速和原始版本库的大小。如果版本库中有带的的二进制文件,则进度会更慢。在svnsync同步的过程中,应该保证原始的svn数据库不要进行提交操作,否则可能会造成同步失败,同步失败会引起镜像版本库的锁定。下面会讲解如何解锁。

四、解锁

如果在同步的时候遇到下面的提示,可能是由于原始版本库同时正在提交:

从目标版本库获得锁失败,当前被“xxxxx”持有

如果是在svn中,可以使用svn cleanup来解除锁定。但是svnsync并没有这个功能。我们可以使用下面的代码来解除锁定:

 


 

五、修改原始版本库的地址

如果原始版本库的地址改变了(比如说换了域名或者IP地址),在svn中可以使用 svn relocate 来实现,但在svnsync中,就必须用propset来实现了,具体代码如下:

 


 

参考文章:

分类: svn 标签:

svn update报413 Request Entity Too Large

2013年11月21日 没有评论

 

参照:http://httpd.apache.org/docs/2.2/mod/core.html#limitxmlrequestbody

LimitXMLRequestBody Directive

Description: Limits the size of an XML-based request body
Syntax: LimitXMLRequestBody bytes
Default: LimitXMLRequestBody 1000000
Context: server config, virtual host, directory, .htaccess
Override: All
Status: Core
Module: core

Limit (in bytes) on maximum size of an XML-based request body. A value of 0 will disable any checking.

Example:

LimitXMLRequestBody 0

LimitRequestBody Directive

Description: Restricts the total size of the HTTP request body sent from the client
Syntax: LimitRequestBody bytes
Default: LimitRequestBody 0
Context: server config, virtual host, directory, .htaccess
Override: All
Status: Core
Module: core

This directive specifies the number of bytes from 0 (meaning unlimited) to 2147483647 (2GB) that are allowed in a request body.

The LimitRequestBody directive allows the user to set a limit on the allowed size of an HTTP request message body within the context in which the directive is given (server, per-directory, per-file or per-location). If the client request exceeds that limit, the server will return an error response instead of servicing the request. The size of a normal request message body will vary greatly depending on the nature of the resource and the methods allowed on that resource. CGI scripts typically use the message body for retrieving form information. Implementations of the PUT method will require a value at least as large as any representation that the server wishes to accept for that resource.

This directive gives the server administrator greater control over abnormal client request behavior, which may be useful for avoiding some forms of denial-of-service attacks.

If, for example, you are permitting file upload to a particular location, and wish to limit the size of the uploaded file to 100K, you might use the following directive:

LimitRequestBody 102400

Note: not applicable to proxy requests.

svn add批量递归添加新增文件

2013年10月28日 没有评论

需求背景:有项目在腾讯开放平台运行,腾讯云平台CDN提供svn方式更新,但是权限不能直接给到研发人员,研发人员会将代码提交到运维提供的发布svn,里面有前端代码,后端代码,静态资源,运维会在发布服务器上svn update 研发提交过来的代码,腾讯CDN代码也checkout 到本地目录,通过rsync对比2个目录(一定排除掉.svn文件,否则版本库文件被覆盖后,提交会报错),研发提交文件rsync到腾讯CDN目录后,批量svn add * –force,然后svn ci 即可,完成静态资源发布。

名称
svn add – 添加文件、目录或符号链。

概要
SVN子命令add PATH…

描述
文件、目录或符号链到你的工作拷贝并且预定添加到版本库。它们会在下次提交上传并添加到版本库,如果你在提交之前改变了主意,你可以使用svn revert取消预定。

选项

InsertText –targets FILENAME
–non-recursive (-N)
–quiet (-q)
–config-dir DIR
–no-ignore
–auto-props
–no-auto-props
–force


例子:
我们通过一个例子来看一下SVN子命令add,添加一个文件到工作拷贝:
$ svn add foo.c
A foo.c
当添加一个目录,svn add缺省的行为方式是递归的:
$ svn add testdir
A testdir
A testdir/a
A testdir/b
A testdir/c
A testdir/d
你可以只添加一个目录而不包括其内容:
$ svn add –non-recursive otherdir
A otherdir
通常情况下,命令svn add *会忽略所有已经在版本控制之下的目录,有时候,你会希望添加所有工作拷贝的未版本化文件,包括那些隐藏在深处的文件,可以使用svn add的–force递归到版本化的目录下:
$ svn add * –force
A foo.c
A somedir/bar.c
A otherdir/docs/baz.doc。SVN子命令add的用法介绍讲解完毕。

分类: svn 标签: ,

SVNPath 与 SVNParentPath区别

2013年7月9日 没有评论

dav_svn.conf 的配置中有 SVNPath 与 SVNParentPath 两个选项.
SVNPath用于只有一个项目的情况,此时如果在主目录下面再建新项目,则不能访问.提示没有权限.
如果有多个项目的话,此时应该使用SVNParentPath来设置父目录来设置项目的父目录,这样子目录里面可以有多个项目了.

然后auth文件里面可以定义子目录的权限,apache的/etc/httpd/conf.d/subversion.conf 配置文件里面设置一个location就可以了

以后多个子项目都是用同样的认证文件,访问方式就为 http://ip/svn/pro1    http://ip/svn/pro2

认证文件给子项目赋权。

 

分类: svn 标签:

[转]SVN的可视化日志统计工具StatSVN

2013年7月4日 没有评论

StatSVN很好的统计工具,能帮你统计团队成员各自的编写量,代码总数,提交情况,文件数量等情况,并且以html网页图表的方式发布统计结果。

以前写过一个叫NOVA的小程序,并用StatSVN管理,通过这个例子介绍StatSVN的一些功能

使用前提

StatSVN的主页:http://www.statsvn.org/

它是一个2M多的JAR文件,是SVN的统计工具,统计结果以HTML格式保存。所以,如果要发布结果供团队成员浏览,需要一台服务器(或PC,貌似是废话…),安装网页服务器(apache2等),需要 JVAV (笔误 实为JAVA)环境,至少安装有SVN客户端,以便取得SVN服务器上的最新版本。apache2,java,svn的安装这里不做详细介绍(网上资料比较齐全)。

使用方法

下载statsvn.jar

用SVN客户端取得SVN服务器上的最新版本代码,比如Linux上的命令如下:

1 #check out 最新版本
2 svn co http://xxxx.xxxxx.xxxxx/xxxxx

生成新版本的log日志:

1 #生成项目SVN日志
2 svn log -v --xml > 日志名XXX.log

在存放统计结果HTML的目录中,执行statsvn.jar,一个简单的例子:

1 #简单例子
2 java -jar ../statsvn.jar ../nova/日志名XXX.log ../nova  -charset utf-8 -disable-twitter-button -title Nova  -include **/*.cpp:**/*.h -exclude **/sqlite3/*.*

java -jar ../statsvn.jar               执行statsvn.jar,后面是它的参数

参数1:../nova/日志名XXX.log                调用上面生成的SVN日志

参数2:../nova             最新版本所在的目录

参数3:-charset utf-8         生成的HTML所用的字符集

参数4:-disable-twitter-button            关闭twitter连接,可能statsvn的开发者是一个twitter爱好者,statsvn默认在项目和开发人员的名字后加个twitter连接按钮,方便互动。这在中国行不通,大家都懂的…所以让twitter连接按钮不显示。

参数5:-title 标题名             这个设置在HTML页面中显示的项目标题

参数6:-include **/*.cpp:**/*.h        表示统计的文件类型,默认情况下statsvn统计指定目录下的所有文件(包括一些开发环境自动生成的文件等,这个参数可以设置指定统计具体文件,例子中的表示只统计项目目录下得CPP与H文件。

参数7:-exclude **/sqlite3/*.*         表示不统计的内容,例子中的参数表示不统计项目文件夹中sqlite3的内容(因为sqlite3的内容是调用别人写的程序,统计进去没有意义~)

这就是statsvn最常用的几个参数,其他更详细参数可以参考官方网站的介绍。

扩展使用方法

由于StatSVN是静态的,需要执行一次才能查看新的结果,但是我们可以让他在系统中定时执行,比如每天晚上2:00执行一次,那么第二天就可以看到昨晚为止的所有统计情况。

以linux系统为例

我们可以把上述取得新版本,生成日志,生成统计的过程写成sh文件,并命名为”任务名.sh”

1 #!/bin/sh
2 cd ~
3 cd statsvn
4 svn co http://192.168.5.32/nova
5 cd nova
6 svn log -v --xml > svn.log
7 cd ..
8 cd novalog
9 java -jar ../statsvn.jar ../nova/svn.log ../nova  -charset utf-8 -disable-twitter-button -title Nova  -include **/*.cpp:**/*.h -exclude **/sqlite3/*.*

然后用crontab定时任务工具对这个sh进行定时执行(crontab的设置方法可以参考网上)

1 o@O:~$ crontab -l
2 # m h  dom mon dow   command
3 0 2 * * * /home/o/statsvn/任务名.sh
4 o@O:~$

把生成的html结果所在的目录软连接到apache的根目录(比如”www”文件夹下)就可以用过网页访问了。

 

StatSVN小巧简洁而且实用,是不错的团队管理工具,不过2010年初发布到版本0.7.0就没更新过了,不知道是不是烂尾了…实在可惜

分类: svn 标签: