svn 的使用(一)

一. 安装svn  服务器(操作系统centos)
yum install subversion
可以通过 subversion -v 命令查看是否安装成功
如果提示没有subversion 命令 是因为我们还需要创建svn 库
执行命令:
mkdir -p /svn/repos
svnadmin create /svn/repos
cd /svn/repos
ls
可以看到多出了许多文件和文件夹::conf  db  format  hooks  locks  README.txt
此时svn服务器的安装基本完成了。
二. svn配置
cd /svn/repos/conf
ls
可以看到文件:authz  passwd  svnserve.conf
1.首先配置passwd文件
vi passwd
添加类似账户
m0sh1 = admin
#格式为 用户名 = 密码
保存退出
2.配置authz文件
添加内容
[/]
m0sh1
#这两句表明 用户m0sh1 对整个目录都有访问的权限(你可以自己去设定更详细的目录权限)
3.配置 svnserve.conf
anon-access = none # 使非授权用户无法访问
auth-access = write # 使授权用户有写权限
password-db = password # 密码文件
authz-db = authz   # 访问控制文件
realm = m0sh1Svn
采用默认配置. 以上语句都必须顶格写, 左侧不能留空格, 否则会出错.
三. 开启服务进行测试
启动svn
svnseve -d -r /svn/repos
#如果已经运行了svn 还想再创建一个,可以通过设定不同端口来解决此问题
svnseve -d -r /svn/repos2 --listen-port 3313
启动成功后我们就可以通过本地的 TortoiseSVN 连接了(TortoiseSVN自行搜索下载即可)
svn 链接地址:
svn://server address (如果指定端口需要添加端口  :端口号)
四. 创建项目
1.你可以直接在这个svn server 所在的服务器上通过命令
svn improt project 导入项目
svn add file 添加文件(目录)
2.在windows 下使用 TortoiseSVN 工具 选中项目目录右键点击import 留下message 提交即可
3.在windows 下新建目录右键鼠标选择checkout,然后将项目文件复制到此目录,最后右键commit即可(留下message)
五. svn 版本管理
SVN 的结构一般是这样的:
svn:// your project
     +trunk/
         app/
         lib/ ...
     +branches/
         +braches_1.0/
     +tags
         +tag_release_1.0
当有开发需求的时候,从主干(trunk)上做分支(branch),当一个分支开发完毕,测试无误的情况下应该
合并到trunk上,如果在trunk上有问题可以在trunk做一些修改。当完成一个阶段,有一个可以发布的稳定项目
版本就可以打个tag了。
trunk中放置的始终都应该是一个稳定的版本, 在分支开发的开发人员应该经常和trunk同步(trunk merge  到branch
这不会改变trunk的代码),否则你会和trunk版本越来越远。分支合并到主干的时候要进过仔细测试后才能提交到commit
(但是commit 又应该尽快,防止别人也修改了trunk)
当然整体的流程应该依据实际情况设定。 svn的merge 可以单独搜索相关资料。^ _ ^
 
 下节会简单总结一下 svn hook的使用。
  例如上面的假设是一个web项目,trunk更新,同时web测试服务器也更新trunk代码。

此文章通过 python 爬虫创建,原文是自己的csdn 地址: svn 的使用(一)

svn 的使用(二)

这篇主要介绍下 svn 钩子的使用,svn 的安装以及配置等可以查看 svn 的使用(一)

我们可以在svn创建的仓库文件夹下看到 hooks 文件夹。
这里面就存放这个各种svn操作同时会执行的脚本文件。
(你可以自己查看每个脚本文件,文件开始都有英文的介绍包括功能,参数以及返回值。
   我翻译的不好所以就采用网上其它资料的解释吧 - -! )
1.start-commit  开始提交的通知
输入参数:传递给你钩子程序的命令行参数,顺序如下:
    1. 版本库路径
    2. 已经认证过的提交的用户名
