ubuntu安装配置svn,并更新源代码

  • Post author:
  • Post category:其他



==========================================ubuntu测试,报错403

$ sudo apt-get install subversion

$ sudo apt-get install libapache2-svn


增加组,并且把用户加到组里::

sudo addgroup subversion7

sudo usermod -G subversion7 -a www-data  将您自己和 “www-data”(Apache 用户 ) 加入组成员中

$ mkdir /home/svnroot

$ cd /home/svnroot

$ mkdir svndata

$ chown -R www-data:subversion7 svndata

cd svndata

mkdir test

创建 SVN 文件test仓库:

$ svnadmin create /home/svnroot/svndata/test

赋予组成员对所有新加入文件仓库的文件拥有相应的权限:

$ chmod -R g+rws test

=——————————-访问方式

直接访问文件仓库(file://)

这是所有访问方式中最简单的。它不需要事先运行任何 SVN 服务。这种访问方式用于访问本地的 SVN 文件仓库。语法是:

cd /tmp

svn co file:///home/svnroot/svndata/test

如果报错“svn: 无法创建目录“myproject/.svn”: Permission denied”那么就指定SVN为777

———————-WebDAV 协议访问 SVN 文件仓库

要通过 WebDAV 协议访问 SVN 文件仓库,您必须配置您的 Apache 2 Web 服务器。您必须加入下面的代码片段到您的 /etc/apache2/mods-available/dav_svn.conf中:

<Location /svn>

DAV svn

#SVNPath /home/svnroot/svndata


SVNParentPath /home/svnroot/svndata


AuthType Basic

AuthName “MTC subversion repository”


AuthUserFile /home/svnroot/svnconf/svn_user.conf

AuthzSVNAccessFile /home/svnroot/svnconf/authz.conf

//注销此行那么SVN都是匿名操作

#<LimitExcept GET PROPFIND OPTIONS REPORT>

Require valid-user

#</LimitExcept>

</Location>

#CustomLog logs/svn_logfile “%t %u %{SVN-ACTION}e” env=SVN-ACTION

如果需要用户每次登录时都进行用户密码验证,请将<LimitExcept GET PROPFIND OPTIONS REPORT>与</LimitExcept>两行注释掉。

当您添加了上面的内容,您必须重新起动 Apache 2 Web 服务器,请输入下面的命令:

/etc/init.d/apache2 restart

创建 /home/svnroot/svnconf/svn_user.conf 文件,该文件包含了用户授权的详细信息。要添加用户,您可以执行下面的命令:

cd /home/svnroot

mkdir svnconf

htpasswd -c /home/svnroot/svnconf/svn_user.conf stone

stone


————————————-vim /home/svnroot/svnconf/authz.conf

[groups]

group1 = stone,ubuntu

[test:/]


* = rw


@group1 = rw

您可以通过下面的命令来访问文件仓库: 执行以下操作必须所在的目录可写,建议在/tmp下来执行,执行完以后会创建一个svndata。也可以在局域网【要求安装SVN客户端】中执行


http://192.168.1.101/svn/test


或者


svn co



http://192.168.1.101/svn/test



test –username stone

=============???????????????????????????????????????????????????????????????????报错:

svn: 服务器发送了意外的返回值(403 Forbidden),在响应 “OPTIONS” 的请求 “http://192.168.1.101/svn/svndata” 中



403返回值错误,SVN中表示访问权限出错,没有用你分配的权限去访问配置库。


把你的TSVN的认证信息清除一下



配置完成之后,通过http访问的时候,发生 403错误

原因应该是,对所指向的路径,没有访问权限。

用  ls -l

查看一下,路径的权限


URL大小写造成的。SVN在Check out是URL大小写不敏感的,在Commit/Delete时却是大小写敏感的!

—————-同步更新源码


cd /home/svnroot/svndata/test/hooks/

cp post-commit.tmpl  post-commit

vim post-commit


LANG=”zh_CN.UTF-8″

svn update –username stone –password stone

http://192.168.1.101/svn/test

/var/www/test –no-auth-cache


#svn update –username stone –password stone

http://192.168.1.101/svn/test

/tmp/test –no-auth-cache


SVN地址:

http://192.168.1.101/svn/test


U:stone

P:stone

Shell:P:zheng



——————————–公司SVN服务器的配置文件 :通过 WebDAV 协议访问 (http://  )


————————/etc/httpd/conf.d/subversion.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so

# Only needed if you decide to do “per-directory” access control.

LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>

DAV svn

SVNparentPath /home/svnroot/svndata                       主仓库地址

AuthType Basic

AuthName “MTC Subversion”

AuthUserFile /home/svnroot/svnconf/svn_user.conf            用户帐号和密码

AuthzSVNAccessFile /home/svnroot/svnconf/authz.conf        读写权限

Require valid-user

</Location>

CustomLog logs/svn_logfile “%t %u %{SVN-ACTION}e” env=SVN-ACTION

————————————-/home/svnroot/svnconf/authz.conf

[groups]

group1 = aa,he,zheng,chen,xie,zhuo

[bb:/]

@group1 = rw

bb = rw

————————-/home/svnroot/svnconf/svn_user.conf

aa:VYexe.o2oDvhM

bb:bEB4OmNm2./Ng

zheng:cLIdZuJ2rNURo

chen:q0W84IGVlB7XY

xie:Vix9.rCPS4leg

he:DU9ZhearZ.Cio

zhuo:U.6J4vA3gJ6Js

————————-/home/svnroot/svndata/test.***.com   仓库地址

/home/svnroot/svndata/test.***.com/conf/

authz 保留空

passwd 保留空

svnserve.conf 保留空

/home/svnroot/svndata/test.***.com/hooks/post-commit:

LANG=”zh_CN.UTF-8″

svn update –username zheng –password *** http://192.168.200.233/svn/test.***.com /home/www/html/test.***.com –no-auth-cache

SVN地址: http://192.168.200.233/svn/test.***.com/

U:zheng

P:zheng

Shell:P:zheng




—————————————————————参考教程:

$ sudo apt-get install subversion

$ sudo apt-get install libapache2-svn

创建 SVN 仓库

许多位置都可以放置 Subversion 文件仓库,其中两个最常用的是:/usr/local/svn 以及 /home/svn。为了在下面的描述中简单明了,我们假设您的 Subversion 文件仓库放在 /home/svn,并且你的项目名称是简单的“myproject”。

同样的,也有许多常用的方式设置文件仓库的访问权限。然而,这也是安装过程中最经常出现错误的地方,因此我们会对此进行一个详细说明。典 型的情况下,您应该创建一个名为“Subversion”的组来拥有文件仓库所在的目录。下面是一个快速的操作说明,有关内容请参考相关文档的详细说明:

* 在 Ubuntu 菜单上选择 “ 系统 -> 系统管理 -> 用户和组 ” ;

* 切换到 “ 组 ” 标签;

* 点击 “ 添加组 ” 按钮;

* 组名为 “subversion” ;

* 将您自己和 “www-data”(Apache 用户 ) 加入组成员中;

* 点击 “OK” 以确认修改,关闭该程序。

或者使用命令完成上述功能(增加组,并且把用户加到组里):

sudo addgroup subversion2

sudo usermod -G subversion2 -a www-data

再或者直接使用命令编辑组文件”sudo vi /etc/group”,增加组和成员(不推荐):

$ sudo vi /etc/group

结果看上去,像这样。

$ cat /etc/group|grep subversion

subversion:x:1001:www-data,exp

您需要注销然后再登录以便您能够成为 subversion 组的一员,然后就可以执行签入文件(Check in,也称提交文件)的操作了。

现在执行下面的命令

$ sudo mkdir /home/svn

$ cd /home/svn

$ sudo mkdir myproject

$ sudo chown -R root:subversion2 myproject

下面的命令用于创建 SVN 文件仓库:

$ sudo svnadmin create /home/svn/myproject

赋予组成员对所有新加入文件仓库的文件拥有相应的权限:

$ sudo chmod -R g+rws myproject

如果上面这个命令在创建SVN文件仓库之前运行,你可能在后续Check in的时候遇到如下错误:

Can’t open ‘/home/svn/myproject/db/txn-current-lock’: Permission denied

查看txn-current-lock文件的权限和用户以及组信息,应该类似于:

$ ls -l /home/svn/myproject/db/txn-current-lock-rw-rwSr– 1 root subversion

除了权限以外,用户及其组如果不对,则仍然会遇到上述问题,可以再次运行命令:

$ sudo chown -R root:subversion myproject

访问方式

Subversion 文件仓库可以通过许多不同的方式进行访问(Check Out,签出)——通过本地硬盘,或者通过各种网络协议。无论如何,文件仓库的位置总是使用 URL 来表示。下表显示了不同的 URL 模式对应的访问方法:

模式

访问方法

file:///

直接访问本地硬盘上文件仓库

http://

通过 WebDAV 协议访问支持 Subversion 的 Apache 2 Web 服务器

https://

类似 http://,支持 SSL 加密

svn://

通过自带协议访问 svnserve 服务器

svn+ssh://

类似 svn:// ,支持通过 SSH 通道

直接访问文件仓库(file://)

这是所有访问方式中最简单的。它不需要事先运行任何 SVN 服务。这种访问方式用于访问本地的 SVN 文件仓库。语法是:

$ svn co file:///home/svn/myproject

或者

$ svn co file://192.168.1.103/home/svn/myproject

如果报错“svn: 无法创建目录“myproject/.svn”: Permission denied”那么就指定SVN为777

注意:如果您并不确定主机的名称,您必须使用三个斜杠(///),而如果您指定了主机的名称,则您必须使用两个斜杠(//).

通过 WebDAV 协议访问 (http:// )

要通过 WebDAV 协议访问 SVN 文件仓库,您必须配置您的 Apache 2 Web 服务器。您必须加入下面的代码片段到您的 /etc/apache2/mods-available/dav_svn.conf中:

<Location /svn/myproject>

DAV svn

SVNPath /home/svn/myproject

AuthType Basic

AuthName “myproject subversion repository”

AuthUserFile /etc/subversion/passwd

<LimitExcept GET PROPFIND OPTIONS REPORT>

Require valid-user

</LimitExcept>

</Location>

如果需要用户每次登录时都进行用户密码验证,请将<LimitExcept GET PROPFIND OPTIONS REPORT>与</LimitExcept>两行注释掉。

当您添加了上面的内容,您必须重新起动 Apache 2 Web 服务器,请输入下面的命令:

sudo /etc/init.d/apache2 restart

接下来,您需要创建 /etc/subversion/passwd 文件,该文件包含了用户授权的详细信息。要添加用户,您可以执行下面的命令:

sudo htpasswd -c /etc/subversion/passwd stone

stone

它会提示您输入密码,当您输入了密码,该用户就建立了。“-c”选项表示创建新的/etc/subversion/passwd文件,所以user_name所指的用户将是文件中唯一的用户。如果要添加其他用户,则去掉“-c”选项即可:

sudo htpasswd /etc/subversion/passwd other_user_name

您可以通过下面的命令来访问文件仓库: 执行以下操作必须所在的目录可写,建议在/tmp下来执行,执行完以后会创建一个myproject。也可以在局域网中执行http://192.168.1.103/svn/myproject

$ svn co http://192.168.1.103/svn/myproject myproject –username stone

它会提示您输入密码。您必须输入您使用 htpasswd 设置的密码。当通过验证,项目的文件就被签出了。

警告:密码是通过纯文本传输的。如果您担心密码泄漏的问题,我们建议您使用 SSL 加密,

―――――――― 通过自带协议访问(svn://)

sudo svn import ss svn://192.168.1.103/myproject -m “ADD:add a test file”

//ss 是文件   执行此命令发现报错 “ svn 认证失败 ”

方法:采用用 mod_authz_svn 进行目录访问控制

进入myproject/conf修改svnserve.conf

[general]

anon-access = read

auth-access = write

password-db = passwd

修改passwd为:

[users]

admin=ssssss

guest=123456

authz文件用于用户的分组权限管理,偶是个人用户,也就算了吧。

小结:支持两种访问方式:

1. http://192.168.1.103/svn/myproject/ 此处所需要的用户和密码来源于/etc/apache2/mods-available/dav_svn.conf中的设置

2 svn://192.168.1.103/myproject  此处所需要的用户和密码来源于myproject/conf下的svnserve.conf和passwd

----------------利用hooks更新源代码

cp post-commit.tmpl  post-commit

修改post-commit:

export LANG=zh_CN.GBK !

ah*RJ�

/home/svn/myproject update –username stone –password stone /var/www/myproject

最后提醒权限问题:

sudo chown -R www:www /var/www/ myproject

sudo chmod -R 777 /var/www/myproject

sudo chown -R www:www /home/svn/myproject/hooks/post-commit

sudo chmod -R 777 /home/svn/myproject/hooks/post-commit

另外需要查一下 lober 是否属于 apache 用户

//目录权限:

-bash-3.2$ cd /home/svnroot

-bash-3.2$ ls -al

总计 20

drwxr-xr-x  4 root root 4096 08-07 11:10 .

drwxr-xr-x 18 root root 4096 08-07 11:12 ..

drwxr-xr-x  2 root root 4096 08-07 11:14 svnconf

drwxr-xr-x  5 root root 4096 07-24 12:23 svndata

-bash-3.2$ cd svndata/

-bash-3.2$ ls -al

总计 20

drwxr-xr-x 5 root   root 4096 07-24 12:23 .

drwxr-xr-x 4 root   root 4096 08-07 11:10 ..

drwxr-xr-x 7 apache root 4096 07-21 15:38 bb

drwxr-xr-x 7 apache root 4096 07-24 12:28 test.***.com

-bash-3.2$ cd /home/www/html

-bash-3.2$ ls -al

总计 20

drwxr-xr-x  5 apache root   4096 07-24 14:34 .

drwxr-xr-x 11 root   root   4096 07-21 15:53 ..

drwxr-xr-x  6 apache root   4096 08-07 17:15 .svn

drwxr-xr-x 33 apache apache 4096 08-07 10:34 test.***.com