Subversion学习
一.subversion
对文件,目录和元数据记录版本。简言之,管理和保存软件项目的每个版本,方便项目的维护,更新,修改。
二、对svn相关软件的理解
svn服务端的作用:创建网络项目仓库,也可以从本地上传一个SVN仓库。 网络仓库https://DESKTOP-6PLPUUJ/svn/HelloWorld
保存网络仓库的更改,即保存每个版本。
网络仓库只和地址关联,不和用户关联。项目一直存在于服务器的地址中
可用在多个平台上将仓库检出。只是检出到本地时,需要你创建时的用户名和密码
只能查看和更改仓库的文件结构,不能对文件(源码)进行编辑。
svn客户端的作用:形成本地仓库, 本地仓库可以被添加至服务端。成为服务端仓库。
自己利用客户端创建svn本地仓库,也可以将服务端的仓库检出到本地,形成本地仓库。
本地仓库地址file:///F:\Workspace\SVNTest2
在本地仓库中可以新建和编辑文件(源码文件),svn客户端能对本地项目的版本控制
当服务端检出到本地,或者本地被添加至服务端,即服务端和客户端连接了,本地仓库的更改可以同时保存在两端
svn的Eclipse插件:相当于客户端的作用
三、特点
(1).原子提交。提交修改不会只修改一部分,要么修改不成功,要么提交成功。
(2).联网支持,使用secure shell (ssh)和Apache web 服务器让项目仓库在公共网络被访问。
(3).跨平台。
四、基本概念
repository项目仓库,存放项目代码的容器,可以是本机的一个目录,也可以是服务器端的目录
working copy 工作拷贝,从项目仓库中拷贝出来的文件
checking out 签出,从仓库中获取文件的过程。
export导出,从仓库中获取项目仓库的快照。
committing提交,将修改过的文件存入项目仓库的过程。也可以说为签入。
update更新,签出项目仓库中的最新版文件
Trunk主干,主要地位的源代码成为主干,
branch分支,就是拷贝了一份主干,继续开发,与主干平行,工作与主干隔离,不影响主干。
merging合并,将分支中的代码与主干代码
合并。
respository URL项目仓库的URL,项目仓库的位置。
如,本地仓库URL,file:///c:/svn-repos/sesame/trunk/
网络仓库URL,svn://olio/sesame/trunk
五、版本
每签入一次你修改的文件,就会更新一个版本。
项目仓库中,只会保存发生重大更改的版本,和记录版本的差异文件。这样可以得到所有的每个版本。
版本标识,版本号,版本日期
Prev ,committing之前的一个版本
base,工作拷贝的基准版本
Head ,项目仓库中存储的最新版本
六、加锁策略
strict locking严格加锁,文件签出的时候处于只读,要征求仓库的同意,当没有人在编辑同意文件时,仓库允许你编辑。
optimistic locking乐观加锁,文件签出的时候处于可以读写状态,但你要提交你修改的代码之前,需要更新至当前最新版本。
若在你修改的期间,有人提交了更改,会标记在你的文件中。当别人修改了同一行代码,就会出现冲突,要求你解决冲突才能提交签入。
七、相关操作的命令
创建目录
mkdir c:\work
Unix:mkdir /home/mike/work
项目仓库文件拷贝到本地svn co(checkout)
work>svn co file:///:c:/svn-repos/sesame/trunk sesame //访问svn-repos仓库,签出到当前目录下sesame目录下
work>svn co svn://olio/sesame/trunk vizier //访问了网络仓库oilo仓库,把该仓库的sesame项目签出到本地叫作vizier的工作目录
Unix:work>svn co file:///home/mike/svn-repos/sesame/trunk sesame
向本地仓库添加一个文件
wizier>svn add Month.txt
查看文件状态
sesame>svn status Day.txt
work>svn status --show-updates //显示当前目录下那些文件有更新
显示文件在本地拷贝的区别
sesame>svn diff Day.txt
sesame>svn diff -rHEAD Day.txt// -rHEAD表示本地拷贝与项目仓库中最新版之间的差异。
更新本地项目仓库的文件
work>svn update
提交至项目仓库
sesame>svn commit -m "client wants us to work on weekends"//-m为更改附加有意义的注释
查看某文件的修改日志
sesame>svn log Day.txt
sesame>svn log --verbose Day.txt//--verbose显示每个版本具体的改动
设置一个文件的属性
sesame>svn propset checked-by "Mike" Number.txt//将Number.txt文件的checkd-by属性值设置为milk
svn propedit checkd-by Number.txt //从编辑器打开管理文本属性
svn proplist Number.txt //列出该文件的所有属性
svn propget checkd-by Number.txt //删除文件的一个属性
文件拷贝,重命名
svn copy(cp)
svn mv time.txt clock.txt
八、使用标签和分支
标签:发布分支在特定时刻的一个简单拷贝
标签和分支太多容易把项目搞得混乱,分支大概分四类,
发布分支release(每个发布版本),bug修正分支(标记bug修正的开始pre-bug和结束post-bug),实验分支developer experiments(对项目做一些比较远的试验)。
给项目制定标签和分支的命名规范。
分支 命名风格 例如
release branch RB-rel RB-1.0
Release REL-rel REL-1.0
Bug fix branches BUG-track BUG-3035
Pre-bug fix RRE-track PRE-3035
Post-bug fix POST-track POST-3035
Developer experiments TRY-desc TRY-MGM-cache-pages
创建一个分支
>svn mkdir -m "Create brachers directory" svn://olio/sesame/branches
拷贝分支
>svn copy -m "Create release branch for 1.0" \ svn://olio/sesame/trunk \ svn://olio/sesame/branches/RB-1.0
签出一个分支
svn co svn://olio/sesame/branches/RB-1.0 rb1.0
九、环境安装
windows下的环境安装
1.subversion服务端
安装svn服务端
下载VisualSVN server.msi,更改安装路径,默认安装就、
VisualSVN server的使用操作
(1).创建一个服务端的项目仓库
打开Visual SVN server manager,选中Repository右键——选择Create new Repository,最后会产生一个URL(即服务端仓库的地址)
也可以选择import一个已有的服务端仓库,输入URL就行
(2).创建一个user
在使用svn客户端从服务端检出一个仓库时,需要用户名和密码。
(3).创建一个用户组Group
将你创建的几个用户组成一个用户组,用户组的subversion客户端
2.subversion客户端
安装客户端
下载TortoiseSVN.msi,更改安装路径,默认安装就行
TortoiseSVN的使用
(1).创建一个本地仓库自己建一个空文件夹,然后右键,选择在本目录下创建仓库(2).将本地仓库与服务端连接在服务端,将svn服务端仓库签出到本地,或者将本地的svn仓库添加到服务端(3)与服务端连接后,在本地添加、更改文件,保存到服务端右键该文件,先add,然后在committing(4).本地仓库从服务端创建的仓库检出到本地的项目仓库文件夹图标1仓库名2仓库文件结构在本地用客户端创建的svn仓库文件夹图标1仓库名
2仓库文件结构若是新添加的文件,文件图标显示加号,提交后的文件显示有勾若添加了文件,没有committing,则仓库的文件夹显示红色叹号(5).然后一些 基本的操作拷贝,粘贴,更新
3.subclipse(Eclipse插件)
安装插件
subclipse(Eclipse SVN插件)下载
只能在线更新,不能直接单独下载插件。、
启动eclipse——菜单栏中的Help——install new Software——add repository
——Name:Subclipse Update Site,URL:http://subclipse.tigris.org/update_1.8.x
subclipse的使用
一、基本操作
1.打开SVN仓库视图
安装完subclipse后,我们就需要重启下eclipse了,启动后,
点击工具栏中的Open Perspective(Quick Access之后的按钮)然后选择“SVN 资源库研究”这个视图。如下图所示
或者菜单栏Window——show View——Other——SVN资源库
2.将服务端仓库添加到本地,即添加新的仓库(new repository),不能自己创建本地仓库
在SVN资源库视图下
右键——新建——SVN资源库——输入URL,即可
3.将本地的项目添加到远程仓库
右键项目——Team——share Project——SVN——选择仓库地址。然后项目文件夹上有雪花,而仓库资源管理器中test3什么都没有。需要提交之后,雪花会变成圆柱体。(文件上的雪花图标表示,本地文件和svn远程仓库内容不同)
4.将仓库的项目检出到本地
右键仓库中的项目——检出——选择eclipse的workspace,文件夹上会出现一个圆柱体
5.检出到eclipse workspace的项目或者添加到仓库中的项目,即与远程仓库内容一致的项目。相关操作
右键项目——Team,会有很多操作,更新,提交,恢复到某个版本。分支,合并。复制、导出等等
6.加锁、解锁
Team——Lock——选择你要锁定的文件,锁定期间其他人不能编辑
二、标签、分支、合并
1.创建一个分支或者标签
Team——Branch/Tag——选择你要添加分支的URL(主目录下的branches下),选择从哪个版本分支
2.切换到其他标签、分支
Team——Switch to Branch/Tag
3.配置标签/分支
Team——Configure Branches/Tags——右键仓库——添加分支、标签
4.合并
Team——merge
——2016.3.28