它在提交事务产生前已运行,通常用来判定一个用户是否有权提交。返回0表示认证通过。
2.pre-commit 在提交结束之前提醒
输入参数:传递给你钩子程序的命令行参数。顺序是:
     1. 版本库路径
     2. 提交事务的名称
在事务完成提交之前运行,通常这个钩子是用来保护因为内容或位置(例如,你要求所有到一个特定分支的提交必须包括一个bug追踪的ticket号,或者是 要求日志信息不为空)而不允许的提交。无错误返回0。

 
3.post-commit  成功提交的通知
传递给你钩子程序的命令行参数,顺序为:
     1. 版本库路径
     2. 提交创建的修订版本号
它在事务完成后运行,创建一个新的修订版本。无错误程序正常退出。
 
4.pre-revprop-change 版本属性修改
因为Subversion的修订版本属性不是版本化的,对这类属性的修改(例如提交日志属性svn:log)将会永久覆盖以前的属性值。因为数据在此可能 丢失,所以Subversion提供了这种钩子(及与之对应的post-revprop-change),因此版本库管理员可用一些外部方法记录变化。作 为对丢失未版本化属性数据的防范,Subversion客户端不能远程修改修订版本属性,除非为你的版本库实现这个钩子。
5.post-revprop-change 版本属性修改
这个钩子与pre-revprop-change对应。事实上,因为多疑的原因,只有存在pre-revprop-change时这个脚本才会执行。当这 两个钩子都存在时,post-revprop-change在修订版本属性被改变之后运行,通常用来发送包含新属性的email。版本库传递四个参数给该 钩子:到版本库的路径,属性存在的修订版本,经过校验的产生变化的用户名,和属性自身的名字。

