如果这篇文章对你有帮助,请转发给更多有需要的人。谢谢你。
上次我描述了SVN的详细安装和介绍,这次我描述了SVN的使用。
使用命令行模式访问SVN服务器
侦查
①首先输入您自己的工作目录,例如:D:DevWorkSpaceSVNSpace
②运行svn checkout命令,其格式如下
格式
③工作副本
运行checkout命令后,进入MyERP目录,看到里面什么也没有。真的没有吗?它不是。签出命令将创建一个隐藏目录。该目录下的svn,用于保存与服务器交互的重要信息,包括从服务器检索到的最新版本信息、文件状态、更新时间等。SVN正是基于此来判断当前目录中文件的状态。所以不要删除或者修改这个隐藏目录的内容——完全忽略它的存在。如果保存在服务器端的文件可以视为“原件”,那么每个开发人员签出到本地目录的文件可以视为“副本”,通常称为工作副本。
使服从
①进入D:DevWorkSpaceSVNSpaceMyERP目录。
②创建一个文件test.txt
③执行svn commit命令,运行结果为
解释文件在提交到服务器之前必须进行版本控制。
④执行svn add命令,将test.txt纳入版本控制。
⑤再次执行svn commit命令。
需要额外的日志信息。
⑥使用-m参数附加日志信息。
原因是没有许可
⑦先暂时打开匿名访问权限。
[1]进入对应版本库目录下的conf目录:d:devreportorysubversionerpconf。
[2]打开svnserve.conf
[3]将第19行中的# anonymous-access = read改为anonymous-access = write,即删除#并将read改为write。注意前面不要留空,要用大写。
[4]不需要重启SVN服务,甚至不需要重新打开命令行窗口。
⑧重新执行提交订单。
说明提交成功。
⑨实际上svn commit命令不能最后指定具体的文件,这时,它意味着提交当前工作副本中的所有修改。
更新
①将服务器端文件签出到一个新目录,以模拟另一个终端。
②回到MyERP目录,修改test.txt文件并提交。
③进入TomERP目录。
④执行svn更新命令。
这样,我们可以在TomERP目录中看到MyERP目录下提交的变更。
⑤思考:更新和退房有什么异同?
工作拷贝中文件的几种状态
①无修改,当前版本
该文件在工作目录中没有被修改过,并且从当前版本开始,没有其他终端向服务器提交过对该文件的修改,即当前工作副本的版本与服务器的最新版本一致。不会对其执行svn提交和svn更新。
②本地修订,当前版本
这个文件已经被修改,但是这个修改没有提交到服务器,而且从当前版本开始,没有其他终端提交这个文件的修改到服务器,所以当前工作副本的版本还是和服务器的最新版本保持一致。因为存在未被发送回的本地更改,svn commit将成功提交您的更改,而svn update不会做任何事情。
③未修改、过时的版本
此文件未被修改,但版本库中有其他终端提交的修改。此时,当前工作副本的版本落后于服务器端的版本,我们称之为“过时”。当前文件的svn提交不会发生任何变化,而svn update会将工作目录中的文件更新到最新版本。
④局部修改,版本过时
服务器上有未在本地更新的修改,导致当前版本过期。如果此文件在本地有未提交的更改,则无法提交。对其执行svn提交将导致“过时”错误。
此时,您应该首先尝试更新本地文件。更新时,SVN会尝试将服务器端更新与本地文件合并。合并有两种可能的结果:一种是服务器端和本地修改位于文件的不同位置,合并成功;另一种是服务器端的修改和本地的修改位于同一个位置,这就冲突了。
将工作副本作为一个整体恢复到版本历史。
①假设当前版本是12,你想检索版本9。
②执行svn更新命令。
③这里需要注意的是,SVN版本号不是某个文件的编号,而是整个版本库整体状态的“快照”。检索某个版本不是版本号对应的文件,而是整个项目的快照。
4.6将文件恢复到某个版本的状态,不涉及其他文件。
①假设你要检索版本10中pp.txt的状态。
②执行svn更新命令。
③综合这两个例子,我们可以认为版本号和文件名构成了一个横纵坐标系,文件路径和版本号可以用来定位其在某一时刻的状态。
单一版本库权限配置
匿名访问:如前所述。
特许存取
①要设置授权访问,需要创建用户,并为用户设置权限。
②打开授权访问配置。
[1]打开d:devrepositorysubversionerpconfsvnserve . conf。
[2]注释掉第19行anon-access = write:# anon-access = write
指示此版本库不接受匿名访问。
[3]在第20行打开注释# auth-access = write:auth-access = write
指示此版本库使用授权访问。
[4]打开第27行的注释:password-db = passwd
指示同一目录中的passwd文件用于保存用户信息。
[5]打开第36行的注释:authz-db = authz
指示同一目录中的authz文件用于保存权限信息。
[6]打开密码文件以创建用户。
[7]打开authz文件:#示例在后面注明。
创建用户组
指定授权用户和用户组的路径。
权限继承:父目录设置的权限对子目录也有效——除非子目录设置得更具体。
这个例子说明了只有userOther对当前版本库下的subDir目录有读写权限,其他用户没有权限。
多版本库共享配置
在版本库的根目录D:DevRepositorySubversion中创建commConf目录
将未修改的authz和passwd文件复制到commConf目录中
修改需要设置权限的版本库的svnserve.conf文件。
①密码-数据库=../../commConf/passwd
②authz-db =../../commConf/authz
6.4在密码中创建用户
在authz中为不同用户授予不同版本库的权限
#[存储库:/baz/fuz]
# @harry_and_sally = rw
# * = r
[企业资源规划:/]
userERP = rw
* =
[OA:/]
userOA = rw
* =
[CRM:/]
userCRM = rw
* =
查看工作副本信息
使用svn信息命令
执行效果如下
7.3对某个文件使用svn info命令
查看目录或文件日志信息
使用svn日志命令
[注意:使用该命令的前提是将匿名访问设置为none,即:anonymous-access = none,否则会出现“SVN:e 220001:entry is unreadable”错误]
在Eclipse中安装SVN客户端插件
Eclipse插件应用程序市场
在Eclipse中访问Eclipse Marketplace客户端,搜索Subversion,下载插件并根据提示安装它们。
使用压缩包
如果无法连接互联网,可以使用下载的插件压缩包eclipse_svn_site-1.10.5.zip,这个压缩包是从http://subclipse.tigris.org/网站下载的(subclipse是这个eclipse插件的名字)。安装方法是:
①解压eclipse _ SVN _ site-1.10.5.zip中的特性和插件目录
②将特性和插件复制到Eclipse安装目录/drop ins/Eclipse _ SVN _ site-1 . 10 . 5。
③重启Eclipse。
④进入Eclipse,然后打开窗口→首选项→团队→SVN。当您看到以下界面时,SVN插件安装成功。
创建存储库位置
①切换视角SVN资源库研究。
②创建资源库位置。
此时,您可以在版本库中查看文件和目录结构。
侦查
①检测分两种情况。
从服务器上得到的是一些零散的文件,不能作为项目签出。
此时,会弹出一个新的项目向导。这是因为我们需要创建一个项目来保存从服务器检索到的文件。
例如,您从服务器获得的是一个完整的项目
这必须作为项目签出。
从project server中签出后,它将成为工作副本。svn隐藏目录将在根目录下自动创建。
使服从
①新文件创建后,文件图标会带有“?”ID,指示该文件尚未被纳入版本控制。
②右键新建文件→团队→添加到版本控制,文件图标上会显示一个“+”,表示当前文件已纳入版本控制,但尚未提交到服务器。
③右键单击要提交的文件→团队→提交…文件将被提交,在弹出的对话框中可以省略日志。文件提交后,图标会变成“金色圆柱”,表示当前文件的版本与服务器的版本一致。
④文件修改后,图标会变成“*”,表示当前文件或目录包含未提交的修改。
更新
①更新整个项目时,可以右击项目→团队→更新。
②更新特定文件时,可以右键点击文件→团队→更新。
共享项目
①在Eclipse中新建的项目想要发布到SVN服务器上,可以通过“共享”项目来实现。
②右键项目→团队→共享项目…→选择一个版本控制工具。
选择存储库位置。
切换到Team Synchronizing透视图,并选择要在项目中提交的内容,通常是项目中的所有内容。
恢复版本历史
①右键点击要回复的文件→团队→显示资源历史→得到如下界面
②选择一个历史记录点,右键获取内容。文件将恢复到指定版本的状态,图标将变为“*”。
③获取历史记录时,如果出现以下错误信息
可以通过将相应版本库中svnserve.conf文件中的anon-access设置为none来解决。
解决(之间的)冲突
①什么情况下会发生冲突?
两个开发人员,Harry和Sally,从服务器下载了文件A。
经过哈利的修改,A变成了A ',经过莎莉的修改,A变成了A ' '。
Harry首先提交它,这使得服务器端文件的版本为A '
Sally的本地文件A '已过期。此时,她无法提交文件。服务器会要求她先更新。
莎莉此时的更新操作有两种可能。
(1)由1)Sally进行的修改与Harry的修改不在同一位置,并且更新操作试图成功合并文件。
(2)2)Sally做的修改恰好和Harry在同一个位置,更新操作合并文件失败,导致冲突。
发生冲突后,本地工作副本将发生如下变化
(1)文件a的内容变更如下
公共静态void main(String[] args) {
System.out.println("通过命令编辑!");
System.out.println("通过命令编辑!");
> . r14
System.out.println("通过命令编辑!");
System.out.println("通过命令编辑!");
}
其中,slave r14是发生冲突时服务器端最新的内容。注意这里R后面的数字是发生冲突时服务器的版本号,可以是任意整数值。r14只是一个例子。
同时,文件图标变成“黄色!”。
(2)在与冲突文件相同的目录下添加一个新文件,扩展名为。我的,其内容是发生冲突时本地副本的文件内容。
(3)在与冲突文件相同的目录下添加一个新文件,扩展名为。r次要版本号,如MyCRM.java.r13,其内容为冲突发生前服务器的文件内容,可作为冲突解决的参考。
(4)在与冲突文件相同的目录下添加一个新文件,扩展名为。r大版本号,比如MyCRM.java.r14,其内容是冲突发生时服务器的文件内容。
②解决冲突。
(1)右键单击冲突文件→团队→编辑冲突…→出现以下界面
本地内容和冲突内容以比较的方式显示,本地内容在左边,冲突内容在右边。可以修改本地内容。
(2)根据需要和实际情况对本地内容进行修正——这个过程很可能需要参与冲突的两个开发者进行必要的沟通——机器和程序目前还不能完全取代人工智能。更正后,文件图标将变为“四边形”,冲突文件中的. r14等标记将被删除。
(3)右击冲突文件→团队→标记为已解决。
此时,双方。我的文件和。r版本号文件将被自动删除,冲突文件图标变为“*”,表示可以提交。
(4)提交文件,文件图标变成“金缸”。
使用SVN独立客户端:TortoiseSVN
Torisesvn简介
TortoiseSVN是Apache Subversion的客户端工具,Apache Subversion是Windows下的版本控制系统。
乌龟的优良特性
①外壳集成
TortoiseSVN无缝集成到Windows的外壳中(比如Explorer)。
②过载图标
每个受版本控制的文件和目录的状态由一个小的重载图标表示,这可以让您立即看到工作副本的状态。
③图形用户界面
当您列出文件或文件夹的更改时,您可以单击任何版本来查看提交的注释。您还可以查看已更改文件的列表,只需双击文件即可查看更改。
“提交”对话框列出了此次提交中要包含的条目。每个条目都有一个复选框,因此您可以选择包含哪些条目。不受控制的文件也会被列出,以防你忘记添加新文件。
④轻松访问④Subversion命令
所有的Subversion命令都存在于浏览器的右键菜单中,TortoiseSVN在其中添加了一个子菜单。
乌龟的历史
2002年,Tim Kemp发现Subversion是一个非常好的版本管理系统,但是它缺少一个好的图形界面客户端程序。制作与Windows shell集成的Subversion客户端程序的想法是受名为TortoiseCVS的CVS客户端程序的启发。Tim研究了TortoiseCVS的源代码,并把它作为TortoiseSVN的基础。他启动了这个项目,注册了域名tortoisesvn.org,并把源代码放到了互联网上。
与此同时,Stefan kung正在寻找一个易于使用的免费版本控制系统。他找到了Subversion和TortoiseSVN的源代码。因为TortoiseSVN还不能用,所以他加入了这个项目,开始编码。很快,他重写了现有的大部分代码,并开始添加命令和功能。到某个时候,原始代码已经被重写。
随着Subversion越来越稳定,吸引了越来越多的用户,他们也开始使用TortoiseSVN作为Subversion的客户端程序。用户数量正在快速增长(并且每天都在增长)。这时,吕贝·翁肯主动提出帮助该项目提供精美的图标和TortoiseSVN标志。现在他负责照看网站和管理多语种翻译。
乌龟装置
①下载安装程序:http://tortoisesvn.net/downloads.html
Win32位:TortoiseSVN-1 . 8 . 7 . 25475-Win32-SVN-1 . 8 . 9 . MSI
Win64位:TortoiseSVN-1 . 8 . 7 . 25475-x64-SVN-1 . 8 . 9 . MSI
Win32位语言包:language pack _ 1 . 8 . 7 . 25475-win32-zh _ cn . MSI
Win64位语言包:language pack _ 1 . 8 . 7 . 25475-x64-zh _ cn . MSI
②以Win32位为例。
中文语言包安装
右键任意目录→TortoiseSVN→设置。
侦查
10.5.1创建一个目录来存储签出的文件,如MyCRM。
10.5.2进入目录MyCRM,点击右键。
10.5.3您可以看到检出的文件。
此时文件图标上没有徽标。你可能会想到重启电脑来解决这个问题——其实没必要这么麻烦。图标是由外壳程序控制的,所以我们只需要重启program-explorer.exe外壳。打开任务管理器,选择explorer.exe流程,结束该流程,然后创建一个新的explorer.exe流程。
如果一切顺利,您将看到文件图标如下所示:
乌龟图标含义
●图标1:新签出的工作副本带有绿色复选标记。表示Subversion状态正常。
●图标2:开始编辑文件后,状态变为已修改,图标过载变为红色感叹号。这样,您可以很容易地看到自上次更新工作副本以来哪些文件已被修改,哪些文件需要提交。
●图标3:如果更新过程中出现冲突,图标会变成黄色的感叹号。
●图标4:如果你给一个文件设置了svn:needs-lock属性,Subversion会把文件设为只读,直到你获得文件锁。带有此重载图标的文件表示您必须在编辑前获取锁。
●图标5:如果你有一个文件的锁,Subversion状态正常,这个重载图标提醒你,如果你不使用该文件,你应该解除锁,允许其他人提交对该文件的修改。
●图标6:该图标表示当前文件夹下的一些文件或文件夹已经被安排从版本控制中删除,或者该文件夹下缺少一个版本控制文件。
●图标7:加号告诉你一个文件或者目录已经被安排加入版本控制。
●图标8:横条告诉你某个文件或目录被版本控制系统忽略了。这个图标重载是可选的。
●图标9:该图标表示文件和目录不在版本控制之下,但并未被忽略。这个图标重载是可选的。
0.6合并版本控制
①创建一个新文件abc.txt
②右键单击文件。
③添加后文件图标发生变化。
10.7提交
① TortoiseSVN可用于提交特定文件或目录中的所有更改。方法是右键点击要提交的项目,然后SVN提交…,可以看到如下界面。
②如果没有填写日志内容,TortoiseSVN会提交一个空字符串作为日志信息。
③提交后显示的信息如下
④未纳入版本控制的文件默认不提交。右键新建的文件只能看到添加操作的选项,如上所述。但是,在新创建的文件所在的目录中右键单击SVN提交…,您可以看到以下界面
选择文件newFile.txt
也可以提交文件,TortoiseSVN会帮我们自动把newFile.txt纳入版本控制。
10.8更新
右键单击要更新的文件或目录→SVN更新
0.9回复版本历史
①检查版本历史的内容。
[1]首先你需要将对应版本库的匿名访问权限设置为none: anonymous-access = none。
[2]右击文件查看版本历史→TortoiseSVN→显示日志。
[3]右键单击感兴趣的版本历史,将其与当前工作副本进行比较或直接打开。
②右键文件回复版本历史→更新到修订版。
只需填写您想要返回的版本。
0.10冲突解决
①文件冲突的状态和Eclipse中的一样,这里不赘述。
②右键单击冲突文件→编辑冲突。
③带“感叹号”的那一行是冲突的那一行。
④右键单击冲突线。
您可以选择四种操作:
[1]使用我的
[2]利用他们的
[3]把我的放在他们面前。
把他们的放在我的前面。
⑤冲突解决后,直接保存——然后TortoiseSVN自动弹出如下确认界面
⑥文件变成红色感叹号,三个自动生成的文件被删除。提交就行了。