`

linux svn 导入导出

阅读更多
最近在一个比较纯净的linux服务器上安装支持http的svn,差点吐血,太干净也烦,还要奋战后终于拿下
apache2.2以上  svn1.8.3
所需文件:
注意这里的neon在svn1.8.1版本被移除了,需要serf来支持http



svn验证文件导入导出:

将文件导入版本库:
终端输入:svn import [源路径] [目标版本库路径] -m [日志信息]
源路径可以是相对路径,导入时会递归导入源路径下的所有文件和文件夹,目标版本库路径需要绝对目录(反正我试验是这样的),例如版本库的目录是:
./svn import ../../svnceshi/   file:///usr/local/svnRepo/ -m "new file"


从版本库导出:
导入后原文件并未被纳入版本管理,若想获得受版本控制的文件,就需要从版本库导出
终端输入:svn co [版本库路径] [导出目标路径]
./svn co file:///usr/local/svnRepo/   /usr/local/svnceshi/

因为没有配置PATH  所以这里./svn启动

===============
上面我是配置好了svn服务器,这里要支持http访问,我必须要apache服务器来集成svn,所以安装svn的时候我们要先确保有了apache服务器,
安装apache的时候编译命令:
./configure --prefix=/usr/local/httpd-2.4.7/ --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr-util/bin/apu-1-config --enable-dav --with-pcre=/usr/local/prce/
--enable-dav这个参数必须有,

安装svn时编译svn二进制包的命令:  ./configure --prefix=/usr/local/svn --with-apxs=/usr/local/httpd-2.4.7/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-openssl=/usr/local/ssl/ --with-serf=/usr/local/serf-1.2.1/ --with-sqlite=/usr/local/sqlite3/,注意这里的--with-apxs就是我的apache安装目录中bin目录下的,这个会为httpd.conf文件中注入:
LoadModule dav_svn_module     /usr/local/svn/libexec/mod_dav_svn.so
LoadModule authz_svn_module   /usr/local/svn/libexec/mod_authz_svn.so
apache启动后执行svn就是由这个配置指引的;
--with-serf这个上面说了 ,subversion1.8.3移除了neon,改用serf;
--with-sqlite,svn的数据库保存,开始报没有sqlite,我去搜索了下,有的说什么解压缩sqlite-autoconf-3080002.zip包,复制sqlite.3c的文件到svn的目录下(没有就创建一个什么的目录再复制进去),其实那些人大多数都是copy别人的,nnd都是好久的了,反正我试了没用,我就直接sqlite官网下载了sqlite-amalgamation-3.6.16.tar.gz包,编译安装后再去安装svn,带上--with-sqlite这个参数就可以了,数据库OK;
--with-openssl:至于这个参数,开始系统没有ssl,安装svn的时候报错没有ssl支持,就去下了个openssl-1.0.1e.tar.gz;

好了,跑完后,发现OK;
1.创建版本库:
cd到svn目录的bin目录下,执行./svnadmin create 路径(你的库文件夹,这里我是/usr/local/svnRepo)
2.执行./svnserver -d -r /usr/local/svnRepo,启动svn服务器的时候一定要带上后面的库目录;
3.执行=============上面的导入导出文件,根据命令提示以及查找文件可以看到你的svn是不是ok。

接下来我们集成apache服务器。
1.cd 到apache服务器下的conf目录,编译里面的httpd.conf目录,查看是否有
LoadModule dav_svn_module     /usr/local/svn/libexec/mod_dav_svn.so
LoadModule authz_svn_module   /usr/local/svn/libexec/mod_authz_svn.so,如果没有可能,去svn安装目录下的libexec目录看是否有libexec/mod_dav_svn.so和mod_authz_svn.so,有的话就在httpd.conf加上LoadModule那两句话,没有的话要重新编译安装svn了。
2.安装完apache服务器启动后报了没有指定ServerName,具体什么的不清楚了,但是那段英文大致就是这个把,需要在httpd.conf中添加ServerName 域名:89(端口),这里的端口要和httpd.conf中Listen 89(端口)  中端口一致。

3.然后我们添加http访问svn认证机制。
在httpd.conf最后加上:
<Location /repo/>
DAV svn
SVNListParentPath on
SVNParentPath /usr/local/svnRepo
#SVNPath /usr/local/svnRepo/bankCS  SVNParentPath和SVNPath的不同,不知道去google
AuthzSVNAccessFile /usr/local/svn/conf/authz
#Satisfy Any
AuthType Basic
AuthName "Subversion repositories"
#AuthzSVNAccessFile /usr/local/svn/conf/authz
AuthUserFile /usr/local/svn/conf/passwd
Require valid-user
</Location>
这里的passwd和authz文件的格式在我们刚创建的版本库里的conf有,我们copy到别的地方(我这里是把conf文件夹从库里copy到svn安装目录下,以做apache对不同库的统一认证),
passwd文件内容是通过apache bin下的htpasswd添加的,自己手动添加是没用的,因为没有加密,登录的时候无法识别,htpasswd添加的是加密的,如:
[users]
wjg:$apr1$4aT/vQ0g$y.5f4H75WeoWSXjvyi5gq1
(不懂google吧,实际上对应的是名wjg  密码123456)
./htpasswd -c .passwd tonyzhang pass
在bin目录下生成一个.passwd文件,用户名tonyzhang ,密码:pass,默认采用MD5加密方式.
./htpasswd -b .passwd onlyzq pass
去掉c选项,即可在第一个用户之后添加第二个用户,依此类推

authz内容:
[groups]
admin=wjg
developer=zi
[/]
*=r
[bankCS:/]
@admin=rw
[exploy:/]
*=r
这里注意#[aliases]不能和#[groups]随便开放,否则会出现面的情况,登录后没有出现对应的目录:

正确的是:




这2个配置文件我花了2个夜晚至少8个多小时,对于很多无权限访问的问题都是authz配置错误导致的;

还有一个对于上面说的创建版本库后要执行chmod –R o+rw /usr/local/svnRepo,不然apache启动后用svn客户端不能上传,报 Can’t open ‘/XXX/db/txn-current-lock’: Permission denied,主要就是apache没有操作的权限。

实际上apache操作的是版本库,和svn服务器没有关于了,所以我们kill了svn的服务后还是可以通过http访问svn服务。

本来还想截个无权限访问的图,结果忘了  。。这记忆汗啊

总结:
关于最后的权限问题真是奔溃,网上查了很多,基本都是cope,想找作者交流都很无力,最后google去看英文帖子总算解决了,再次希望看到此贴的人尊重他人的心得,留下转载地址:http://wjg-java.iteye.com/admin/blogs/1991051
  • 大小: 18.1 KB
  • 大小: 17.7 KB
  • 大小: 19.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics