SVN+TortoiseSVN+Subclipse使用总结
一、SVN、TortoiseSVN、Subclipse介绍
团队开发技术:
(1)单元测试;
(2)版本控制;
(3)项目自动化;
SCM:软件配置管理,包括SVN;
SVN是CVS的接班人,是版本控制系统;
版本控制简单地说就是要让团队的人能够快速的统一代码,加强沟通;
SVN由客户端和服务器组成,服务器是项目仓库,即存储项目的地方;客户端则是本地拷贝,即由SVN管理,可以提交到项目仓库和从项目仓库中获得项目的地方;
svn宗旨:万物皆目录;
TortoiseSVN是SVN的客户端,因为如果是传统的Subversion客户端,需要通过命令行完成任务,而TortoiseSVN是通过GUI的方式完成的;
Subclipse是Eclipse中的一个插件,简单的说也是一个SVN客户端,只是为了方便Eclipse开发,因此可以在Eclipse中进行提交、导入;
下载地址:
SVN:https://sourceforge.net/projects/win32svn/files/1.6.17/svn-win32-1.6.17.zip/download
Subclipse在线安装地址:http://subclipse.tigris.org/update_1.6.x
注意:配置SVN时需要配置环境变量;
(1)path=C:/subversion/bin;
(2)SVN_EDITOR=notepad; 设置默认的编辑器
二、SVN命令介绍
创建项目仓库:svnadmin create D:\svn-repos
导入tmpdir目录下的文件到sesame/trunk中,即是添加而不是修改:
D:\svnworkspace\tmpdir>svn import -m "import Sesame project" . file:///d:/svn-repos/sesame/trunk
-m表示可以提供一些注释;.表示把当前目录下的文件导入;
注:只有在import时需要项目仓库的URL,在diff、commit都不需要URL;
在svnworkspace下checkout指定最新的项目,并命名为sesame:D:\svnworkspace>svn co file:///d:/svn-repos/sesame/trunk sesame
checkout指定版本(此处为第一版本)的项目:svn checkout -r 1 svn://xiazdong-PC/sesame/trunk test3
查看文件状态:svn status Day.txt
查看项目仓库是否有更新:svn status --show-updates
注:
(1)M:本地被修改,但是没有提交;
(2)C(Conflict):更新时有冲突存在;
(3)G(Gather):本地版本和项目仓库版本合并到一起;
(4)U(Update):本地版本被成功更新;
(5)A(Add):工作拷贝中添加新文件;
(6)D(Delete):文件在项目仓库中被删除,所以工作拷贝中此文件也被删除;
查看本地拷贝的文件改动(如果项目仓库有改动,检查不出):svn diff Day.txt
查看项目仓库和本地工作拷贝的区别:svn diff -rHEAD Number.txt
查看两版本之间的差别:svn diff -r2:4 Number.txt
查看最近的改动:svn diff -r PREV:BASE Number.txt
更新本地拷贝:svn update
更新指定目录或文件:svn update Number.txt dir1/ dir2/
注:当发生冲突时,会出现提示修改;
选择: (p) 推迟,(df) 显示全部差异,(e) 编辑,
(mc) 我的版本, (tc) 他人的版本,
(s) 显示全部选项:
提交改动:D:\svnworkspace\sesame>svn commit -m "注释"
但是注意:commit只会提交改动,如果在本地拷贝中创建一个文件,则需要在此之前 svn add 文件
如果提交时冲突没解决,则提交失败;
获得某个文件的日志:D:\svnworkspace\sesame>svn log Day.txt
获得某个文件的详细日志:D:\svnworkspace\sesame>svn log --verbose Day.txt
获得两版本之间的日志:svn log -r 2:4 Day.txt
分页显示日志:svn log | more
注:svn log不一定是最新的日志,因为可能工作拷贝的版本和项目仓库的版本不一致,svn log只能显示工作拷贝版本的日志
注:*表示有更新;
获得sesame工作拷贝信息:svn info sesame
拷贝文件:svn copy Number.txt copy.txt
注:拷贝后只是在本地完成,需要提交更新项目仓库;
重命名文件:svn move copy.txt copy.py
重命名目录:svn move dir1 dir2
直接在项目仓库中重命名目录:D:\svnworkspace\test3>svn move -m "rename" svn://xiazdong-pc/sesame/trunk/Number.txt svn://xiazdong-pc/sesame/trunk/dest.txt
显示文件的每行的最新版本及谁更改的:svn blame Number.txt
还原文件:svn merge -r 7:6 Number.txt
联网访问的三种方法:
(1)svnserve
(2)ssh
(3)apache
对于某个特定的项目仓库启动svnserve:start svnserve --daemon --root D:\svn-repos
通过svnserve签出文件:svn co svn://xiazdong-PC/sesame/trunk vizier
默认svnserve管理的项目仓库是只读的,即只能签出,不能提交;在/conf/svnserve.conf中添加:
anon-access=read //匿名用户只读
auth-access=write //授权用户可写
passowrd=passwd //在passwd文件内配置
在passwd文件中配置:xiazdong=12345表示用户名是xiazdong,密码是12345
注意:在svnserve.conf和passwd两个文件配置时必须顶格,否则无效;
属性:文件的元数据;
为Number.txt设置checked-by属性为xiazdong:svn propset checked-by "xiazdong" Number.txt
编辑Number.txt中的checked-by属性(需要配置SVN_EDITOR设置默认编辑器):svn propedit checked-by Number.txt
列出Number.txt的所有属性:svn proplist Number.txt
获得某个属性:svn propget checked-by Number.txt
常用属性:
(1)svn:ignore:忽略某些文件; *.java表示忽略java文件
(2)svn:eol-style:设置换行符,一般为 native,表示随着操作系统而变化;
(3)svn:mime-type:设置文件的mime类型;
(4)svn:needs-lock:设置文件加锁
一般我们可以在文件中配置autoprops,自动设置;
1.寻找config文件:
(1)echo %APPDATA%
(2)\subversion\config
2.设置enable-auto-props = true
3.找到[auto-props],并设置自动属性
文件加锁
严格加锁:只允许一个人改动一个文件;
乐观加锁:比如有A、B两人同时checkout了一个文件File.java,并且同时对他们修改了,A先提交,当B想提交时,必须先svn update,把自己的目录变成最新的以后才能够提交,更新时会出现两种情况:
(1)如果A和B改动的不是同一行,那么会正常合并;
(2)如果A和B改动的是同一行,则会在源代码中标记出冲突:
而Subversion默认是采用乐观加锁;
为文件开启文件加锁:为某个文件添加svn:needs-lock属性,并且commit到文件仓库;
文件加锁:svn lock Day.txt -m "lock"
强制解锁(虽然别人有锁,但是另一个人可以强制解开锁,但没有获得锁):svn unlock --force svn://xiazdong-pc/sesame/trunk/Day.txt
强制加锁(不管有没有人有锁,都抢过来):svn lock --force Day.txt
转向其他目录:svn switch svn://xiazdong-pc/sesame/branches/b1
冲突:
<<<<<<< .mine原本代码
=======
项目仓库代码
>>>>>>> .r4
分支和标签:简单地来说就是某个工作拷贝的复制;
在分支上开发:
(1)在项目仓库中创建branches目录; svn mkdir svn://xiazdong-pc/sesame/branches
(2)在项目仓库中将主干复制到b1目录中; svn copy svn://xiazdong-pc/sesame/trunk svn://xiazdong-pc/sesame/branches/b1
(3)通过b1目录checkout一份工作拷贝; svn co svn://xiazdong-pc/sesame/branches/b1 b1
(4)提交;
三、TortoiseSVN使用介绍
如果知道SVN中的术语,其实此工具非常易于入门和使用;
1.checkout
2.冲突问题
![](http://hi.csdn.net/attachment/201203/10/0_13313458145Nbs.gif)
四、Subclipse使用介绍
1.checkout
2.commit等