??xml version="1.0" encoding="utf-8" standalone="yes"?> 厦门央瞬公司是一家电子元器g讑֤供应商,其中有个ARM部门Q专门负责ARM芯片的方案设计、销售,q在北京、上各讄了一个办事处。对于工作日志,原先采用邮g方式发给l理Q但是这U方式有个缺点,那就是不具备q箋性,要看以前的日志必M一邮件去查看Q很ȝ。于是就惛_利用 SubversionQ?让员工在自己电脑上编辑日志,然后利用svn传送回来,既方便员工自q写日志,又方便对日志的归档处理,而且提交日志的时候只需要执行一?svn update 卛_Q比发送邮件还要简单的多?/p>
svn服务器相关信?/p>
arm部门文的目录结构如? 人员情况 讉K权限需求分?/p>
在服务器 D:\svn 目录下,建立 arm 代码库,命o如下: 在客h F:\temp 目录下,建立好上q目录结?/p>
用命?F:\temp>svnimportarmsvn://192.168.0.1/arm 导入l构 【注意点Q关于导入时候的l微差别?/p>
~辑代码?arm\conf\svnserve.conf 文gQ如? 新徏代码?arm\conf\passwd.conf 文gQ如? 新徏代码?arm\conf\authz.conf 文gQ内容如? 在服务器上,打开一?DOS Prompt H口Q输入如下指? 我们应该得到如下目录l构: 然后修改ref目录下Q意文件ƈ提交Q服务器会报错“Access deni?/p>
本章详l介l前一章所涉及的两个配|文Ӟ svnserve.conf ?authz.confQ通过寚w|逐行的描qͼ来阐明其中的一些细节含义?/p>
q里首先要注意一点,M配置文g的有效配|行Q都不允许存在前|空|否则E序会无法识别。也是_如果你直接从本文的纯文本格式中拷贝了相关的配|行q去Q需要手动将前置?个空格全部删除。当然了Q如果你觉得一下子要删除好多行的同h目的前置I格是一件苦差Q那么也?UltraEdit 的“Column Mode”编辑模式,可以l你很大帮助呢?/p>
arm\conf\svnserve.conf
文gQ是 svnserve.exe q个服务器进E的配置文gQ我们逐行解释如下?/p>
首先Q我们告?svnserve.exeQ用户名与密码放?passwd.conf 文g下。当Ӟ你可以改成Q意的有效文g名,比如默认的就?passwd: 接下来这两行的意思,是说只允许经q验证的用户Q方可访问代码库?那么哪些是“经q验证的”用户呢Q噢Q当Ӟ是前面说那些在 passwd.conf 文g里面持有用户名密码的家伙。这两行的等号后面,目前只允?read write none 三种|你如果想实现一些特D的|比如说“read-once”之cȝQ徏议你自己动手Ҏ代码Q反正它也是自由软g: 接下来就是最关键的一句呢Q它告诉 svnserve.exeQ项目目录访问权限的相关配置是放?authz.conf 文g? 当然Qsvn 1.3.2 引入本功能的时候,pȝ默认使用 authz 而不?authz.conf 作ؓ配置文g。不q由于鄙人是处女座的Q有着强烈的完主义情l,看着 svnserve.conf 有后~?passwd ?authz 没有是不爽Q硬是要改了?/p>
arm\conf\authz.conf
文g的配|段Q可以分Zc,``[group]`` 是一c,里面攄着所有用户分l信息。其余以 [arm:/] 开头的是另外一c,每一D就是对应着目的一个目录,其目录相x限,在此段内设|?/p>
首先Q我们将人员分组理Q以便以后由于h员变动而需要重新设|权限时候,量改动东ѝ我们一p|了5个用户分l,分组名称l一采用 g_ 前缀Q以方便识别。当然了Q分l成员之间采用逗号隔开: 注意到没有, linda q个帐号同时存在“总部”和“文档员”两个分l里面,q可不是我老眼昏花写错了,是因?svnserve.exe 允许我这栯|。它意味着Q这个家伙所拥有的权限,会比他的同?rory 要多一些,q样的确很方ѝ具体多了哪些呢Q请往下看Q?/p>
接着Q我们对目根目录做了限Ӟ该目录只允许arm事业部的l理才能修改Q其他h都只能眼巴巴的看着: 然后Q我们要l总部人员开放日志目录的d权限: 现在来看?/p>
好了Q我们现在掌握了“扎쀝的威力Q它让我们节省了不少敲键盘的旉。可是现在又有一个问题了Q?/p>
属性具备覆盖性质子目录若讄了属性,则完全覆盖父目录?/p>
把这个问题专门提出来Q是因ؓ?.3.1及其以前的版本里面,有个bugQ即Z子目录的写权限,目首目录必d备读权限。因此现在用了1.3.2版本Q就方便了那些想在一个代码库存放多个怺独立的项目的理员,来分配权限了。比如说央舜公司建立一个大的代码库用于存放所有员工日志,叫做 diaryQ而arm事业部只是其中一个部门,则可以这样做: q样Q对于所有arm事业部的人员来说Q就可以?svn://192.168.0.1/diary/arm q个URL当作根目录来q行日常操作Q而完全不它其实只是一个子目录Qƈ且当有少数好奇心比较强的人想试着 checkout 一?svn://192.168.0.1/diary 的时候,马上׃得到一个警告“Access deni”,哇,太酷了?/p>
如果说我Ҏ个目录不讄M权限Q会怎样Q马上动手做个试验,? Ҏ: q样q当于什么都没有讄。在我的 svn 1.3.2 版本上,此时是禁止Q何访问。也是_如果你想要让某h讉K某目录,你一定要昑ּ指明q一炏V这个策略,看v来与防火墙的{略是一致的?/p>
若设|了: 则svnserve认ؓQQ何hQ都不允许改动diary目录Q包括删除和改名Q和新增?/p>
也就是说Q如果你在项目初期创建目录时候,一不小心写错目录名Uͼ比如因拼写错误写?dairyQ以后除非你改动 authz.conf 里面的这行设|,否则无法利用 svn mv 命o错误的目录更正?/p>
上午上班的时候,Morson 来到 Michael 的桌子前面,说道Q“你是否可以我们的北京办、上办目录Q改成用中文的,看着那些拼音我觉得很隑֏Q?Michael 心想Q还好这两天刚了解了一些与 unicode ~码相关的知识,于是微笑地回{:“当然可以,你明天下午就可以看到中文目录名称了。?/p>
使用 svn mv 指oQ将原来的一些目录改名ƈ commit 入代码库Q改名后的目录结构如? 修改代码库的 authz.conf 文gQ将相应目录逐一改名 使用 UltraEdit ?authz.conf 文g转换成不?BOM ?UTF-8 格式 配|文件{换成 UTF-8 格式之后QSubversion p够正识别中文字W了。但是这里需要注意一点,卛_M?UTF-8 文g不包?BOM 。BOM ?Byte Order Mark 的羃写,?UNICODE 文g头部用于指明高低字节排列序的几个字W,通常?FFFE Q而将之用 UTF-8 ~码之后Q就?EFBBBF 。由?UTF-8 文g本n不存在字节序问题Q所以对 UTF-16 {编码方式有重大意义?BOMQ对?UTF-8 来说Q只有一个作用——表明这个文件是 UTF-8 格式。由?BOM 会给文本处理带来很多NQ所以现在很多Y仉要求使用不带 BOM ?UTF-8 文gQ特别是一些处理文本的软gQ如 PHP?UNIX 脚本文g{,svn 也是如此?/p>
目前常用的一些文本编辑工具中QMS Windows 自带的“记事本”里面,“另存ؓ”菜单保存出来的 UTF-8 格式文gQ会自动带上 BOM 。新版本 UltraEdit 提供了选项Q允许用户选择是否需?BOMQ而老版本的不会d BOM。请各位查看一下自己常用的~辑器的说明文gQ看看它是否支持q个功能?/p>
利用 UltraEdit Q我们可以将 BOM L。方法是Q首先利用“UTF-8 TO ASCII”菜单将文g转换成本地编码,通常是GB2312码,然后再用“ASCII TO UTF-8(UNICODE Editing)”来转换?UTF-8 卛_?br />
1 背景假设
arm 部门名称
├─diary 工作日志目录
? ├─headquarters 总部工作日志目录
? ├─beijing 北京办日志目?
? └─shanghai 上v办日志目?
├─ref 公司公共文g参考目?
└─temp 临时文g目录
2 建立代码?/a>
D:\svn>svnadmin create arm
3 ~辑代码库基配置文g
[general]
password-db = passwd.conf
anon-access = none
auth-access = write
authz-db = authz.conf
4 理用户帐号
[users]
morson = ShowMeTheMoney
michael = mysecretpassword
scofield = hellolittilekiller
lincon = asyouknows111
rory = 8809117
linda = IlikeWorldCup2006
5 建立目录讉K权限控制文g
[groups]
g_vip = morson
g_manager = michael
g_beijing = scofield
g_shanghai = lincon
g_headquarters = rory, linda
g_docs = linda
[arm:/]
@g_manager = rw
* = r
[arm:/diary/headquarters]
@g_manager = rw
@g_headquarters = rw
@g_vip = r
* =
[arm:/diary/beijing]
@g_manager = rw
@g_beijing = rw
@g_vip = r
* =
[arm:/diary/shanghai]
@g_manager = rw
@g_shanghai = rw
@g_vip = r
* =
[arm:/ref]
@g_manager = rw
@g_docs = rw
* = r
[arm:/temp]
* = rw
6 试
svn co svn://127.0.0.1/arm --no-auth-cache --username rory --password 8809117
arm
├─diary
? └─headquarters
├─ref
└─temp
深入
1 svnserve.conf
password-db = passwd.conf
anon-access = none
auth-access = write
authz-db = authz.conf
2 authz.conf 之用户分l?/a>
[groups]
# M惌查看所有文的非本部门人士
g_vip = morson
# l理
g_manager = michael
# 北京办h?
g_beijing = scofield
# 上v办h?
g_shanghai = lincon
# 总部一般员?
g_headquarters = rory, linda
# 秘Q撰写文?
g_docs = linda
3 authz.conf 之项目根目录
[arm:/]
@g_manager = rw
* = r
4 authz.conf 之项目子目录
[arm:/diary/headquarters]
@g_manager = rw
@g_headquarters = rw
@g_vip = r
* =
5 authz.conf 的其他注意点
[diary:/]
@g_chief_manager = rw
[diary:/arm]
@g_arm_manager = rw
@g_arm = r
[diary:/]
@g_chief_manager = rw
[diary:/]
# @g_chief_manager = rw
[arm:/diary]
* = r
改进
1 对中文目录的支持
arm
├─工作日志
? ├─总部人员
? ├─北京?
? └─上v?
├─公司公共文g参考目?
└─临时文g存放?
作者:郑新?
]]>
?/span>
Eclipse
中?/span>
Subversion
来进行版本控Ӟ需要下载插?/span>
Subclipse
Q下载网址?/span>
http://subclipse.tigris.org
Q需要根?/span>
Eclipse
的版本下载相应版本的
Subclipse
Q我们这里下载针?/span>
Eclipse3.x
的版本,当前最新版本ؓ
subclipse-
在这里,我们该文gҎ贝到Eclipse?/span>plugin目录下,q徏立相应的目录l构Q我们命名ؓsubversionQ最l的目录l构如下Q?br />
同时Q我们在eclipse/links目录下,新徏subversion.link文gQ文件内容只有一行:path=plugin/subversionQ然后我们启?/span>EclipseQ在“首选项Q?/span>>组”中可以看?/span>Subversion的插仉项了?br />
二、在Eclipse中操?/span>
1、共享项?/span>
?/span>Eclipse中新建项目,然后在项目的右键菜单中选择“小l?/span>à׃n目”,
在弹出的H口中选择?/span>SVN”,点击“下一步”,选择“用已有资源库位置”,然后选择“下一步”直到完成,可以将新项目导入到Subversion服务器的文g库中q行版本控制?/span>
2、导出项?/span>
点击“新建项目”,在窗口中选择“从SVN取出目”,然后选择资源库位|,按照提示的操作进行直到完成,q样可以从Subversion服务器中导出已进行版本控制的目?br />
取出后的目目录如下Q?/span>
q时操作菜单如下Q?br />
具体操作?span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Subversion客户端相|q里׃做具体介l了?/span>
一?/span> 软g下蝲q安?/span>
1?span style="FONT: 7pt 'Times New Roman'"> 服务?/span>
1
Q下?/span>
Subversion
服务器端软gQ网址Q?/span>
http://subversion.tigris.org/
。在下蝲面扑ֈ
Windows NT, 2000, XP and 2003
Q?/span>
然后点击相关q接q入卛_下蝲Q目前最新版本是
svn-
2
Q下载后Q运?/span>
svn-
2?span style="FONT: 7pt 'Times New Roman'"> 客户?/span>
1
Q下?/span>
Subversion
?/span>
windows
客户端程?/span>
TortoiseSVN
和中文语a包,|址Q?/span>
http://tortoisesvn.tigris.org/
。目前最新版本是
TortoiseSVN-
2
Q下载后Q先q行
TortoiseSVN-
二?/span>
建立版本?br />
q行
Subversion
服务器需要首先要建立一个版本库Q?/span>
Repository
Q,可以看作服务器上存放数据的数据库Q有两种Ҏ可以建立版本库:
1?span style="FONT: 7pt 'Times New Roman'">
命o行方法:在命令行模式下,q行
svnadmin create f:\repository
Q即可在
F
盘下创徏一个版本库
repository
?br />
2?span style="FONT: 7pt 'Times New Roman'">
界面操作ҎQ在
F:\repository
目录下,右键Q选择
TortoiseSVN
下的“在此创建文件库”,文g库类型选择默认的“本地文件系l?/span>
(FSFS)
”,q样׃在该目录下创Z个版本库?br />
三?/span> 配置用户和权?/span>
1?span style="FONT: 7pt 'Times New Roman'"> ?/span> F:\repository\conf\svnserve.conf 文g中去?/span> # password-db = passwd 前面的 # 号和I格Q空g定要LQ否则会报错Q?/span>
svnserve.conf 文g内容如下Q?/span>
[general]
# anon-access = read
# auth-access = write
# password-db = passwd
# authz-db = authz
# realm = My First Repository
各参数定义如下:
anon-access Q定义非授权用户的访问权限,有三U方式: none ?/span> read ?/span> write Q设|ؓ none 限制讉KQ?/span> read 为只读, write 为具有读写权限,默认?/span> read ?/span>
auth-access Q定义授权用L讉K权限Q有三种方式Q?/span> none ?/span> read ?/span> write Q设|ؓ none 限制讉KQ?/span> read 为只读, write 为具有读写权限,默认?/span> write ?/span>
password-db Q定义保存用户名和密码的文g名称Q这里ؓ passwd Q和该文件位于同一目录?/span>
authz-db Q定义保存授权信息的文g名称Q这里ؓ authz Q和该文件位于同一目录?/span>
realm Q定义客Lq接是的“认证命名空间”, Subversion 会在认证提示里显C,q且作ؓ凭证~存的关键字?/span>
2?span style="FONT: 7pt 'Times New Roman'"> ?/span> F:\repository\conf\ passwd 文g中去?/span> # harry = harryssecret ?/span> # sally = sallyssecret 两项前面?/span> # 号和I格?/span>
passwd 文g内容如下Q?/span>
[users]
# harry = harryssecret
# sally = sallyssecret
q里定义了两个用?/span> harry ?/span> sally Q用户密码分别是 harryssecret ?/span> sallyssecret 。同P我们q可以定义自q用户名和密码?/span>
四?/span> q行服务?/span>
在命令行模式下,q行
svnserve –d –r f:\repository
Q服务器卛_启动?/span>
五?/span>
初始文g导入
1?/span>
在我们想要做版本控制的项目根目录下,右键Q选择
TortoiseSVN
中的导入Q?/span>
2、然后提C入文件库路径Q如Q?/span>
svn://localhost/repository
Q?br />
3、确定后提示要输入用户名和密码,输入我们?/span> passwd 文g中定义的用户名和密码后(如用户名?/span> harry Q密码ؓ harryssecret Q,数据导入到我们定义的版本库 repository 中了?/span>
六?/span> 客户端操?/span>
1?span style="FONT: 7pt 'Times New Roman'"> 从版本库中取出项目:
在右键菜单中选择?/span>
SVN
取出”,
然后在“文件库
URL
”一栏填?/span>
Subversion
服务器上文g库的路径Q如Q?/span>
svn://localhost/repository
Q确定后Q就可以取出文g?/span>
repository
中的文g?br />
2?span style="FONT: 7pt 'Times New Roman'"> 更新目Q?/span>
在右键菜单中选择?/span>
SVN
更新”就可以文件库中最新版本的文g取到本地计算Z?br />
3?span style="FONT: 7pt 'Times New Roman'"> 提交修改Q?/span>
对修改过的文件确定没有问题后卛_提交到文件库中,
定后,卛_修改过的文件提交到版本库中?br />
4?span style="FONT: 7pt 'Times New Roman'"> 查看文g?/span>
选择“文件库览器”菜单,可以打开
Subversion
服务器上可见的文件库Q?/span>
q可以对文g库中的文件及文g夹进行操作?br />