Subversion 是一个开源的版本管理系统,它可以实现代码的有效管理和控制。它采用原理是copy-modify-merge 思想。
基本概念:
版本库(repository): 是subversion 的核心,用于数据的存放,它运行于服务器端。
工作副本(working copies ): 运行于客户端。用户从版本库check out 的东西都放在这里。
版本库中还有三个子目录,分别是trunk,branches,tags.
Trunk: 是我们开发的主线,用于存放将要发布的版本代码。
Branches: 是主版本的分支,用于存放还在编写的代码,也就是还有debug 的代码。它存在为了避免频繁的修改主线,使主线中的程序处在不稳定状态,也就是说主线trunk 中的程序应该是基本没什么大问题可以运行的程序。Branches 作用就是存放还在调试过程中的程序,braches 是可以处于不稳定状态,一段时间后,再将branches 中的程序归并到trunk 中。
Tags: 是用于创建时间快照,只能读取不能修改。
总结:
Trunk 是开发的主线代码,存放能运行的正确的代码; 序员如果开发新的程序或bug 的修改,一般先放入branches 中,待代码确认无误再提交到trunk. 中。Tags 可看做主线代码的快照。
Svn 中常用到的命令
首先,要创建版本库,命令svnadmin create + 版本库路径,命令执行后会在服务器端创建相应的版本库。
下一步,选择你将要进行版本管理的文件夹(mytree ),命令svn import+mytree+ 服务器版本库路径,命令执行后这个文件夹中的文件加入到了服务器端的版本库中,然后将mytree 删除,接着再建一个新的文件夹,这个文件夹就是你以后的工作副本空间。在这个目录下用svn check out+ 服务器版本库路径。命令执行后你会发现mytree 的文件和文件夹又出现在工作副本空间中,如果装了TortoiseSVN ,工作副本空间中的文件和文件夹都会被打上绿色的对勾,,这时工作副本就已经建好。
Svn update:
用来更新你的工作副本的命令。当你最后一次从版本库中更新你的工作副本后,其他与你同在一个项目中的开发人员将他们做的东西放入版本库中,这时你的工作副本比版本库中的版本就过时了,也就是有差异了,所以在你工作之前先用命令svn status 来查看改变的信息,如果你的工作空间过时了,就要用svn update 来更新自己的工作副本。
在工作副本中的命令:
Svn add : 将新文件或文件夹加入到版本库。
Svn delete : 将某个文件或文件夹从版本库中删除。
Svn copy : 为某个文件或文件夹建立一个副本,这个副本也会被版本库管理。
Svn move : 文件或文件夹移动命令。相当于windows 中的剪切命令。
Svn mkdir : 为工作副本中添加目录。
检查工作副本的状态的命令
Svn status : 列出工作副本中你所有需要参照的信息。
Svn diff : 查看工作副本空间被改变的详细信息。
Svn revert : 撤销工作副本的变化。
Svn resolve : 当自己解决了冲突后,用它通知svn 冲突已经解决。
Svn log : 显示日期,作者信息和每个版本改变的那个路径。
Svn cat :
冲突发生的原因:
有两个程序员A,B 。A 先check out 一个最新的工作副本到A 的工作副本空间,这时A 修改其工作副本的readme.txt 文件,同时B 也check out 了一个副本也对readme.txt 进行修改,并在A 之前先commit 到版本库中,当A 在commit 时,冲突就发生了。
解决冲突的方法:
人工手动解决冲突,进行交流解决冲突。
注意:
得到冲突后要做的三件事:
1. 手工解决冲突。
2. Copy one of the temporary files on top of your working file.
3. Run svn revert<filename>to throw away all of your local changes.