`
hehaibo
  • 浏览: 410650 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

SVN

 
阅读更多

1.Checkout Repository

Checkout是指获得服务器端指定的Repository存储的所有文件(和ClearCaseCheckout意义完全不一样,ClearCaseCheckout指的是取得某文件的修改权,在使用Subversion时一定要注意)。

Checkout的具体方法:

1)在客户端新建一个空目录,比如:F:/Accoona,在该目录上单击右键,在弹出式菜单中选中SVN Checkout...,之后在“URL of Repository”文本框中输入服务器项目名称Repository的地址,比如“svn://xxx/Accoona” (通过自定义的协议访问一个 svnserve 服务器,xxx是服务器端主机名,或服务器端的ip地址) file:///D:/SVNProjects/Accoona从本地磁盘访问);http://svn-softmit.accoona.com/svn/repos/sofmit通过 WebDAV 协议访问 Apache 服务器,进而访问仓库
2
)然后点OK,会弹出一个认证对话框,输入服务器端为每个用户设置的用户名和密码。

3)然后点OK后就完成了对RepositoryCheckout

 

比如:在服务器端Repository中有一个a.txt文件,那么Checkout之后F:/Accoona目录下也会出现一个a.txt文件。执行Checkout后除了会在F:/Accoona目录下产生Repository存储的文件及目录外,还会产生了一个“.svn”的隐含目录,该目录是由subversion管理的,不要删除或者手工改动其中的文件和目录。

现在F:/Accoona中的文件和目录就叫做Repository“Working Copy”简写“WC”,以后对Repository中文件和目录的修改,添加,删除的操作,都是通过对这个“Working Copy”的操作来实现。

Checkout执行完后,会发现F:/Accoona目录的图标的左下角附着了一个小的状态图标(当F:/Accoona目录中的文件改变时,这个状态图标也会随之变化),它表示F:/Accoona是一个Repository“Working Copy”F:/Accoona内的所有文件和目录也会有类似的状态图标。

 

图:checkout Accoona库(从本地磁盘访问
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 415.5pt; HEIGHT: 219.75pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png"></imagedata></shape>

 

图:checkout Accoona库(通过 SVN Apache

<shape id="_x0000_i1026" style="WIDTH: 415.5pt; HEIGHT: 237.75pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image003.png"></imagedata></shape>

 

 

图:将Accoona库里的文件拷贝到本地

<shape id="_x0000_i1027" style="WIDTH: 414.75pt; HEIGHT: 183pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image005.png"></imagedata></shape>

 

 

图:本地Accoona目录成为库Accoona的一个“Working Copy”

 

<shape id="_x0000_i1028" style="WIDTH: 95.25pt; HEIGHT: 49.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image007.png"></imagedata></shape>

 

图:本地Accoona目录下目录的状态

<shape id="_x0000_i1029" style="WIDTH: 415.5pt; HEIGHT: 96pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image009.png"></imagedata></shape>

 

2.添加文件

将需要添加到库里的文件或者目录拷贝到F:/Accoona下,然后在该文件或目录上单击右键,TortoiseSVN->Add,点OK,这时文件的状态图标会发生变化。注意:Add命令只是告诉本地的“Working Copy”将该文件纳入版本管理,并没有将这个改变提交到服务器端,如果想要别人也看见新加的文件或者目录,则需要在F:/Accoona(或者在该目录或文件)单击右键,SVN Commit...,将所做的修改提交到Repository。文件的状态图标也会更新。注意:不管在“Working Copy”内添加、修改、删除文件后,要想其他人也看见修改,都必须用Commit命令将所做修改递交到服务器端的Repository

图:添加文件
<shape id="_x0000_i1030" style="WIDTH: 375.75pt; HEIGHT: 390pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image011.png"></imagedata></shape>

 

图:此时的状态(该文件纳入版本管理,但是并未将这个改变提交到服务器端)

<shape id="_x0000_i1031" style="WIDTH: 414.75pt; HEIGHT: 89.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image013.png"></imagedata></shape>

 

图:提交给服务器(让别人也看见新加的文件或者目录)

<shape id="_x0000_i1032" style="WIDTH: 372pt; HEIGHT: 334.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image015.png"></imagedata></shape>

 

图:成功提交给服务器

<shape id="_x0000_i1033" style="WIDTH: 414.75pt; HEIGHT: 73.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image017.png"></imagedata></shape>

 

3.修改文件

用文本编辑器或IDE对文件修改后,文件的状态图标会变化,然后单击右键,SVN Commit...
提交修改,只有当执行Commit提交修改后,所作的修改才会反映到服务器端的Repository中。

图:修改my svn文件后(但是此时还没有提交给服务器)

<shape id="_x0000_i1034" style="WIDTH: 415.5pt; HEIGHT: 78pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image019.png"></imagedata></shape>
图:执行Commit提交修改

<shape id="_x0000_i1035" style="WIDTH: 415.5pt; HEIGHT: 83.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image021.png"></imagedata></shape>

 

4.删除文件

删除文件时,选中要删除的文件或目录,单击右键,TortoiseSVN->Delete,提交修改。注意千万不要用“Delete”键来删除文件,否则将无法提交你的修改。这一点对目录的删除来说尤为重要。

 

图:通过TortoiseSVN->Delete的方式删除文件
<shape id="_x0000_i1037" style="WIDTH: 369.75pt; HEIGHT: 408pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image023.png"></imagedata></shape>

 

 

图:删除my svn文件后,上级目录的状态,此时还没有执行Commit

 

<shape id="_x0000_i1038" style="WIDTH: 415.5pt; HEIGHT: 73.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image025.png"></imagedata></shape>

 

 

图:执行Commit提交删除操作

<shape id="_x0000_i1039" style="WIDTH: 414.75pt; HEIGHT: 320.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image027.png"></imagedata></shape>

 

 

图:成功执行Commit后的状态

<shape id="_x0000_i1040" style="WIDTH: 415.5pt; HEIGHT: 81.75pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image029.png"></imagedata></shape>

 

5.放弃修改

当添加、修改、删除文件后,决定放弃修改,可以单击右键,TortoiseSVN->Revert,本地的“Working Copy”中的文件和目录会恢复到你修改前的状态。

 

图:取消文件的修改
<shape id="_x0000_i1041" style="WIDTH: 414.75pt; HEIGHT: 428.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image031.png"></imagedata></shape>

 

6.获取Repository的最新版本

当一个团队合作开发项目时,每一个人都在不断对Repository进行更新,这就需要不断的更新自己的“Working Copy”,以获取项目最新的文件。当第一次获得最新Repository的文件时,用Checkout命令(前面已经介绍)以后再获取最新文件时就不用Checkout了,而改用Update命令。

接着前面的例子,这时F:/Accoona已经成为一个“Working Copy”了(通过执行Checkout命令),现在其他人已经对Repository进行了修改,想将别人的修改反映到自己的“Working Copy”中,具体的方法是:在F:/Accoona目录上单击右键,SVN Update。此时F:/ Accoona中的文件就是最新的版本了。

注意,如果当“Working Copy”中有被修改的文件,或者有被删除的文件,并且还未提交这些修改时,这些文件在执行Update过程中是不会被更新的。比如修改了F:/Accoonaa.txt文件,还未提交修改,那么,当对F:/Accoona进行Update时,a.txt文件是不会更新为Repository上的a.txt文件的。所以如果想放弃当前自己的所有修改,并将F:/Accoona下所有文件及目录更新到最新版本,则应该先对F:/Accoona执行Revert命令再执行Update命令。当前后两个人修改同一个文件的不同地方,此时若既要保留自己的修改,又要将该文件更新到服务器的最新版本,那么先将该文件Update,后再SVN Commit...,这样既保留的了自己的修改,又获得了服务器上别人的修改。当前后两个人修改的是同一个地方,此时做Update后,将产生该文件的几个不同版本的临时文件,此时可以Revert取消自己的修改,使其恢复正常。
图:对code目录的更新

<shape id="_x0000_i1042" style="WIDTH: 379.5pt; HEIGHT: 362.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image033.png"></imagedata></shape>

 

 

图:多人同时修改了同一文件的同一个地方,此时Update后增加几个临时文件

<shape id="_x0000_i1043" style="WIDTH: 414.75pt; HEIGHT: 73.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image035.png"></imagedata></shape>

 

图:当对该文件做Rever后文件状态恢复正常

 

<shape id="_x0000_i1044" style="WIDTH: 414.75pt; HEIGHT: 35.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image037.png"></imagedata></shape>

 

7.subversion的版本控制模型

Subversion的版本控制是Copy-Modify-Merge(拷贝-修改-合并)的模型。当用subversion进行版本控制时,Subversion会记录对Repository进行的每一次修改(包括添加,修改,删除等等),每修改一次Repository都会产生一个新的Revision(修订版本号),不同的Revision代表了不同时刻Repository的状态,因此可以用这个Revision回朔任意时刻Repository的状态,就像时间机器一样,也就是说某一Revision 就是Repository 在某一时刻的一个快照。注意:Revision 不是针对某一个文件或者目录,而是针对整个Repository而言的。每修改一次RepositoryRevision 都会增加1

8.“.svn”目录

在客户端Working Copy的每一层目录中都会有一个“.svn”目录,该目录是Subversion进行管理用的目录。不要手动修改其中的文件。该目录存储了Working Copy的一个副本。

 

9.混合版本

SubversionWorking Copy被设计成一种能够包含不同版本的文件共存的形式。比如F:/Accoona是一个Working Copy,该目录下有两个文件a.txtb.txt。执行Update命令,将Working Copy更新到最新版本(Revision 24)。这时,a.txtb.txtRevision都是24。(其实对于单个文件来说并不存在RevisionRevision是对于整个Repository而言的,这里所指的是RepositoryRevision24所存储的a.txtb.txt,但为了方便而采用这种描述方式,请注意,下同)。之后,你的同事修改了a.txt,并且提交了修改,这时RepositoryRevision就变成25了。注意,这时你没有再次执行Update,因此你的Working CopyRevision还是24。这时你修改了b.txt文件,并提交修改。因为Revision25并没有对b.txt文件进行修改,因此你对b.txt文件的修改是基于b.txt文件最新的版本,所以不会出现Conflict。当你提交b.txt的修改后,产生Revision26。这时你会发现你的Working Copy中的a.txt文件并不是Revision25中的a.txt文件,它还是Revision24a.txt文件,而你的b.txt文件是Revision26b.txt文件。也就是说当你Commit时,你的Working Copy中只有你提交的那些文件是最新版本,而其他没有修改的文件并不会更新为最新版本。这样就造成了你的Working Copy由不同的Revision文件所组成(Revision24a.txt文件和Revision26b.txt文件)。前面说过在提交修改前必须保证你是在文件的最新版本基础上修改,如果在这种混合版本的情况下,怎样才能知道当前Working Copy中的文件是否为最新版本?在前面所说的“.svn”目录中有一个文件名为“entries”的文件,该文件记录了当前Working Copy中的每一个文件的Revision,因此当你Commit时,Subversion会从该文件中取得你提交文件的Revision,再与Repository的最新Revision一比较就可以知道你修改的文件是否基于该文件的最新版本。

10.文件的锁定

Subversion的版本控制模型是一种叫做Copy-Modify-Merge(拷贝-修改-合并)的模型。该模型在对文本文件进行版本控制时工作的很好,但是有些需要进行版本控制的文件并不是文本文件,比如说图像文件,这种模型在这种情况下就不能正常工作了,因为文本文件可以合并,而二进制文件则无法合并。所以Subversion支持Lock-Modify-Unlock(锁定-修改-解锁)的版本控制模型。这种模型要求在对一个文件修改前首先要锁定这个文件,然后才能修改,这时,别人将无法对该文件进行修改,当修改完后再释放锁,使其他人可以对该文件进行锁定,然后修改。

锁定文件的方法是:TortoiseSVN->Get Lock...再点OK按钮,这时就完成了对文件的锁定。此时,如果其他人想对文件进行锁定时,Subversion会对他提示该文件已经被别人锁定。当修改完文件后,然后单击右键,SVN Commit...,将修改提交,默认情况下,提交的时候就会对该文件解锁,如果想仍然锁定该文件,请在commit时弹出的对话框中选中keep lock复选框。

图:文件的lock
<shape id="_x0000_i1045" style="WIDTH: 414.75pt; HEIGHT: 38.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image039.png"></imagedata></shape>

 

11.回到以前的版本

由于Subversion会记录你对Repository的每一次修改,因此能够很容易的获得Repository以前某一时刻的状态。比如:现在Repository的最新Revision56,这时我想看看RepositoryRevision24时的状态,可以在本地的Working Copy中单击右键,TortoiseSVN->Update to Revision...,然后输入你想要回复到的Revision号,点OK按钮。

12.查看修改

有时对Working Copy的许多文件进行了修改,这些文件位于不同的子目录,就可以在Working Copy的最上层目录单击右键,TortoiseSVN->Check For Modifications,弹出的对话框就会显示所做的所有修改明细。
还有一种情况:若Working Copy已经很久没有执行Update命令,想看看Working Copy中有哪些文件已经发生修改了,这时可以在Working Copy的最上层目录单击右键,TortoiseSVN->Check For Modifications,在弹出的对话框点击Check Repository按钮后,就会显示服务器端已经修改了的文件。

该方法还有一个用途就是查看文件的锁定,当想锁定一个文件时,想先看看这个文件有没有被别人锁定,点击Check Repository按钮会显示服务器端Repository所有被锁定的文件,如果你想锁定的文件不在这里面,那就说明该文件目前没有人锁定。

13.察看文件/目录的修改记录 --- log

就是看文件/目录的history。选Show Log就好

图:文件的修改记录

<shape id="_x0000_i1036" style="WIDTH: 414.75pt; HEIGHT: 347.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image041.png"><font size="3"></font></imagedata></shape>

14.比较文件或者不同版本间的比较 – diff

如上图,得到历史版本后,就可以直接diff了, Client自带了Compare功能

分享到:
评论

相关推荐

    centos 7.9服务器 离线 搭建svn服务器

    centos 7.9服务器 离线 搭建svn服务器 ,该文章适用于 开发人员 实施人员 项目经理用于项目文档管理 代码管理,而不指定如何在centos7.9环境下离线搭建svn服务器,因为大多数的网站只是介绍yum install 的方式,但是...

    SVN仓库彻底删除文件工具

    是否遇到过公司里的sx向svn提交了不该提交的文件?.sdf debug release 等等,是否对此感到崩溃?!是否svn仓库已经占用了大量的磁盘空间? 使用本图形化工具帮助你将这些文件彻底地从svn中删除。 先导出svn仓库 ...

    centos下svn客户端软件rapidSVN安装资源包及教程

    rapidsvn安装所需的全部资源包,可离线安装(gtk2和openssl的rpm包只上传了centos7版本) apr-1.5.2.tar.gz apr-util-1.5.4.tar.bz2 neon-0.29.6.tar.gz(可选,neon是subversion解析web http协议的包,视subversion...

    plsql_svn插件

    下面简单介绍下PLSQL developer工具的SVN版本控制 1, 下载pl/sql-svn插件。 2, 关闭你打开的所有pl/sql窗口。  3,将插件里的SVN_Plugin.dll文件复制到PLSQL DeveloperPlugIns目录下。  4,重新打开pl/sql,...

    右键增加SVN清除功能

    这是最好的SVN右键清除。中文。不分版本。我下载了好多别人的,没一个能很好的用。有些根本就清 不了,有些要清两次。这个是最好用的,本人测试完全保证没问题。 我们建立SVN时经常遇到新建新的SVN项目后但是里面带...

    Seay-Svn源代码泄露漏洞扫描工具

    SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范。“在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在...

    Windows svnlog 转Excel

    方法一:双击WINsvnlog2excel.bat,即可在当前文件夹下生成SVNLog的excel文件,默认导出bat文件第二行中SVNPATH所定义的SVN路径的LOG。可以修改bat文件中第二行的SVNPATH,导出指定SVN路径的log 方法二:在CMD...

    svn1.9.3.27083

    svn

    svn版本库迁移方法

    svnadmin dump /data/svn/repository &gt; /data/repository-backup.dump #全局备份,包括数据和历史记录,repository为例,实际为库名 2、 导入新库 svnadmin create /data/svn/repos/newproject #在新的服务器上新建...

    AnkhSVN 2.5.12471.17

    VS2008的SVN插件AnkhSVN。 1.下载完毕后,进行安装,安装向导安装即可。 2.打开VisualStudio2008,单击菜单“工具”-“选项”,然后选择SourceControl下的插件选择,选择我们刚刚安装的插件。 3.新建项目,勾选...

    AnkhSvn-2.4.11610

    AnkhSVN 2.4 released!(Thursday, August 23, 2012) AnkhSVN is a Subversion Source Control Provider for Microsoft Visual Studio 2005, 2008, 2010 and 2012. AnkhSVN provides Apache™ Subversion® source ...

    svn TortoiseSVN 1.14.5 (64-bit)

    svn TortoiseSVN 1.14.5 (64-bit) svn客户端svn TortoiseSVN 1.14.5 (64-bit) svn客户端svn TortoiseSVN 1.14.5 (64-bit) svn客户端svn TortoiseSVN 1.14.5 (64-bit) svn客户端svn TortoiseSVN 1.14.5 (64-bit) svn...

    tortoiesSVN客户端+Ubuntu上SVN安装配置步骤

    1. 安装SVN  apt-get install subversion 2. 建立svn仓库  1). 建立svn目录:mkdir /home/.svn(使用隐藏目录)  2). cd /home/.svn  3). mkdir astar  4). 创建仓库astar:svnadmin create /home/.svn/astar,...

    svn for mac 完美破解

    Versions for mac可以说是MAC下最好用的svn客户端了,对于Mac用户来说,SVN的知名客户端TortoiseSVN只支持Windows系统,让人不免失望,因此Versions就是目前Mac OS最好的SVN客户端。 Versions在使用上非常的简单,...

    svn安装配置与ldap整合

    这是一遍比较完整的linux下svn+apche+ldap安装配置手册,根据本人实际安装整理后的文档,目前都算是最新版本。其中ldap使用sun的opends,个人感觉比openldap要方便,当然重点不是用什么ldap而是如何配置。 主要包括...

    svn插件svn插件svn插件svn插件

    svn插件svn插件

    svn-win32-1.7.2.zip (win32svn) [SVN 绿色版]

    将文件解压缩到 C:\ 下,将解压缩后的 svn-win32-1.7.2 文件夹名改为 svn,然后将 C:\svn\bin 加入到系统的 PATH 环境变量中,即可开始使用。 将 svnserve.exe 设置为系统服务: sc create svn binpath= "C:\svn\...

    svn客户端svn客户端svn客户端svn客户端

    svn客户端svn客户端svn客户端svn客户端svn客户端

    SVN_1.8.2.24708最新版(含语言包)客户端服务端VS中文插件全套打包

    SVN服务端、客户端、VS简体中文插件打包下载(2013-10-24) 内含: VisualSVN-Server-2.7.1.msi 服务端 TortoiseSVN-1.8.2.24708-x64-svn-1.8.3.msi 64位客户端 LanguagePack_1.8.2.24708-x64-zh_CN.msi 64位客户端...

    SVN演示 SVN演示 SVN演示 SVN演示 SVN演示 SVN演示

    SVN演示 SVN演示 SVN演示 SVN演示 SVN演示 SVN演示

Global site tag (gtag.js) - Google Analytics