这两天项目搞得焦头烂额,改了又改,文件备份了一个又一个,最后看得眼花了,想想当初没用充分利用SVN后悔了,赶紧了解下SVN的情况,先写个今天看的小结
先介绍下什么是 SubVersion,Subversion是新一代的版本控制工具,不仅可以管理程序源代码,也可以应用于其他协作管理数据的工作。
安装
你可以从 TortoiseSVN 官方站点下载最新版的 TortoiseSVN,中文汉化包可以从 SubVersion 中文站下载。下载之后,点击安装包,一路 next 下去即可。
下载项目
在你硬盘的适当的位置,点击邮件,选择 SVN Checkout…
然后就会弹出一个 Checkout 选项对话框,输入远程项目目录和本地工作目录(这个得找建立SVNServer的人要)
点击 OK,就会弹出一个远程服务器要求验证的对话框:
输入用户名和密码之后,点击 OK 就开始下载:
提交修改
在你做了修改之后,你可以在项目文件夹下点击右键或者你修改的文件下点击右键,选择 SVN Commit…,这两者的区别在于,第一个可以一次提交你所做所有文件的修改,而第二个只是提交你所选的文件。
点击 Commit 之后,就会弹出一个让你输入更改 log 的对话框:
输入你所作的修改,然后点击 OK,就会开始向远程服务器提交修改:
导入项目
如果翻译插件或者写了插件,想提交到远程服务器,选择该文件夹,点击右键,选择 TortoiseSVN => Import…
然后就会弹出一个导入选项对话框,属于远程服务器地址和注释,如果你前面没有保存密码,这里可能再次输入你在 Google Code 的密码。点击 OK,本地文件就会被导入远程服务器。
注:如果SVN服务器上的文件夹未存在,则你可以遵照“导入操作”进行导入文件,上传到SVN服务器。以后要修改SVN的文件时,你得首先创建新的文件夹,然后“下载项目”到此空文件夹。
你只能将文件取出到一个空目录里。如果你想取出刚汇入的文件,Subversion将报错。你只能将文件取出到另一个目录或先删除已经存在的源文件再执行取出。
经验小结:
1.如果操作的文件之前还未提交,而你又想把文件提交到新的分支上,记得一定要选择切换
2.SVN分支的管理实际上就是把不同的分支用不同的文件保存,因此你在取得新版本的时候会发现,不同分支的最新文件也会被获取下来。
创建tag操作,相当于把当前的代码版本复制一份到其他地方,然后以这个地方为出发点进行新的开发,与原来位置的版本互不干扰。
对于branches、tags、trunk这三个目录,并不是subversion必需的,而是被总结的一种良好的团队开发习惯,其使用方法为:
1.开发者提交所有的新特性到主干。 每日的修改提交到/trunk:新特性,bug修正和其他。
2.这个主干被拷贝 (注:拷贝的方法-单击“鼠标右键”->TortoiseSVN->Branch/tags...->To URL中路径/branches/1.0) 到“发布”分支。 当小组认为软件已经做好发布的准备(如,版本1.0)然后/trunk会被拷贝到/branches/1.0。
2.1此时本地的branches文件夹中尚未有trunk的拷贝,必须与服务器同步下
3.项目组继续并行工作,一个小组开始对分支进行严酷的测试,同时另一个小组在/trunk继续新的工作(如,准备2.0),如果一个bug在任何一个位置被发现,错误修正需要来回运送 (即:当trunk中的文件进行修改后,测试组人员在branches中可以通过:单击“鼠标右键”->TortoiseSVN->Switch->To URL中的地址一般会自动指向trunk文件夹,示意接下来将同步trunk文件夹下修改过的文件到服务器及本地的branches文件夹) 。然而这个过程有时候也会结束,例如分支已经为发布前的最终测试“停滞”了。
4.分支已经作了标签并且发布,当测试结束,/branches/1.0作为引用快照已经拷贝到/tags/1.0.0,这个标签被打包发布给客户。
4.1分支作标签发布到tag文件夹方法和trunk文件夹拷贝到branches/1.0做法相同
5.分支多次维护。当继续在/trunk上为版本2.0工作,bug修正继续从/trunk运送到/branches/1.0,如果积累了足够的bug修正,管理部门决定发布1.0.1版本:拷贝/branches/1.0到/tags/1.0.1,标签被打包发布。
一般建立最初的repository时,就建好这三个目录,把所有代码放入/trunk中,如:要将project1目录下的代码导入repository,project1的结构就是:project1/branches,project1/tags,project1/trunk,project1/trunk/food.c,project1/trunk/egg.pc……,然后将project1目录导入repository,建立最初的资料库。然后export回project1,作为本地工作目录。
6..多人单项目,三个文件夹的作用又不一样了:
单人维护一个主流版本.放于trunk目录里面;
多人开发通过单人或者是多人维护代表不同的模块.每个模块就是一个分支brances;
在一定时期,各模块都有初步版本,则放于trunk中,然后由项目主管进行模块合并成整体,给测试人员检测;
某个时期出现了一个稳定版本,就标记为一个发布版本,tags来做标记.
分支/标记
版本控制系统的一个特性是能够把各种修改分离出来放在开发品的一个分割线上。这条线被称为分支。分支经常被用来试验新的特性,而不会对开发有编译错误的干扰。当新的特性足够稳定之后,开发品的分支就可以混合回主分支里(主干线).
版本控制系统的另一个特性是能够标记特殊的版本(例如某个发布版本),所以你可以在任何时候重新建立一个特定的构件和环境。这个过程被称作标记。
Subversion does not have special commands for branching or tagging, but uses so-called “cheap copies” instead. Cheap copies are similar to hard links in Unix, which means that instead of making a complete copy in the repository, an internal link is created, pointing to a specific tree/revision. As a result branches and tags are very quick to create, and take up almost no extra space in the repository.
创建一个分支或标记
如果你用推荐的目录结构导入了一个工程,那么创建分支或标记就非常简单:
图 5.33. 分支/标记对话框
![分支/标记对话框](http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/images/Copy.png)
在你当前的工作副本中给你你想要复制的分支或标记选择一个目录,然后选择命令 → 。
默认的目标URL将会是你当前工作副本所处的源URL。你必须给你的分支/标记编辑一个新路径。来取代
http://svn.collab.net/repos/ProjectName/trunk
你可以使用这样的设置
http://svn.collab.net/repos/ProjectName/tags/Release_1.10
如果你忘记了你上一次使用的命名约定,可以用鼠标右键打开版本库浏览器来察看已经存在的版本库结构。
现在你必须选择要复制的源位置。在这里你有三个设置选项:
-
版本库中的最新版本
-
新分支直接从仓库中的最新版本里复制出来。不需要从你的工作副本中传输任何数据,这个分支的建立是非常快的。
在版本库中指定具体的版本
-
在仓库中直接复制建立一个新分支同时你也可以选择一个旧版本。假如在你上周发布了项目时忘记了做标记,这将非常有用。如果你记不起来版本号,通过点击鼠标右键来显示版本日志,同时从这里选取版本号。和上次一样不需要从你的工作副本中传输任何数据,这个分支建立起来是非常快的。
工作副本
-
新的分支是一个完全等同于你的本地工作副本的一个副本。如果你更新了一些文件到你的工作副本的某个旧版本里,或者你在本地做出了修改,这些改变将准确无误的进入副本中。自然而然地这种综合的标记会包含正在从工作副本传输到版本库的数据,如果这些数据还不存在的话。
如果你想把你的工作副本自动切换到最新创建的分支,使用转换工作副本至新分支/标记 选择框.但是如果你打算这么做,首先要确认你的工作副本没有被修改。如果有修改的话,当你转换后这些修改将会混合进你的工作副本分支里。
按下版本库内部创建的。
提交新副本到版本库中。别忘了提供一条日志信息。需要注意的是这个副本是在