SVN日常操作手册

andyluhh

贡献于2011-03-09

字数:6970 关键词: Subversion 版本控制系统 手册 培训 diff

 内部公开▲ SVN日常操作手册 1. 安装TortoiseSVN和中文包(可选) \\10.45.4.39\bsn内部培训\svn\VisualSVN\TortoiseSVN-1.6.8.19260-win32-svn-1.6.11.msi \\10.45.4.39\bsn内部培训\svn\VisualSVN\LanguagePack_1.6.8.19260-win32-zh_CN.msi TortoiseSVN会将资源管理器进行扩展,在右键菜单中添加子菜单,提供svn的功能。 内部公开▲ 2. 安装后的常规设置 2.1 中文界面的设置: 2.2 忽略文件的设置: 为防止在提交操作时将不必要的文件上传到SVN服务器上,可将项目中不需要受SVN控制的文件和文件夹通过设置忽略选项的方式排除掉。常被忽略的文件有 _* obj *.db *.resharper* *.Load *.pdb *.bak。可以根据实际需要来修改忽略参数, 每个需要忽略的文件(文件夹)名称之间用空格作分隔符,需要忽略的文件夹只要写文件夹名称就行,例如 obj,忽略obj文件夹及所包含文件;_*忽略所有_(下划线)开头的文件夹及所包含文件。注意,这个设置仅对本机有效,而且对本机的所有项目的本地工作区有效,对其他项目组成员没有影响。被忽略的文件仍可以通过“添加”命令使其受SVN控制。 操作界面如下图,只需将忽略参数填写在“全局忽略模式”后的文本框中即可。 内部公开▲ 3. 导入数据到版本库 一般第一次将本机代码用svn进行版本控制时,批量的将代码一次全部放到版本库中用此功能。有两种常用的方式: 3.1 直接“导入Import…” 对要执行导入操作得项目文件夹进行如下清理: 1. 把项目中不需要的文件删除。(临时文件、编译器创建的文件,比如*.obj、二进制文件等。) 2. 把文件夹和子文件夹中的所有文件整理一遍。虽然你可以在导入之后再来进行重命名或删除等操作,但是还是推荐你在导入之前把你的项目整理好。 在资源管理器(windows explorer)中选择项目(本地硬盘上)的根文件夹,单击鼠标右键,选择导入Import…命令,跳出一个对话框: 内部公开▲ 在这个对话框中你需要填写你要将项目导入仓库的URL地址(svn必须小写)。导入信息(Important Message)是用来记录日志信息的。注意:与“忽略样式exclude pattern”匹配的文件或文件夹不会被导入,除非选择了“包含忽略的文件”选项。 按下“确定”按钮后,TortoiseSVN就开始把整个文件夹树(包括所有文件)导入到仓库。用来做“导入Import”操作的这个文件夹的名字不会出现在仓库中,只有文件夹中的内容会出现。 注意:刚才用来做“导入Import”操作的这个文件夹并没有处于版本控制下!要获取一份处于版本控制之下的[本地工作区]副本,你需要对刚导入的版本做一次“检出Checkout”操作。 3.2 “检出Checkout”—>“提交Commit” 新建一个空文件夹作为[本地工作副本]的存放文件夹(建议与项目同名),在文件夹上(或者文件夹里)单击鼠标右键后在命令菜单中选择“检出Checkout…”,出现操作窗口。注意:只能检出Checkout到一个空文件夹。 内部公开▲ 把本地硬盘上的项目文件夹中的内容(不要复制项目的根文件夹)全部复制到[本地工作副本] 文件夹中,并对文件夹中进行清理操作(同“导入Import”操作前的清理操作)。然后选择[本地工作副本] 文件夹单击鼠标右键跳出菜单,选择命令“提交Commit…”: 提交对话框会显示每一个有修改的文件,包括新增的,删除的,还有没有版本控制的。如果不想 内部公开▲ “提交Commit”某个有变更的文件,只需取消勾选那个文件即可。相反,如果要提交某个未受版本控制的文件,只需勾选它就可以然后“提交Commit”即可。 4. 浏览版本库 4.1 通过IE方式浏览 如果没安装SVN客户端,在IE输入相应的URL同样可以浏览配置管理系统。但通过IE方式只支持浏览,不支持对代码的修改。 4.2 通过客户端方式浏览 具体步骤: 1、选择“版本库浏览器”菜单 2、输入版本库地址 3、输入域用户账号 内部公开▲ 访问SVN库使用的是域用户账号。在PC机上第1次访问SVN库时,会自动弹出登陆认证的窗口(如下图1),将域帐户填入用户名和密码,并保存认证即可。在以后访问同样的SVN库时,不会再要求认证。 4、打开Subversion服务器上版本库的结构,以资源管理器方式对服务器文件进行管理。 内部公开▲ 5. 日常开发中的SVN常用操作(重要) 内部公开▲ 名词含义: TortoiseSVN检出:将服务上的版本更新到本地 TortoiseSVN更新:将服务上的变化更新到本地 TortoiseSVN提交:将本地的变化提交到服务器 TortoiseSVN还原:取消本地的修改,将服务器文件覆盖本地文件。 检查更新:即比较差异。对比update到本地的文件和自己修改过的文件的变化。 更新至版本:将服务器的某个版本更新到本地,最常用的是获取最新版本(HEAD revision)。 获取锁定:锁定某个文件,使他人在解锁之前不能更改对应服务器文件。 解除锁定:解除对文件的锁定,使他人可以更改对应服务器文件。 5.1 版本号的解释 SVN系统中的版本号准确应该叫做“修订版本号”,每当版本库接受了一次提交Commit,文件系统进入了一个新的状态,叫做一次修订(revision),每一个修订版本被赋予一个独一无二的、递增的自然数,这个自然数就是修订版本号。 受控项目中任何一个受控文件/文件夹进行了修改提交Commit操作,项目的版本号就会提升一次,没有进行修改的文件/文件夹其版本号不会发生变化。受控项目每一个状态都包含项目的所有文件/文件夹,引起该次版本号增加的即修改了的文件/文件夹保存新副本,没有发生修改的文件/文件夹保存引用,因此项目中的文件/文件夹可能与项目的版本号不同。 5.2 检出(Checkout)到本地工作副本(work copy) SVN检出第一次检出时,在本地新建一个文件夹,在此文件夹点击右键,选择【SVN检出】弹出对话框,填写需要检出的文件夹对应的版本库URL,点击确定即可开始下载最新版本。以后再需要获取最新服务器版本只需要执行update即可。 内部公开▲ 5.3 工作副本中SVN的特有标识说明 工作副本中的每个文件夹下都存在隐藏的.svn管理区域,请不要删除或改变它,所有的文件信息都在里面。 工作副本中的文件夹/文件带有SVN的特有标识 图标说明如下: normal 一个新checkout的工作副本使用绿色的对勾做重载。表示TortoiseSVN状态正常。 modified 在你开始编辑一个文件后,状态就变成了已修改,而图标重载变成了红色感叹号。通过这种方式,你可以很容易地看出哪些文件从你上次更新工作副本后被修改过,需要被提交。 内部公开▲ conflicted 如果在更新的过程中出现了冲突,图标会变成黄色感叹号。 locked 如果你拥有了一个文件的锁,并且Subversion状态是正常,这个重载图标就提醒你如果不使用该文件的话应该释放锁,允许别人提交对该文件的修改。一般对于二进制文件,或者其他不太适合合并的文件,可采用“锁定-编辑-解锁”模型。 readonly 如果一个文件被某用户设置了svn:needs-lock属性,Subversion会让其他用户在更新此文件时,得到一个只读的文件,具有这个重载图标的文件来表示你必须在编辑之前先得到锁,获得锁的过程会将文件置为可写。 deleted 这个图标表示当前文件夹下的某些文件或文件夹已经被调度从版本控制中删除,或是该文件夹下某个受版本控制的文件丢失了。 added 加号告诉你有一个文件或目录已经被调度加入版本控制。 ignored 设置了需要忽略的文件。 内部公开▲ non-version 没有纳入版本管理的文件。 5.4 修改文件、比较差异(Diff)、比较文件历史 工作副本中的文件修改后,被修改的文件出现标志,选择 “比较差异Diff” 命令,出现对应的差异察看窗口。通过比较你修改后的文件和.svn的“原始”文件(即update到本地的文件)来输出信息, 删除的行前面加一个-,添加的行前面有一个+。 比较文件历史变更 在SVN客户端,选中需要比较的文件,右击-显示日志,在日志信息窗口,选择需要比较的2个历史版本,即可比较差异。 内部公开▲ 5.5 添加(Add)新文件/新文件夹 想把在开发过程中创建的新文件/文件夹加入到SVN控制之下,可以这样做:选中文件/文件夹(在新文件/文件夹所在父文件夹点击右键),然后在菜单中选择“添加Add”命令。不需要受SVN控制的文件请取消钩选。 在把文件或文件夹加入到控制之下后,这些文件或文件夹就会显示为一个Added覆盖图标的样子,接下来必须对[本地工作区] 执行提交commit操作,才会上传到服务器上,以便其他团队成员能够看到这些文件或文件夹。此时被添加的文件/文件夹在你的[本地工作区]的图标变为的样子。 5.6 删除、重命名、移动 选择要删除(或重命名)的文件/文件夹,点击鼠标右键选择相应命令: 内部公开▲ 如果使用TortoiseSVN的“删除Delete”操作删除了一个文件/文件夹,文件就已经从[本地工作区]中删除了,而被“删除Delete”的文件夹将显示为图标。要恢复被“删除Delete”文件/文件夹,只需对他的上级文件夹进行“SVN还原revert”操作即可。 如果一个删除操作不是使用TortoiseSVN的“删除Delete”操作完成的,而是就像平常删除文件那样删除的。提交时,对话框窗口还是会显示这些删除的文件,并提示自己把它们从版本控制下删除。所以如果忘记使用TortoiseSVN“删除Delete”操作来删除这些文件,仍可在这里补上。 如果要在[本地工作区]内移动文件,可以使用鼠标来拖拽: 1.  选中要移动的文件或文件夹。 2.  用鼠标右键拖拽他们到[本地工作区]中一个新的文件夹。 3.  松开鼠标右键。 4.  在跳出的菜单中选择相应命令,如下图: 5.7 取消改变(revert) 如果要取消对一个文件/文件夹所做的修改,只需用鼠标右键单击该文件/文件夹,选择TortoiseSVN子菜单中的“SVN还原revert”命令,在操作窗口中会显示需要还原的文件/文件夹,勾选文件/文件夹后按下“确定OK”按钮即可。注意这里所做的取消修改只能返回到该文件/文件夹上次“更新Update”后的状态。 内部公开▲ 5.8 更新(Update)工作副本 把他人做的修改融合到自己的本地副本当中,这个把改动从服务器拿到本地的过程就是“更新Update”。 “更新Update”操作可以针对一个文件,或几个被选择的文件,或某个文件夹中的所有文件。选择想要进行“更新Update”操作的文件和(或)文件夹,单击鼠标右键,在菜单中选择“更新Update”, 执行窗口显示正在“更新Update”的进度。他人做的修改会融合到自己的工作副本中,而自己所做的修改会被保留。如果不能合并,将会出现冲突(更新记录中以红色文字显示),冲突的文件图标将出现标志。 内部公开▲ 5.9 合并(Merge) 合并,顾名思义就是1个同版本文件,在被2个人同时开发后,如何合并成一个版本。 1、 当其中一个人已经顺利提交自己的修改,当第二个人commit时,那么在提交的时候会出现现面界面: 2、 这时你需要先update,当你update后它会有两种结果: a) 修改的不是同一段代码,系统自动合并。 系统自动为您合并完文件,并保存在您的本地拷贝。查看一下,如果同意,commit即可。致此,完成了一个简单的meger。 b) 修改的内容包含了同一段代码的情况,不能自动合并,将会出现冲突。这种情况比较复杂,请耐心阅读。 Update后,系统提示Conficted(冲突),这时会出现几个同名但后缀不同的文件,并且会出现代表文件冲突的黄色感叹号图标 假设文件名是kingtuns.txt,对应的文件名分别是: kingtuns.txt.r17 --上次更新的到工作副本中的版本 内部公开▲ kingtuns.txt.r18 --服务器上的版本 kingtuns.txt.mine --自己修改的版本 kingtuns.txt --目标文件,同时在目标文件中标记来自不同用户的更改。 版本冲突解决: 场景: 1、现在A、B两个用户都更新kingtuns.txt文件到本地,此文件版本号为17。 2、文档中原始文件内容如下: 3、A用户修改文件,添加内容“A用户修改内容”完成后提交到服务器,此时文件版本号变为18。 内部公开▲ 4、B用户修改文件,添加内容“B用户修改内容”(这与A用户恰巧修改的同一行代码)完成后提交到服务器 B用户提交更新至服务器时提示如下: 内部公开▲ B用户将文件提交至服务器时,提示版本过期:首先应该从版本库更新版本,然后去解决冲突,冲突解决后要执行svn resolved(解决),然后再commit到版本库。在冲突解决之后,需要使用svn resolved(解决)来告诉subversion冲突解决,这样才能提交更新。 解决冲突有三种选择: A、放弃自己的修改,文件恢复到上次执行update到本地的文件状态。使用svn revert(回滚)。在这种方式下不需要使用svn resolved(解决)。 B、放弃自己的修改,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交(选择文件—右键—解决)。 C、手动解决(重要):冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行resolved filename来解除冲突,最后提交。 解决步骤如下: 1、 在当前目录下执行“update”(更新)操作 内部公开▲ 2、 在冲突的文件上(选中文件--右键菜单—TortoiseSVN—Edit conflicts(编辑冲突)),出现如下窗口 Theirs窗口为服务器上当前最新版本 Mine窗口为本地修改后的版本 Merged窗口为合并后的文件内容显示 3、 如果要使用服务器版本,在Theirs窗口选中差异内容,右键,选择Use this text block(使用这段文本块)。 同理如果要使用本地版本,在协商后,在Mine窗口右键,选择Use this text block(使用这段文本块)。 内部公开▲ 4、 修改完成后,保存kingtuns.txt文件内容。 5、 在B用户的冲突目录下,选中文件--右键菜单—TortoiseSVN—Resolved(已解决的)。会列出冲突的文件列表,如果确认已经解决,点OK。 注意:命令“已解决的Resolved”并没有真正的解决冲突,它只不过是把“文件名称.扩展名.mine” 和 “文件名称.扩展名.r*”(r*中星号代表任意位数字,即版本号)删除,并允许你提交修改而已。因此,建议在有冲突发生时要先执行“编辑冲突Edit Conflict” 再执行“已解决的Resolved”;如果确信自己的修改是正确的,不需要保留他人的修改,可将文件名称 内部公开▲ .扩展名.mine去掉“.mine”后缀,并把“.r*”后缀的文件和“”的文件删除,然后正常“提交Commit”,版本库中将保存自己的版本。 6、 冲突解决 7、提交解决冲突后的文件到服务器。 如何降低冲突解决的复杂度: 1、文档编辑完成后,尽快提交,频繁的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂度。 2、在提交时,写上明确的message,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘 3、养成良好的使用习惯,使用SVN时每次都是先提交,后更新。每天早上打开后,首先要从版本库获取最新版本。每天下班前必须将已经编辑过的文档都提交到版本库。 内部公开▲ 5.10 提交修改到仓库 强烈建议在提交之前,应该确认[本地工作区] 是最新的。可以直接作一次“更新Update”操作,或者先“检查更新Check for Modifications”看看在本地或在服务器上哪些文件修改过。 “更新Update”后“检查更新Check for Modifications”操作后的结果界面如下: 如果[本地工作区] 是最新的,并且没有冲突,就可以提交你的修改了。选中你想要提交的任意文件或文件夹,然后选择在菜单中选择 内部公开▲ “提交Commit…”在提交对话框中双击一个有修改的文件,可以启动外挂的比较工具来显示修改细节。 在按下“确定OK”按钮之后,会显示提交的进程情况。 5.11 修订日志窗口 每一次修改和提交,都应该做好日志记录。这样开发过程中就有了一个详细的记录,以后便可找出每一个修改是如何修改以及为什么这样修改的。 日志对话框会显示所有日志信息。显示分成3个部分: 1. 最上面部分显示的是所有被提交的版本列表。显示有日期时间、提交者、修订版本号和日志信息的前面一部分。用蓝色显示的行表示有某些文件被复制到了这个版本。(也许是从一个分支来的) 2. 中间部分显示的是选中版本的所有日志信息。 3. 底部显示的是选中版本所做修改的文件和文件夹列表。 还不仅仅是这些,对话框中还提供了很多的菜单命令可以使用。 内部公开▲ 5.12 清理 也许由于服务器问题,一个Subversion指令不能成功地完成,你的工作副本因此被滞留在一个不一致的状态。 那样的话,你需要在该目录上使用TortoiseSVN → 清理命令。在工作副本的根目录使用它是一个好主意。 6. 附件:subversion使用FAQ

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 20 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档