我的 SVN 的 apache2 配置:
服务器名称 server.org
<Location />
DAV svn
SVNPath /opt/svn/project.com
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.pem
SSLCertificateKeyFile /etc/apache2/ssl/server.key
svnadmin create /opt/svn/project.com
svn import /var/www/project.com file:///opt/svn/project.com/
现在我希望能够从 /opt/svn/project.com 获取我的项目的三个副本:
/var/www/test1.project.com
/var/www/test2.project.com
/var/www/test3.project.com
我希望能够以这种方式提交:
cd /opt/svn/project.com
svn add ./auth/
svn co ./ -c 'Comment'
我希望能够在其他主机上更新它:
cd /var/www/test2.project.com
svn up ./
我需要做什么?
答案1
如果我理解正确的话,您希望创建一个启用授权的存储库,将其签出到多个位置,然后从其中任何一个位置使用它。这非常简单,完成设置后,您应该不会遇到任何问题。
我认为,如果我正确地解释了您的问题,以下建议将确保您能够做您想做的事情。
1)您的ApacheLocation
配置应如下:
<Location /svn>
DAV svn
SVNPath /opt/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>
这样您就可以访问多个签出点,而不会与存储库发生冲突。与 Web 服务器上的其他任何内容一样,URL 不能发生冲突,因此您不应将存储库根目录与 Web 服务器根目录 ( /
) 设置为相同。
另外,我改变了你的SVNPath
值 - 这应该是你的存储库所在的目录,而不是存储库本身的路径。
2) 创建适当的结构。您的代码svnadmin create
是正确的。但是,为了确保未来开发的灵活性,您需要使用 在项目目录下创建trunk
、branches
和目录。您生成的存储库(通过 URL 访问)应具有类似以下结构:tags
svn --parents mkdir
http://server/svn/project.com/
projectName
branches
tags
trunk
是trunk
您完成所有工作的地方。树branches
用于分叉或并行开发,树tags
用于代码的静态快照。您实际上只需要trunk
,因为这是您将在示例中检查的。
3) 只有 Subversion 会修改/opt/svn/project.com
树以添加/修改内容。因此,您只能在结帐时提交,而不能按照您指示的方式提交。
如果您的文件系统包含您想要的内容,您可以:
检查主干并在其下添加内容:
svn co http://server/svn/project.com/projectName/trunk/ /var/www/test1.project.com
cp /var/www/project.com/foo /var/www/test1.project.com
svn add /var/www/test1.project.com/foo
svn ci /var/www/test1.project.com
或者导入到存储库:
svn import /var/www/project.com http://server/svn/project.com/projectName/trunk
4) 要获取多个工作副本,只需将 (或相应的子目录) 签出trunk
到您指定的各个位置。然后,可以按照您使用 的指示检索在一次签出中提交的任何修改svn up
。