1、基础操作概念
Checkout(检出):
在新建文件夹中,获取版本库中的任意一个版本。
SVN会将版本库中的选定版本复制一份到当前文件夹,此文件夹被称为工作副本。
于此同时,SVN会建立一个.svn隐藏文件,用于对工作副本作修改记录。
注意:将要进行文件或文件夹的增加,删除,移动等操作时,尽量使用SVN自带功能操作,避免异常!
Update(更新):
在多人进行同一项目时,需要将他人做的修改更新到当前工作副本中以保持同步。
当多人在同时修改同一文件时,执行更新很可能会发生冲突,此时最好共同协商解决冲突。
Commit(提交):
将工作副本所做修改提交至版本库,版本库会更新已修改文件的版本号。
当同时有多人对同一版本修改时,直接提交会失败,此时需要更新他人更改然后再提交。
Create repository(创建版本库):
在当前空文件夹创建某一项目的版本库,禁止对版本库手工修改!
可以初始选择创建以下3个目录:
trunk:项目主干
当前开发的项目主体
branches:项目分支
当项目主干进行下一大版本开发时,发现上一大版本具有BUG,所以就需要为其创建分支。
很可能主干项目同样需要某些对应修改,所以需要在合适的时候进行合并(merge)。
同理,主干做的修改很可能会分支也有用,所以也可以进行更新。
tags:项目标记
一般用来对项目某个版本进行一次冻结,这个文件夹只应该用来读取。
若需要对某个冻结版本做测试,正确操作应该是为其建立工作副本,并且工作副本的任何修改不提交。
对于以上3个文件夹的说明,可以用一个比喻:
trunk就是我们最开始种的一棵树,这棵树有很多枝叶(功能)。
branches是我们根据trunk复制过来的另外一棵树,但是这两个树的某些枝叶是一模一样的(相同功能部分代码相互更新),
也有某些枝叶是不一样的(不同功能部分分别发展)。
tags就是一个相册,每张相片分别记录下每棵树最稳定的样子。
网上还有对于三个文件夹的另外一种用途解释:
trunk是稳定版,branches是开发版,待开发版稳定后再更新到trunk中去,
tags则为稳定发布版的备份。
Revert(还原):
可以将修改过的文件还原到未作修改的状态。若文件已经删除或者改名,
那么需要在上一层文件夹上执行还原操作。
Cleanup(清理):
当异常情况下,使用此命令清理.svn文件夹,可以解决问题。
branch/tag(分支/标记):
TortoiseSVN创建分支标记的原理和UNIX的硬链接是一个道理。
创建分支和标记时,SVN会直接将动作更新到版本库,而当前的工作副本是没有改变的。
切记需要为分支或标记创建新文件夹!
switch(切换):
将当前工作副本切换为分支/主干/标记等。
需要注意的是,当工作副已经修改过后,切换动作会智能合并。
为了避免这个怪异的效果,最好在切换前提交或者还原。
merge(合并):
用于主干和分支的相互同步更新。
为了有退回的余地,在执行合并前,务必保证当前工作副本已经提交!
合并概念及注意事项参考链接:
http://svnbook.red-bean.com/en/1.8/svn.branchmerge.html
lock(锁):
锁的概念和操作系统中的互斥锁很相近,获得锁的工作副本才能对文件操作,其他工作副本必须等待释放锁以后才能获得锁操作。
注意:一般锁仅仅用于单个文件,不建议用于文件夹。若用于文件夹,则其他开发者就无法对文件夹操作了,会被鄙视的.......
patch(补丁):
和Linux下的patch/diff命令很相似
blame(追溯):
将文件的修改历史,修改作者等信息列出来,精确到行。
export(导出):
生成一个没有.svn文件的工作副本。
Relocate(重定向版本库):
当版本库被移动或路径更改后,使用此命令将工作副本重新与库关联。
2、常规操作方式
为项目创建版本库:
对于一个项目,是由好几个部分组成,比如代码,机械,电路等。
所以需要在前期为项目规划好几个部分,创建相应文件夹,且包含trunk、branches、tags。
对于相对比较复杂的代码,还应该进一步细分下去。
当然,在后期工作中,可以随时调整这些文件夹的结构。
备份版本库:
复制->粘贴,简单粗暴。
修改工作副本版本:
在当前工作副本,需要恢复到以前的一个版本。若单纯的在日志对话框中复原一个版本,那么SVN会
智能合并当前工作副本的修改,最终结果会比较怪异。正确的操作方式是先在工作副本使用还原操作,
撤销对于当前版本修改,然后再复原到一个版本。
删除/移动/重命名:
在删除/移动/重命名 等操作后,必须提交一次,这是为了让版本库目录树时刻保持着与工作副本一致。
避免执行更新操作后,会出现文件结构混乱的情况。