Apache + Subverion(windows编)

本文介绍如何将Subversion (SVN) 与Apache Web服务器集成,包括配置Apache以托管SVN版本库、设置用户认证及权限、实现项目导入及解决版本冲突等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apache的安装请参考我其他文章。也就下下来安装一路安装就是了,没有什么特别。
Apache配置主要通过修改httpd.conf文件来进行配置的。也请参考我其他文章。
Subsion也下载下来解压就是了。
修改PATH变量,在其末尾添加 C:/subversion安装路径/bin
添加环境变量  VN_EDITOR="C:/Windows/notepad.exe"
其他置也请参考我其他文章。
本文用的是Apache2.0.*  Subversion1.4.6

建立Repository(版本库)
进入D:/svnServer 
  svnadmin create demo                                                

运行Subversion服务()
svnserve -d -r D:/svnServer /demo                              
你可以通过下载svnservice,把svn当作系统服务运行(请参考我其他文章)
svnservice.exe -install -d -r D:/svnServer /demo       

访问Subsersion服务器
svn://localhost                                                                 

 

APACHE
将 svn/bin 下的 mod_authz_svn.so、mod_dav_svn.so 两个文件复制到 Apache 的 modules 目录下

打开Apache的配置文件 httpd.conf,查找 LoadModule,将下面这两行之前的 # 去掉:
LoadModule dav_module modules/mod_dav.so                       
LoadModule dav_fs_module modules/mod_dav_fs.so            

并添加下面两行
LoadModule dav_svn_module modules/mod_dav_svn.so     
LoadModule authz_svn_module modules/mod_authz_svn.so
运行APACHE,执行apache.exe


 

认证部分
Respository(D:/svnServer/demo)下的conf文件夹下有authz ,passwd ,svnserve.conf三个文件
在svnserve.conf文件中找到下面的语句,把前面#号去掉,把空格也去掉
password-db = passwd                                                                      
在passwd中[users]后添加
user1:12345                                                                                           

再跑到Apache/bin下运行命令
htpasswd -c passwd user1                                                               
根据提示输入密码,生成passwd文件

又到Apache/conf找到httpd.conf文件,在最后添加
<Location /svn>                                                                                  
     DAV svn                                                                                          
     SVNParentPath H:/wutinghua/svnwork                                    
     # AuthzSVNAccessFile svnaccessfile                                      
     AuthType Basic                                                                             
     AuthName "Subversion repositories"                                      
     AuthUserFile D:/.../Apache/bin/passwd                                   
     Require valid-user                                                                       
</Location>                                                                                         
       
SVNParentPath后面的目录即为Respository的位置。
跟在Location后面的 /svn 表示通过http://localhost/svn 可以访问subversion版本库。
该指令告诉Apache,所有以 /svn 开头的请求都交给subversion处理。



实践:
导入项目。假设项目目录D:/svnWorkplace/svntest(注意这还不是subversion工作目录,你在这里update或comit是不会成功的,你使用checkout后的目录才是svn的工作目录),建立测试文件demo.c ,运行命令导入到subversion服务器中
D:/svnWorkplace>svn import svntest http://localhost/svn/demo   
Adding         svntest/demo.c                                                               
   ------------------------------------------------                                             
         这里会弹出记事本让你填写comment,                                   
   或者你可以使用-m 参数在命令行中写注释就不会弹出来了 
   ------------------------------------------------                                             
Committed revision 1.                                                                       
查看服务器上的文件
svn list http://localhost/svn/demo                                                    

checkout
D:svnWorkplace/svntestdemo>svn checkout http://localhost/svn/demo
A    demo/demo.c
Checked out revision 1.

之后会在svntest下生成一个demo文件夹,这个demo文件夹才是svn的工作目录,以后所有svn命令都是在这个文件夹下执行。demo下有一个.svn文件夹,千万不要改动里面的东西,这是subversion管理用的。

我们在demo下新建一个文件demo2.c, 你svn commit一下发现它并没有被添加进服务器中。因为subversion并不理会操作系统的命令,不信,你把demo.c和demo2.c都删除,update一下它们又被更新回来了。你想对文件进行增删改,必须使用svn命令。要添加demo2.c,使用svn add命令

D:svnWorkplace/svntestdemo > svn add demo4.txt
A         demo4.txt
D:svnWorkplace/svntestdemo
> svn commit
Adding         demo4.txt
Transmitting file data .
Committed 
revision 
5.

你可以通过svn list http://localhost/svn/demo  或者直接访问 http://localhost/svn/demo 查看服务器的文件列表。

解决subversion冲突
由于subversion跟csv ,vss不同,不是“锁定-修改-解锁”模型,而是“拷贝-修改-合并”模型。所以有可能发生冲突。比如A某和B某同时取得demo.c的最新版本,A某修改完commit之后,B某修改完再commit的时候就会收到一个警告

D:/svnWorkspace/svntest/demo > svn commit
Sending        demo3.txt
svn: Commit 
failed (details follow):
svn: Your file or directory 
'demo3.txt is probably out-of-' date
svn: The version resource does not correspond to the resource within the transac
tion.  Either the requested version resource 
is out of date (needs to be updated
), or the requested version resource 
is newer than the transaction root (restart
 the commit).
svn: Your commit message was left
 
in
 a temporary file:
svn:    
'D:/svnWorkspace/svntest/demosvn/commit.tmp'

并且同时在本地上生成如下文件
demo.c  //本地文件  里面结合了A某修改的内容和B某修改的内容 ,你会看见下面类似内容:
    <<<<<<< .mine 
    你修改的东西
    =======
    别人修改的东西
>>>>>>> .r2
demo.c.mine //B某修改的内容
demo.c.r1  //B修改前最新版分的内容
demo.c.r2  //A修改后的版本的内容

当你对照了这几个文件,确定正确无误的合并了A某B某修改的内容(一般情况下subversion都能够正确的帮你合并),并删除掉3个临时文件demo.c.mine,demo.c.r1  ,demo.c.r2  后,B某才能commit.

当然你也可以使用svn revert 命令来放弃你本地的修改,然后使用svn resolved demo.c 告诉subversion已经解除了冲突,subversion会把3个临时文件删除掉。

当然你嫌命令行操作麻烦的话,你可以下载TortoiseSVN 进行GUI操作。

 

 结合Subversion 和 Eclipse
Eclipse 除了可以与 Concurrent Versions System(CVS)集成外,还可以和SVN集成。
我们需要Subclipse 。Subclipse 是一个为 Eclipse IDE 添加 Subversion 支持的项目。我们可以使用 Eclipse 的更新管理器将 Subclipse 添加到 Eclipse IDE。
Help➔Software Updates ➔Find and Install(Search for new features to install)➔Next
然后你会看见一个让你选择网站的列表,由于我们需要的是特定特性,所以取消选中现有站点,然后单击 New Remote Site
Name:
Subclipse
URL:URL:http://subclipse.tigris.org/update_1.0.x
➔OK ➔Finish
然后就开始下载并安装 Subclipse。更新管理器下载 Subversion 组件。然后你会看见一个Verification的窗口。在安装任何内容之前,Eclipse 都将通知您该特性没有数字签名。这是您取消安装的最后一次机会。单击 Install All继续安装。然后Eclipse就会重起。

测试:
在 Eclipse 的 File 菜单中(package Explorer和Navig窗口中右键也可以)Import打开导入管理器。选择 Other➔Checkout Projectsfrom SVN,然后单击 Next。然后自己就按照提示做吧。
checkin ,checkout都是通过右击项目,在Team菜单里面操作。要对现有项目应用version管理,通过Team➔share Project.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值