使用这些钩子最简单的方法就是
拷贝某个脚本,去掉.tmpl扩展名,然后自定义钩子的内容,确定脚本是可运行的。
PS:一定要确保钩子脚本是可执行的。而且名称就是去掉.tmpl后的名字。
另外要注意要使用SVN的钩子一定要开设权限,而且是要用运行SVN的账号进行执行这些钩子
(如果不是可以运行的会提示错误,错误代码为255,其他错误可以自行尝试。。)
我想要做的就是 用户commit 后服务器(测试环境的)自动同步 即做update操作
这里我的web服务器和svn服务器 在一台。(如果是远程的web服务器可以在
先使用ssh命令登入

那么我们需要使用的钩子是post-commit
我们可以使用命令
cp post-commit.tmpl post-commit.tmpl.bak
mv post-commit.tmpl post-commit
(别忘了 chmod 设置为可执行的)
chmod 755 post-commit
vi post-commit
这里我们可以先做一个测试
即在文件最后加上一行
/bin/echo "commit" >> /tmp/commit.out
然后执行commit 操作 看一下 commit.out 是不是多了 commit这个单词
那么编写我们的脚本在post-commit 文件最后添加命令
/usr/bin/svn update /www/project --username m0sh1 --password m0sh1
PS:这里要 加上绝对路径 , update 后面的是checkout 下来的项目路径
如果提示错误 svn: Can't convert string from native encoding to 'UTF-8'
则需要添加一行命令
export lang = en_US.UTF-8
此时去工作目录看下是不是更新了。。

再举个例子,有很多开发人员为了快,往往忽略掉提交日志信息(也可能无意为之),那么我们可以在pre-commit脚本
中做出必须提交日志信息的限制:
REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" |
   grep "[a-zA-Z0-9]" > /dev/null || exit 1

# Check that the author of this commit has the rights to perform
# the commit on the files and directories being modified.
commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1

# All checks passed, so allow the commit.
exit 0
(上面内容直接就是pre-commit脚本中的内容,那么只需要给pre-commit可执行的权限就可以了。)
之后我们就可以以此,类推出其它想要实现的功能了。

此文章通过 python 爬虫创建,原文是自己的csdn 地址: svn 的使用(二)

svn 的使用(一)

一. 安装svn  服务器(操作系统centos)
yum install subversion
可以通过 subversion -v 命令查看是否安装成功
如果提示没有subversion 命令 是因为我们还需要创建svn 库
执行命令:
mkdir -p /svn/repos
svnadmin create /svn/repos
cd /svn/repos
ls
可以看到多出了许多文件和文件夹::conf  db  format  hooks  locks  README.txt
此时svn服务器的安装基本完成了。
二. svn配置
cd /svn/repos/conf
ls
可以看到文件:authz  passwd  svnserve.conf
1.首先配置passwd文件
vi passwd
添加类似账户
m0sh1 = admin
#格式为 用户名 = 密码
保存退出
2.配置authz文件
添加内容
[/]
m0sh1
#这两句表明 用户m0sh1 对整个目录都有访问的权限(你可以自己去设定更详细的目录权限)
3.配置 svnserve.conf
anon-access = none # 使非授权用户无法访问
auth-access = write # 使授权用户有写权限
password-db = password # 密码文件
authz-db = authz   # 访问控制文件
realm = m0sh1Svn
采用默认配置. 以上语句都必须顶格写, 左侧不能留空格, 否则会出错.
三. 开启服务进行测试
启动svn
svnseve -d -r /svn/repos
#如果已经运行了svn 还想再创建一个,可以通过设定不同端口来解决此问题
svnseve -d -r /svn/repos2 --listen-port 3313
启动成功后我们就可以通过本地的 TortoiseSVN 连接了(TortoiseSVN自行搜索下载即可)
svn 链接地址:
svn://server address (如果指定端口需要添加端口  :端口号)
四. 创建项目
1.你可以直接在这个svn server 所在的服务器上通过命令
svn improt project 导入项目
svn add file 添加文件(目录)
2.在windows 下使用 TortoiseSVN 工具 选中项目目录右键点击import 留下message 提交即可
3.在windows 下新建目录右键鼠标选择checkout,然后将项目文件复制到此目录,最后右键commit即可(留下message)
五. svn 版本管理
SVN 的结构一般是这样的:
svn:// your project
     +trunk/
         app/
         lib/ ...
     +branches/
         +braches_1.0/
     +tags
         +tag_release_1.0
当有开发需求的时候,从主干(trunk)上做分支(branch),当一个分支开发完毕,测试无误的情况下应该
合并到trunk上,如果在trunk上有问题可以在trunk做一些修改。当完成一个阶段,有一个可以发布的稳定项目
版本就可以打个tag了。
trunk中放置的始终都应该是一个稳定的版本, 在分支开发的开发人员应该经常和trunk同步(trunk merge  到branch
这不会改变trunk的代码),否则你会和trunk版本越来越远。分支合并到主干的时候要进过仔细测试后才能提交到commit
(但是commit 又应该尽快,防止别人也修改了trunk)
当然整体的流程应该依据实际情况设定。 svn的merge 可以单独搜索相关资料。^ _ ^
 
 下节会简单总结一下 svn hook的使用。
  例如上面的假设是一个web项目,trunk更新,同时web测试服务器也更新trunk代码。

此文章通过 python 爬虫创建,原文是自己的csdn 地址: svn 的使用(一)

svn 的使用(二)

这篇主要介绍下 svn 钩子的使用,svn 的安装以及配置等可以查看 svn 的使用(一)

我们可以在svn创建的仓库文件夹下看到 hooks 文件夹。
这里面就存放这个各种svn操作同时会执行的脚本文件。
(你可以自己查看每个脚本文件,文件开始都有英文的介绍包括功能,参数以及返回值。
   我翻译的不好所以就采用网上其它资料的解释吧 - -! )
1.start-commit  开始提交的通知
输入参数:传递给你钩子程序的命令行参数,顺序如下:
    1. 版本库路径
    2. 已经认证过的提交的用户名
它在提交事务产生前已运行,通常用来判定一个用户是否有权提交。返回0表示认证通过。
2.pre-commit 在提交结束之前提醒
输入参数:传递给你钩子程序的命令行参数。顺序是:
     1. 版本库路径
     2. 提交事务的名称
在事务完成提交之前运行,通常这个钩子是用来保护因为内容或位置(例如,你要求所有到一个特定分支的提交必须包括一个bug追踪的ticket号,或者是 要求日志信息不为空)而不允许的提交。无错误返回0。

 
3.post-commit  成功提交的通知
传递给你钩子程序的命令行参数,顺序为:
     1. 版本库路径
     2. 提交创建的修订版本号
它在事务完成后运行,创建一个新的修订版本。无错误程序正常退出。
 
4.pre-revprop-change 版本属性修改
因为Subversion的修订版本属性不是版本化的,对这类属性的修改(例如提交日志属性svn:log)将会永久覆盖以前的属性值。因为数据在此可能 丢失,所以Subversion提供了这种钩子(及与之对应的post-revprop-change),因此版本库管理员可用一些外部方法记录变化。作 为对丢失未版本化属性数据的防范,Subversion客户端不能远程修改修订版本属性,除非为你的版本库实现这个钩子。
5.post-revprop-change 版本属性修改
这个钩子与pre-revprop-change对应。事实上,因为多疑的原因,只有存在pre-revprop-change时这个脚本才会执行。当这 两个钩子都存在时,post-revprop-change在修订版本属性被改变之后运行,通常用来发送包含新属性的email。版本库传递四个参数给该 钩子:到版本库的路径,属性存在的修订版本,经过校验的产生变化的用户名,和属性自身的名字。

使用这些钩子最简单的方法就是
拷贝某个脚本,去掉.tmpl扩展名,然后自定义钩子的内容,确定脚本是可运行的。
PS:一定要确保钩子脚本是可执行的。而且名称就是去掉.tmpl后的名字。
另外要注意要使用SVN的钩子一定要开设权限,而且是要用运行SVN的账号进行执行这些钩子
(如果不是可以运行的会提示错误,错误代码为255,其他错误可以自行尝试。。)
我想要做的就是 用户commit 后服务器(测试环境的)自动同步 即做update操作
这里我的web服务器和svn服务器 在一台。(如果是远程的web服务器可以在
先使用ssh命令登入

那么我们需要使用的钩子是post-commit
我们可以使用命令
cp post-commit.tmpl post-commit.tmpl.bak
mv post-commit.tmpl post-commit
(别忘了 chmod 设置为可执行的)
chmod 755 post-commit
vi post-commit
这里我们可以先做一个测试
即在文件最后加上一行
/bin/echo "commit" >> /tmp/commit.out
然后执行commit 操作 看一下 commit.out 是不是多了 commit这个单词
那么编写我们的脚本在post-commit 文件最后添加命令
/usr/bin/svn update /www/project --username m0sh1 --password m0sh1
PS:这里要 加上绝对路径 , update 后面的是checkout 下来的项目路径
如果提示错误 svn: Can't convert string from native encoding to 'UTF-8'
则需要添加一行命令
export lang = en_US.UTF-8
此时去工作目录看下是不是更新了。。

再举个例子,有很多开发人员为了快,往往忽略掉提交日志信息(也可能无意为之),那么我们可以在pre-commit脚本
中做出必须提交日志信息的限制:
REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" |
   grep "[a-zA-Z0-9]" > /dev/null || exit 1

# Check that the author of this commit has the rights to perform
# the commit on the files and directories being modified.
commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1

# All checks passed, so allow the commit.
exit 0
(上面内容直接就是pre-commit脚本中的内容,那么只需要给pre-commit可执行的权限就可以了。)
之后我们就可以以此,类推出其它想要实现的功能了。

此文章通过 python 爬虫创建,原文是自己的csdn 地址: svn 的使用(二)