1、文档名称Name 配置管理计划作业指导书 作者Author 林蓉 文档编号Num SOP_CM_05 版本号Version V0.1 时间Date 2009-04-28 SVN管理和使用作业指导书 修改记录 日期 版本 作者/修改者 描述 审核人 2008-04-28 V0.1 林蓉 初稿生成 应用软件部 文档名称Name 配置管理计划作业指导书 作者Author 林蓉 文档编号Num SOP_CM_03 版本号Version V0.1 时间Dat
2、e 2009-04-28 目录 1 目的 3 2 SVN管理 3 2.1 库的建立 3 2.2 SVN库目录结构规划 3 2.3 版本库的管理原则 4 2.4 代码受控原则 4 2.5 增加用户 5 2.5.1 参与人员 5 2.5.2 操作流程 5 2.6 新增项目 6 2.6.1 参与人员 6 2.6.2 操作流程 6 2.7 删除用户 6 2.7.1 参与人员 6 2.7.2 操作流程 6 3 SVN使用 7 3.1 安装后的常规设置 7 3.1.1 中文界面的设置 7 3.1.2 忽略文件 7 3.1.3 配置强制锁定文件 8 3.2
3、常用SVN操作 8 3.2.1 创建和使用工作副本(checkout) 8 3.2.2 设置文档和目录的属性 10 3.2.3 加锁与解锁 10 3.2.4 分支操作 12 3.2.5 合并操作 13 3.2.6 将别人的改动更新到你的工作拷贝 13 3.2.7 解决冲突 14 3.2.8 比较差异(Diff) 14 3.2.9 加入(Add)新文件/新文件夹 15 3.2.10 删除、重命名、移动 15 3.2.11 取消改变(revert) 16 3.2.12 修订日志窗口 17 3.2.13 送交committing 18 3.2.14 文件库浏览器The R
4、epository Browser 19 1 目的 本作业指导书规范应用软件开发部各项目开发中SVN使用和管理工作的内容和流程。 2 SVN管理 2.1 库的建立 运行Subversion服务器需要首先要建立一个版本库(Repository),可以看作服务器上存放数据的数据库,在安装了Subversion服务器之后,可以直接运行,如: svnadmin create E:\svndemo\repository 就会在目录E:\svndemo\repository下创建一个版本库。 我们也可以使用TortoiseSVN图形化的完成这一步: 在目录E:\svndem
5、o\repository下"右键->TortoiseSVN->Create Repository here...“, 然后可以选择版本库模式, 这里使用默认即可, 然后就创建了一系列目录和文件。一般选择FSFS 2.2 SVN库目录结构规划 A. 参考了国外一些主要的开发网站,如SourceForge,大同小异,类似这样的目录结构: SVN库 ┠tags(发布) ┃ ├1.1 rc1 ┃ ├1.2 ┃ ├1.5 ┃ └1.9 ┠trunk (主版本) ┃ └ project ┃ ├src ┃ ├classes
6、 ┃ └WEB-INF ┖branches (分支) └分支 主要的开发工作放在trunk,分支放在branches,发布版本放在tags。 B. 多项目情况 ├─ProjectManagement │ ├─trunk │ ├─branches │ └─tags └─SSO ├─trunk ├─branches └─tags ProjectManagement和SSO是两个项目 trunk是开发的主线代码, 存放能够运行的正确的代码; 程序员如果开发新的程序或者改bug, 一般要先branch(
7、SVN的一个功能) trunk目录下的代码到branches目录的一个子目录,在那里对代码进行修改, 确认无误后再提交到trunk主线下(但是有的时候为了效率, 我们也多人都在trunk目录下开发项目). tags目录可以看做主线代码的快照, 比如你做了1.0又做了2.0, 那每个不同版本的代码你就做快照放到tags文件夹下了. 2.3 版本库的管理原则 1) 版本库的管理原则 2) 项目负责人和版本管理员负责架构项目目录结构,包括配置文件、第三方控件、文档 3) 项目负责人分配开发人员目录权限,由版本管理员负责实施 ,权限分配粒度要细 4) trunk ,tags ,branche
8、s ,项目负责人、协同版本管理员构建tags 和branches 5) 项目负责人指定版本计划,版本管理员根据版本计划,提前通知开发人员提交文档,并告知冻结时间。 6) 版本管理员负责解决开发人员在开发过程中的有关版本问题 7) 开发人员每次修改,或者新增、删除、拷贝工作区对象后,应该立刻提交到版本库,有效保持工作区与资源库的高度一致 ,每天下班之前提交、(更新) 8) 开发人员在每次修改工作区中代码或者文档时,首先更新该对象,可以尽量减少冲突、合并 9) 保证提交到的版本库的代码没有BUG以免影响开发组 ,可以适当利用加锁机制,减少冲突 10) 版本管理员根据计划线表,冻结开
9、发库,并通知文件化负责人制作新的版本 11) 文件化负责人负责软件的测试版,构建测试环境 ,branches由版本管理员进行 (checkout) 12) 项目负责人和版本管理员负责发布软件的发布版 13) 版本管理员负责清理有关不需要的branches ,tags 2.4 代码受控原则 以下类型的文件不需要受控到SVN: *.obj *.idb *.pdb *.exp *.ilk *.pch *.res *.ncb *.suo *.user Debug Ankh.Load 提交commit时,需要说明提交的LOG,有相对应的ticket需要在log上写
10、上”ticket:xx” 2.5 增加用户 2.5.1 参与人员 SVN管理员、新用户 2.5.2 操作流程 1) 进入http://192.168.9.129/trac/Application/wiki,启动SVN,并用Admin管理员密码登录; 2) 点击按钮,左侧出现,选择User-> …; 3) Username统一采用姓+名声母的缩写,两个字的是全拼,三个字的是姓全拼+名的首字母。比如:林蓉(linrong),郭妍华(guoyh);以能从User name看出实际用户,命名统一为标准;Password输入密码:123 4) 进入http://192.168.9.129
11、/config/application/access.conf,设置新增用户在各个项目目录的权限 注:r-read读权限 rw-read&write读写权限 5) 权限确认 6) 启动SVN 客户端,并使用新增加的帐号和密码登录,确认用户已添加; 7) 修改配置文档config/config.ini,给新增用户添加员工机器人修改信息提示 8) 通知用户 您的SVN帐号如下: Username: linrong Password: 123 登录http://192.168.9.129/trac/Application/prefs/account…即可修改用户密码 权
12、限配置参考http://192.168.9.129/svn/application/99日常管理/01标准文档/SVN权限列表.xls 2.6 新增项目 2.6.1 参与人员 SVN管理员、项目开发者、项目组长 2.6.2 操作流程 1) SVN管理员了解要建立的项目名称、项目开发者和项目组长; 2) 启动SVN客户端,并用管理员帐号登录 3) 在$/下新建项目,退出; 4) 进入http://192.168.9.129/trac/Application/wiki,启动SVN,并用Admin管理员密码登录; 5) 点击按钮,左侧出现,选择User-> …;添加项目所有者和项目
13、组长 6) 修改配置文档config/config.ini,给新增用户添加员工机器人修改信息提示 7) 通知项目开发者和组长 新建了SVN项目目录$/NewProject,项目组员ProjectMember,项目组长ProjectLead; 权限配置参考http://192.168.9.129/svn/application/99日常管理/01标准文档/SVN权限列表.xls 2.7 删除用户 2.7.1 参与人员 SVN管理员,被删除用户,项目组长,下任项目所有者(可能有多个)。 2.7.2 操作流程 1) 删除前要提醒该用户,项目组长,把所负责的项目中check out的
14、内容check in 2) 进入http://192.168.9.129/config/application/access.conf,检查此用户拥有Check out权限的项目目录; 3) 启动SVN客户端,用该用户名和密码123登录; 4) 进入http://192.168.9.129/trac/Application/wiki,启动SVN,并用Admin管理员密码登录 5) 点击按钮,左侧出现,选择User-> …选择要删除的用户,删除此用户; 3 SVN使用 3.1 安装后的常规设置 3.1.1 中文界面的设置 将TortoiseSVN的操作语言设置为中文,点击Tor
15、toiseSVN—>Settings进行相应的常规设置 3.1.2 忽略文件 为防止在提交操作时将不必要的文件上传到SVN服务器上,可将项目中不需要受SVN控制的文件和文件夹通过设置忽略选项的方式排除掉。常被忽略的文件有 _* obj *.db *.resharper* *.Load *.pdb *.bak。可以根据实际需要来修改忽略参数, 每个需要忽略的文件(文件夹)名称之间用空格作分隔符,需要忽略的文件夹只要写文件夹名称就行,例如 obj,忽略obj文件夹及所包含文件;_*忽略所有_(下划线)开头的文件夹及所包含文件。注意,这个设置仅对本机有效,而且对本机的所有项目的本地工作区有效
16、对其他项目组成员没有影响。被忽略的文件仍可以通过“添加”命令使其受SVN控制。 操作界面如下图,只需将忽略参数填写在“全局忽略模式”后的文本框中即可。 3.1.3 配置强制锁定文件 点击上图中的“设置”,在打开的文件中找到“enable-auto-props = yes” 删除此行前面的所有#号,然后再找到”[auto-props]”,在后面添加一行,如图,表示所有类型的文件都自动上锁。 3.2 常用SVN操作 3.2.1 创建和使用工作副本(checkout) 为了获得一份工作副本,我们必须先“check out”仓库中的某一个子目录。 (check out
17、 事实上只是简单的创建一份工作副本而已)。例如,我们来 check out 一个 /calc 项目的工作副本: Subversion的档案库借助不同方法得到:本地磁盘、网络协议等: 例: http://build:88/prj/template http://build:88/prj/template/Dist 注:http://build:88是Apache设置的URL,prj是通过Apache设置的位置,template是档案库名称,Dist是目录名 在资源浏览器中选定将要存放工作目录的拷贝,右键弹出快捷菜单,选择SVN Checkout
18、将出现对话框:(如果该目录已在版本控制下,则没有取出而是更新(Update)和送交(Commit)) 如果文件夹不存在,会自动创建。 注意: 你只能将文件取出到一个空目录里。如果你想取出刚导入的文件,Subversion将报错。你只能将文件取出到另一个目录或先删除已经存在的源文件再执行取出。 3.2.2 设置文档和目录的属性 右击文件(或目录)->属性,选择Subversion页可以设置文件的属性,目前版本可以设置如下属性: svn:eol-style:文档的结束符 svn:executable:可执行文件 svn:keywords:作者,日期等信息
19、svn:needs-lock:锁定后才能修改,锁定前为只读(常用) svn:mime-type:mime格式的文档 l 设置文档的属性 l 设置目录的属性 3.2.3 加锁与解锁 n 加锁:右击要锁定的文档或目录之后选择Get lock 注意:右击目录的话,默认是锁定目录下的所有文件,可以根据需要选择需要锁定的文档 n 解锁:右击要锁定的文档或目录之后选择Release lock 注意:右击目录的话,默认是解锁该目录下的所有加锁文件,可以根据需要选择需要解锁的文档 3.2.4 分支操作 利用分支操作,可以很轻松的保存不同版本的文档
20、 3.2.5 合并操作 Svn提供2种merge方式 l Merge同一个目录的不同版本 一般用于误操作,导致覆盖了别人的文档文档时,将被覆盖的文档与最新版的文档merge l Merge分支 一般用于多个工程集成开发时,将开发分线上的Release版本merge到开发主线的目录下面 3.2.6 将别人的改动更新到你的工作拷贝 l 有时你想将他人的改动合并到你本地的工作拷贝。从服务器上取改动到本地 的过程叫更新updating。 更新也许是单个文件、或选择的一组文件、或整个目录。在资源浏览器中选择待更新的文件或目录, 右键并选择更新update ,他人的修改将合并
21、到你本地的文件中,你所做的改动保存在同一文件中。这时档案库没有受变化,即合并只在本地进行。 l 如果你和他人改动的是相同部分但改动不一样,就会在更新过程中产生冲突 conflicts。冲突在对话框中用红色表示,冲突的文件图标将出现标志。双击后用外部编辑器解决冲突。 l TortoiseSVN也允许你将工作拷贝更新到指定版本。用更新至版本Update to Revision... 命令,在弹出的对话框中输入指定的版本号即可。 3.2.7 解决冲突 选择的文件,点击鼠标右键菜单中选择“编辑冲突Edit Conflict”来打开合并工具或冲突编辑器,做一些必要的修改,然后
22、保存文件。然后选择菜单中的“已解决的Resolved”命令执行,接着提交commit修改到仓库。 注意:命令“已解决的Resolved”并没有真正的解决冲突,它只不过是把“文件名称.扩展名.mine” 和 “文件名称.扩展名.r*”(r*中星号代表任意位数字,即版本号)删除,并允许你提交修改而已。因此,建议在有冲突发生时要先执行“编辑冲突Edit Conflict” 再执行“已解决的Resolved”;如果确信自己的修改是正确的,不需要保留他人的修改,可将文件名称.扩展名.mine去掉“.mine”后缀,并把“.r*”后缀的文件和“”的文件删除,然后正常“提交Commit”,版本库中将保存自
23、己的版本。 3.2.8 比较差异(Diff) [本地工作区] 修改后,被修改的文件出现标志,选择 “比较差异Diff” 命令,可以查看该文件与版本仓库中文件具体差异,选择命令后出现对应的差异察看窗口。 3.2.9 加入(Add)新文件/新文件夹 想把在开发过程中创建的新文件/文件夹加入到SVN控制之下,可以这样做:选中文件/文件夹(在新文件/文件夹所在父文件夹点击右键),然后在菜单中选择“添加Add”命令。不需要受SVN控制的文件请取消钩选。 在把文件或文件夹加入到控制之下后,这些文件或文件夹就会显示为一个Added覆盖图标的样子,接下来必须对[本地工作区] 执行提交c
24、ommit操作,以便其他团队成员能够看到这些文件或文件夹。 3.2.10 删除、重命名、移动 选择要删除(或重命名)的文件/文件夹,点击鼠标右键选择相应命令: 如果使用TortoiseSVN的“删除Delete”操作删除了一个文件/文件夹,文件就已经从[本地工作区]中删除了,而被“删除Delete”的文件夹将显示为覆盖图标。要恢复被“删除Delete”文件/文件夹,只需对他的上级文件夹进行“SVN还原revert”操作即可。 如果要在[本地工作区]内移动文件,可以使用鼠标来拖拽: 1. 选中要移动的文件或文件夹。 2. 用鼠标右键拖拽他们到[本地工作区]中一个新的文件夹。
25、 3. 松开鼠标右键。 4. 在跳出的菜单中选择相应命令,如下图: 如果一个删除操作不是使用TortoiseSVN的“删除Delete”操作完成的,而是就像平常删除文件那样删除的。提交时,对话框窗口还是会显示这些删除的文件,并提示自己把它们从版本控制下删除。所以如果忘记使用TortoiseSVN“删除Delete”操作来删除这些文件,仍可在这里补上。 3.2.11 取消改变(revert) 如果要取消对一个文件/文件夹所做的修改,只需用鼠标右键单击该文件/文件夹,选择TortoiseSVN—>SVN还原revert,在操作窗口中会显示需要还原的文件/文件夹,勾选文件/文件夹后按
26、下“确定OK”按钮即可。注意这里所做的取消修改只能返回到该文件/文件夹上次“更新Update”后的状态。 3.2.12 修订日志窗口 每一次修改和提交,都应该做好日志记录。这样开发过程中就有了一个详细的记录,以后便可找出每一个修改是如何修改以及为什么这样修改的。 选择TortoiseSVN-->显示日志,日志对话框会显示所有日志信息。显示分成3个部分: a) 最上面部分显示的是所有被提交的版本列表。显示有日期时间、提交者、修订版本号和日志信息的前面一部分。用蓝色显示的行表示有某些文件被复制到了这个版本。(也许是从一个分支来的) b) 中间部分显示的是选中版本的所有日志信息。 c
27、) 底部显示的是选中版本所做修改的文件和文件夹列表。 还不仅仅是这些,对话框中还提供了很多的菜单命令可以使用。 3.2.13 送交committing 改动送到档案库Sending Your Changes To The Repository 这个过程叫送交committing 。 在送交前需要确认工作拷贝是最新的。用更新Updates 或先用检查更新Check For Updates 检查变更了的文件。如果你的 工作拷贝已更新且无冲突,可用快捷菜单中的送交Commit... 完成送交过程。 3.2.14 文件库浏览器The Repository Browser 选择TortoiseSVN-->Repo-browser 文件库浏览器菜单,就可以打开Subversion服务器上版本库的结构,并可以对版本库中的文件/文件夹进行操作,如下图:






