CVS全称是Concurrent Version System,所以这里有一个Version的概念,这个Version在本地和服务器上都存在,当你commit一个文件到服务器时,服务器会先检查你要commit的版本和服务器版本,如果两个没有冲突则更新成功,如果有冲突则报错。同样的,对于update操作来说,服务器只管更新比自己的版本低的,所以你修改了以后的本地文件不会被更新。
1.如果你动了SVN(或CVS)上的某个东西,而未commit到服务器上,此时你如果你用update操作,不会把SVN上的东西更新到你本地,也就是说,你在你的机器上看到的还是你更改之后的东西.
2.在commit操作之前,最好要先update一下,原因是有可能别人把新版本放到服务器上了,而你并未更新到你本地,此时如果你没有进行update操作,而直接commit,就会报错.
3.如果你想放弃你的修改,直接采用服务器里的页面,你必须先把你的修改还原,然后再从服务器上update下来就OK了.
掌握原则
1、Team-synchronize
2、Incoming Mode 全部update
3、Outgoing Mode 全部commit
4、Confilcts Mode 解决冲突,另存、对比、Override and Update、修改、Commit
若从资源库更新代码,建议打开SVN Console窗口查看SVN的更新日志,日志中一般会出现以下几种代码标识,如下图所示的C:
其中:A代表添加,表示增加的文件。D代表删除,表示删除的文件。U代表更新,表示更新的文件。C代表合并,并且合并中有冲突的文件,可能会引起代码报错等。G代表合并,合并中没有冲突的文件。如图所示在Console中出现C,表示自己修改的本地文件中某些代码和别人修改并更新到SVN上的文件中的代码发生了冲突。
svn 为什么自动生成R.java.mine,R.java.r3368,R.java.r3439?
这是因为发生冲突了,你和别人都从3368这个版本对r.java这个文件进行了修改,别人修改后先提交了形成3439版本,然后你做了提交操作,这时为了避免你覆盖别人的修改工作,SVN提示你发生了冲突,并自动形成R.java.mine、R.java.r3368、R.java.r3439这三个文件。其中:R.java.mine是你自己修改后准备提交的那个版本;R.java.r3368是你们的初始版本;R.java.r3439是别人赶在你之前提交的那个版本; 另外应该还有个R.java是自动合并了你的版本和别人提交的版本形成的(其中用<<<<<、======、>>>>>等符号标记出了自动合并的部分)。
自动生成这些文件的目的是便于你手动合并你们两个人的修改。这时建议你查看一下这个文件的历史记录,看看3439这个版本是谁提交的,问问他修改了什么地方,然后你手动将你们两个人的修改合并到同一个文件r.java中,然后使用SVN标记“冲突已解决”,标记后多余的文件会被自动删除,然后你就可以正常提交了。
一.下载SVN服务器端安装,配置
1.SVN是目前软件开发中,最流行、最先进的版本控制工作,比起VSS、CVS等版本控制工具,具有很多优势。
2.SVN分为服务器端和客户端
服务器端指Tigris SVN;客户端包括Tortoise SVN,Eclipse SVN插件,这两者也是最常用的
3.SVN相关软件下载地址:
服务器端:http://www.tigris.org/
客户端Tortoise SVN下载地址:http://tortoisesvn.net/downloads.html
Eclipse SVN插件下载地址:http://subclipse.tigris.org/
4.SVN服务器端部署步骤:
1.下载安装,傻瓜式安装,很简单
2.安装完毕之后,创建资源库(Repository),将来存放所有项目资源的仓库,命令如下(cmd下执行)
svnadmin create d:\SVNRepo\Repo1
Repo1就为创建的资源库
3.资源库创建完毕之后,找到D:\SVNRepo\Repo1\conf\svnserve.conf文件打开,修改
修改之前为:
[general]
### These options control access to the repository for unauthenticated
### and authenticated users. Valid values are "write", "read",
### and "none". The sample settings below are the defaults.
# anon-access = read
# auth-access = write
### The password-db option controls the location of the password
### Uncomment the line below to use the default password file.
# password-db = passwd
### The authz-db option controls the location of the authorization
修改之后为:
[general]
### These options control access to the repository for unauthenticated
### and authenticated users. Valid values are "write", "read",
### and "none". The sample settings below are the defaults.
anon-access = read
auth-access = write
### The password-db option controls the location of the password
### Uncomment the line below to use the default password file.
password-db = passwd
### The authz-db option controls the location of the authorization
注意:anon-access = read
auth-access = write
password-db = passwd,每行的前面不能有空格
4.创建用户,配置访问权限
找到D:\SVNRepo\Repo1\conf\passwd,添加用户及密码,建完之后,该用户就可以向资源库中提交项目,添加用户zs,密码zs
[users]
# harry = harryssecret
# sally = sallyssecret
zs = zs
5.启动SVN服务器
svnserve -d -r D:\SVNRepo\Repo1
二.在MyEclipse中打入SVN客户端插件,分为自动更新和
注:SVN客户端有很多,最常用的是MyEclipse客户端插件和SVNTortoise客户端
MyEclipse_SVN客户端插件下载地址:http://subclipse.tigris.org/
SVNTortoise下地址:http://tortoisesvn.tigris.org/
1. 自动更新,即通过Eclipse直接连接到外网进行更新,具体步骤参照:http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA
2. 手动更新,手动下载Eclipse SVN插件软件包,解压后的内容直接拷贝到Eclipse的对应目录即可
3.打开Eclipse,可以看到SVN资源库如下,说明SVN客户端插件已经安装成功:
三.建立项目
四.将项目共享到SVN资源库服务器
鼠标右键项目-->Team-->Share Project-->资源库位置:svn://IP地址,Share Project只是将本地项目与SVN资源库建立了一个目录对应关系,并没有将项目实际提交到SVN资源库,接下来,将项目提交至资源库
五.将项目提交到SVN资源库服务器
鼠标右键项目-->Team-->提交,此时将新项目真正提交到了资源库,这样,其它开发人员,就可以通过客户端从资源库取到提交的项目了
另:也可以使用TortoiseSVN将项目提交到资源库。
六.客户端开发时,将项目从SVN服务器"检出为"
当开发人员第一次从资源库取项目时,
(1),建立资源库位置
(2),右键资源库-->检出为
七.要修改代码,务必先更新,从资源库取最新的文档,再修改
最常用的:
Update:从资源库取最新的项目
Commit:修改之后,将修改的内容提交到资源库
Sychronize:将本地项目与资源库进行同步,看本地项目与资源库有哪些差异,涉及到代码修改冲突时,就可以用了
八.修改完毕后,提交
注:当两个人同时修改一个文件时,必须一个修改完成,提交之后,另一个再取最新版本进行修改,这样就需要人为的进行沟通了,版本控制工具再好,也代替不了所有的人为沟通