LINUX SVN 服务器安装配置文档格式.docx
《LINUX SVN 服务器安装配置文档格式.docx》由会员分享,可在线阅读,更多相关《LINUX SVN 服务器安装配置文档格式.docx(29页珍藏版)》请在冰点文库上搜索。
team2组有只读权限。
修改svnserve.conf文件
visvnserve.conf
打开下面的几个注释:
anon-access=read#匿名用户可读
auth-access=write#授权用户可写
password-db=passwd#使用哪个文件作为账号文件
authz-db=authz#使用哪个文件作为权限文件
realm=MyFirstRepository#认证空间名,版本库所在目录
启动svn版本库
svnserve-d-r/var/svn/
在windows上测试
新建一个测试文件夹,在该文件夹下右键选择SVNcheckout如下图(要事先安装TortoiseSVN):
填写SVN的地址,如下图:
输入密码,如下图:
在linux上测试
[root@V2-1~]#svncheckoutsvn:
//218.24.23.240/repo0
Authenticationrealm:
<
svn:
//218.24.23.240:
3690>
MyFirstRepository
Passwordfor'
root'
:
#先输入本机root密码
Username:
chai#输入svn用户名
chai'
#输入svn密码
svn管理的版本文件
SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件的(FS_FS)。
一方面这解决了许多问题(例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性。
)。
然而另一方面,数据存储由此变得不透明。
基于以上所以你在服务上是找不到你提交的原始文件,因为svn每次提交做的都是原子提交,所以你在服务器上能找到的都是一些碎片文件。
SVNweb管理工具svnadmin
iF.SVNAdmin(GUI的方式管理SVN,包括:
repos管理、
用户管理、用户组管理、权限管理等多种功能,底层也很简单,是通过修改Subversionauthorization和
userauthorization两个文件完成其管理功能(现不支持数据库userauthorization的那种),整体使用下来给
我的感觉就是两个字简单,从安装到配置到使用到架构,都很简单。
安装过程如下:
1.安装apache
yum-yinstallhttpdmod_dav_svnsubversion
2.在apache下配置svn
vim/etc/httpd/conf.d/subversion.conf
LoadModuledav_svn_module
modules/mod_dav_svn.so
LoadModuleauthz_svn_module
modules/mod_authz_svn.so
<
locationsvn="
"
>
DAVsvn
SVNParentPath/var/svn
#Limitwritepermissiontolistofvalidusers.
#<
limitexceptget="
options="
propfind="
report="
#RequireSSLconnectionforpasswordprotection.
#SSLRequireSSL
AuthTypeBasic
AuthName"
AuthorizationRealm"
#AuthUserFile/svndata/test/conf/passwdfile
AuthUserFile/etc/subversion/passwd
AuthzSVNAccessFile/etc/subversion/auth
Requirevalid-user
/limitexcept>
/location>
其中/etc/subversion/passwd和/etc/subversion/auth是web管理界面下用户名和密码的集中存放位置,
在svn每个项目中的auth,passwd和svnserver.conf中就不再进行配置。
/var/svn是svn项目目录,所有的项目将存放在此目录下。
因此我们需要创建相关文件和目录:
mkdir-p/var/svn
chown-Rapache.apache/var/svn
创建认证文件和权限文件
touch/etc/subversion/passwd/etc/subversion/auth
vi/etc/subversion/passwd
vi/etc/subversion/auth
安装php
由于iF.SVNAdmin使用php写的,因此我们需要安装php
yuminstallphp-y
下载并配置svnadmin
#wget
#unzipsvnadmin-1.6.2.zip
#cp-riF.SVNAdmin-stable-1.6.2//var/www/html/svnadmin
#cd/var/www/html
#chown-Rapache.apachesvnadmin
#cd/var/www/html/svnadmin
#chmod-R777data
重启apache
服务svnadmin
servicehttpdrestart
启动webserver服务后,
浏览器地址输入http:
//servername/svnadmin出现配置界面,
输入下图中配置信息,输入每个配置信息可以点击旁边的Test测试是否输入正确,最后保存配置
保存后,会提示默认的账户为admin/admin。
登陆后我们可以在“Repositories”下“add”,添加项目目录;
在"
Users"
下添加用户;
在“Access-Paths”下关联对应项目的用户,并分配相关读写权限。
界面截屏
svn命令在linux下的使用
1、将文件checkout到本地目录
svncheckout
path(path是服务器上的目录)
例如:
svncheckoutsvn:
//192.168.1.1/pro/domain
简写:
svnco
2、往版本库中添加新的文件
svn
add
file
test.php(添加test.php)
svn
*.php(添加当前目录下所有的php文件)
3、将改动的文件提交到版本库
svncommit
-m
LogMessage"
[-N]
[--no-unlock]
PATH
(如果选择了保持锁,就使用--no-unlock开关)
svncommit-m
addtestfileformytest"
test.php
svnci
4、加锁/解锁
svnlock
LockMessage"
[--force]
svnlock-m
locktestfile"
svnunlock
5、更新到某个版本
svnupdate-r
mpath
svnupdate后接本地目录。
更新的是本地目录及子目录。
如:
svnupdaterepo0
200
test.php(将版本库中的文件test.php还原到版本200)
svnupdatetest.php(更新,于版本库同步。
如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svnresolved,最后再提交commit)
svnup
6、查看文件或者目录状态
1)svnstatus
path
(目录下的文件和子目录的状态,正常状态不显示)
【?
:
不在svn的控制中;
M:
内容被修改;
C:
发生冲突;
A:
预定加入到版本库;
K:
被锁定】
2)svnstatus-v
(显示文件和子目录状态)如:
#svnstatus-vrepo0
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:
svnstatus、svndiff和svnrevert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:
svnst
7、删除文件
svndelete
path-m
deletetestfle"
svndeletesvn:
//192.168.1.1/pro/domain/test.php-m
deletetestfile"
或者直接svndeletetest.php然后再svnci-m'
deletetestfile‘,推荐使用这种
svn(del,remove,rm)
8、查看日志
svnlog
svnlogtest.php显示这个文件的所有修改记录,及其版本号的变化
9、查看文件详细信息
svninfo
svninfotest.php
10、比较差异
svndiff
path(将修改的文件与基础版本比较)
svndifftest.php
-rm:
npath(对版本m和版本n比较差异)
svndiff-r200:
201test.php
svndi
11、将两个版本之间的差异合并到当前文件
svnmerge-r
m:
npath
200:
205
test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
12、SVN帮助
svnhelp
svnhelpci
------------------------------------------------------------------------------
以上是常用命令,下面写几个不经常用的
13、版本库下的文件和目录列表
svnlist
显示path目录下的所有属于版本库的文件和目录
svnls
14、创建纳入版本控制下的新目录
svnmkdir:
创建纳入版本控制下的新目录。
用法:
1、mkdirPATH...
2、mkdirURL...
创建版本控制的目录。
1、每一个以工作副本PATH指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
15、恢复本地修改
svnrevert:
恢复原始未改变的工作副本文件(恢复大部份的本地修改)。
revert:
revertPATH...
注意:
本子命令不会存取网络,并且会解除冲突的状况。
但是它不会恢复
被删除的目录
16、代码库URL变更
svnswitch(sw):
更新工作副本至不同的URL。
1、switchURL[PATH]
2、switch--relocateFROMTO[PATH...]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svnupdate”很像,也会将
服务器上文件与本地文件合并。
这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。
当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。
17、解决冲突
svnresolved:
移除工作副本的目录或文件的“冲突”状态。
resolvedPATH...
本子命令不会依语法来解决冲突或是移除冲突标记;
它只是移除冲突的
相关文件,然后让PATH可以再次提交。
18、输出指定文件或URL的内容。
cat
目标[@版本]...如果指定了版本,将从指定的版本开始查找。
svncat-rPREVfilename>
filename(PREV是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
从windowsVisualSVN迁移到linuxsvn
1、运行cmd,在命令行导出一个代码库
svnadmindumpD:
\Repositories\Android>
d:
\svnbak\Android.dump
2、将备份文件上传到linuxsvn服务器
3、在svnadmin中添加一个代码库http:
//192.168.1.221/svnadmin/repositorylist.php;
输入对应的代码仓库名,不创建标准结构,否则导入时会产生冲突。
4、在linuxsvn服务器上使用svnadminload导入
svnadminload/var/svn/Android<
/var/svnbak/Android.dump
5、按windows下的权限配置linux下svn的权限。
用户组和权限配置文件:
/etc/subversion/auth
用户配置文件:
/etc/subversion/passwd
TortoiseSVN使用教程
TortoiseSVN中分支和合并详解
使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的目的和合并的方法不甚了解,这才是硬伤。
最近由于适配机型的需要(本人从事手机客户端的开发),需要经常接触分支和合并两项工作,突然发现这玩意整不明白很难开展工作,遂这两天着重研究了一下,有点收获,怕以后忘了,故趁着余温尚在赶紧写下来,好记性不如烂笔头嘛。
下文的实践主要是参考了TortoiseSVN的帮助文档和Subversion的在线文档,Subversion的在线文档:
话说我公司现在的源代码管理挺乱的,svn目录并没有采取标准的source/branches、source/trunk结构,主线和分支放得到处都是,release版本也并没有当成tag处理,而是当成branch来管理,经常还要在release版本上改来改去。
。
先说说什么是branch。
按照Subversion的说法,一个branch是某个developmentline(通常是主线也即trunk)的一个拷贝,见下图:
branch存在的意义在于,在不干扰trunk的情况下,和trunk并行开发,待开发结束后合并回trunk中,在branch和trunk各自开发的过程中,他们都可以不断地提交自己的修改,从而使得每次修改在repository中都有记录。
设想以下场景,如果你的项目需要开发一个新功能,而该功能可能会修改项目中的绝大多数文件,而与此同时,你的另一位同事正在进行bugfix,如果你的新功能不在branch中开发而直接在trunk中开发,那么你极有可能影响另一位同事的bugfix,他/她在bug修复中可能会遇到各种各样的问题,因为你的频繁提交代码引入了过多的不稳定因素。
你可能会说,那我在开发的过程中不提交不就行了,等到我全部开发结束我再提交,是,你可以这么做,那还要版本控制干什么呢?
也许等到你最后提交代码的时候(也许一周,也许两周?
),你会发现有一大堆conflict等着你resolve。
那么,正确的做法是什么?
使用branch,从trunk创建branch,然后在你的branch上开发,开发完成后再合并到trunk中。
关于branch先讲到这里,下面说说什么叫做合并。
很好理解,当branch开发完成后(包括必要的测试),将branch中的修改同步到trunk中,这个过程有可能包括修改文件、增加文件、删除文件等等。
说到这里,貌似本文差不多可以结束了,不就是分支和合并么?
只要再简单地说说如何建立分支和如何合并就可以收尾了,可能只需两个命令,也可能只需鼠标点几下然后键盘敲两下即可。
其实事情远非这么简单,爱动脑筋的同学可能会问了,将branch的改动merge到trunk的时候,和上文说的直接在trunk中全部开发完然后提交有何区别?
你最后还不是要处理一大堆conflict?
这个问题问得非常好,其实这正是本文的重点:
branch和trunk在并行开发的过程中如何感知对方,branch如何才能在开发过程中不会和trunk越走越远,导致最后无法合并?
试想一下,如果在你开发branch的过程中,trunk中的某个类文件已经被删除了(这可能是另外一个家伙在另一个branch上开发了两周后才合并到trunk的),而你竟然在这个类文件上做了大量修改,试问你到最后合并回trunk的时候该有多蛋疼?
解决这一问题的唯一手段是,branch要不停地和trunk保持同步,你要及时地知道trunk都做了什么修改,这些修改是否会影响你正在开发的新功能,如果需要,你必须及时调整branch的代码,使之能与trunk“兼容”。
那么如何让branch和trunk保持同步?
合并,从trunk合并到branch,你没听错,是从trunk合并到branch。
关于TortoiseSVN的合并,有几点需要注意:
∙TortoiseSVN的合并发生在本地,也即你的workingcopy中,你无需过多担心会对repository中的代码造成影响
∙不管是从trunk合并到branch还是最终从branch合并回trunk,在每次合并前最好先update,然后将本地的修改先全部commit,保护好现场,万一合并不理想随时都可以revert
∙合并完成后看是否能正确编译,然后测试验证,最后将合并后的改动提交到repository
下面我将stepbystep地演示如何一次完整的branching和merging,包括创建分支、分支开发、分支和主线同步,分支合并到主线的全过程,甚至包括如何在本地创建一个测试用的repository。
首先需要安装TortoiseSVN,我安装的版本是:
TortoiseSVN1.6.15,Build21041-32Bit,2011/03/2318:
00:
27
1、本地Repository的创建
repository的创建很简单,假设我要在D:
\TortoiseSVN\TestRepository目录中创建repository,只需右键TestRepository目录,依次选择"
TortoiseSVN"
->
"
Createrepositoryhere"
便完成了repository的创建。
2、Checkout
假设要checkout到D:
\TortoiseSVN\TestSVN,同样很简单,在D:
\TortoiseSVN目录下创建TestSVN目录,然后在该目录上右键,选择"
SVNCheckout..."
,在弹出的窗口中的"
URLofrepository"
中填入"
file:
///D:
/TortoiseSVN/TestRepository"
,其他默认即可,最后点击ok。
3、trunk创建新项目MyProject
相当简单就不赘述了,只列出本次操作所作出的修改:
4、创建branch
在/trunk/MyProject目录上右键,依次选择"
Branch/tag..."
,在弹出窗口的"
ToURL"
中填入分支的地址,在这里目标revision选择HEADrevision,如下图所示,添加log后点击ok分支便建立了。
这个操作速度非常快,新建的branch在repository中其实只是一个指向trunk某个revision的软连接而已,并没有