`
airu
  • 浏览: 270865 次
  • 性别: Icon_minigender_1
  • 来自: 云南
社区版块
存档分类
最新评论

SVN 学习笔记(三 SVN高级操作 下)

 
阅读更多

认证和授权

 

在此之前,我们并没有提到SVN的安全方面的东西。并非说这不重要,而是因为根据不同的配置,可能我们会有不同的认证和授权。SVN提供三种配置。我们这里不详细说明。

 

首先,我们是可以通过网络来访问SVN库的。那么我们就需要通过一些网络协议。SVN支持HTTP(s), SSH等协议。这些协议中各自的认证授权又有不同。

其次,SVN利用操作系统的特性来缓存密码。也就是说,我们的密码是缓存在SVN服务器上的。当然有的还可能是明文。如果不想缓存,使用 --no-auth-cache 

在此,使用 --username --password选项来与服务器认证。--username 和 --password是两个全局选项,大多数的SVN命令都支持。

 

分支与合并

 

如果在某一个时刻,我们突然发现需要针对不同的需求,基于原来的代码开发一个新的东西,那么我们可能需要一个分支。

之前忘了说,我们的库中的目录布局,一般会创建两个目录,叫做Trunk 和Branches。

Trunk自然是主干,Branches 就是分支了。

 

 

首先创建分支:

$svn copy file:////repos/idp/trunk  file:///epos/idp/branches/mybranch -m "shaoxin 's branches "

Commited revision 532

 

创建分支使用的是copy,注意这里,我们使用的是从库到库的copy,这样的速度是很快的。因为这只是一个Hard link

 

然后check到Working Copy

$svn checkout file://repos/idp/branches/mybranch

...

...

...

 

然后我们就可以在分支中大展身手了。注意,分支和主线共用一个版本历史。但是分支以后的历史,主线没有。在回头看看创建分支,很简单吧。Copy命令告诉我们,SVN的分支,其实就是一个普通目录而已。仅此而已。一个术语而已,对于分支到分支的复制,我们叫 Merging,使用svn merge来实现。

 

分支并非一直都这样分下去。如果我们的分支功能开发好了,那么也许主线觉得不错,那就合并过来吧。如果要合并,那么一个前提,我们要随时和主线保持同步,不然你突然重新合并分支,可能冲突就泛滥成灾了。下面说如何保证分支和主线同步。

 

之前说的,分支到分支的复制叫Merging,分支其实就是目录,那么目录到目录的复制就是merging,我们用svn merge,分支到主线也一样。

首先。确保自己在分支目录下。

$pwd

/home/madic/mybranch

然后开始merge吧。

$svn merge  file:////repos/idp/trunk

...

...

...

同步完成,我们查看是否有冲突。

$svn status

...

...

..

如果有冲突,就解决冲突。一切OK,那我们提交

$svn commit -m "Merge lastest trunk change"

 

经过无数次同步,我们的分支终于不再开发了。我们也许想合并到主线。SVN叫做reintegrate

 

首先,更新主线

$svn update 主线目录

...

...

...

合并分支

$svn merge --reintegrate file:///repos/idp/branches/mybranch

...

...

...

提交

$svn commit -m "merge mybranche back into trunk"

...

...

...

 

完成合并后,分支是否要删除?

这是一个问题,但是有一点可以确定,分支不能再被使用。当然他的历史信息,是否是需要的呢?因为分支和主线的历史,一旦建立分支后,之后的历史他们是各自独立的。

如果此时我们又想念分支了,我们要在启用分支,那么很简单:

$svn delete mybranches

$svn copy trunk branch

$svn switch brances

这里 switch把我们切换到分支。Switch 是一个切换库的命令。这里我们要知道,分支实际上只是一个对主线的Hardlink,实际上我们在一个working copy,但是确实两个库同事管理。我们通过switch切换,那么我们在执行svn命令时,不指定库,默认的就是switch的那个库了。

 

Merge信息,我们可以通过 svn mergeinfo 来查看。

$svn mergeinfo  /repos/idp/trunk

R341

R342

R343

这表示的已经合并的版本。

 

$svn merginfo /repos/idp/runk --show-revs eligible

R391

R392 

表示还可以合并的。eligible 还可以使用merged替换,表示已经合并的。

 

恢复删除

如果不小心删除了某个文件,而这个文件已经不再HEAD版本了。那么我们如何恢复呢?

方法一:

$svn copy  /repos/idp/remove.c@807 ./remove.c

这表示在把808版本的remove.c恢复到当前目录

$svn status 

A  +  remove.c  

这里加号表示 从历史版本恢复,而不是新加的。

增加后要提交

$svn commit -m "rescurrected remove.c from r807" remove.c

Adding remove.c

...

...

如果我们不想要remove的历史信息了。可以用第二种方法。

$svn cat /repos/idp/remove.c@807 > ./remove.c

$svn add remove.c

$svn commit remove.c -m " rescurrected remove.c from r807" remove.c

 

 

既然可以从Working Copy添加,也可以直接拷贝到库。

$svn copy /repos/idp/remove.c@807 /repos/idp/

$ svn update

A   remove.c

 

 

这里,我们可以看到一个URL或者PATH后面跟着@版本号。这是因为路径和URL并不是唯一指定一个文件的,因为我们的SVN是时光机,文件也是有时间的。好比某个房子里并不是一直住着一个人,时间不同,可能住的人不同。所以,我们使用@版本号来唯一确定一个历史文件。

 

稀疏目录

我们都知道checkout的功能了。但是实际上checkout远远不止这些。我们可以通过各种选项,使得checkout具有更多的功能,来符合我们的实际要求。

 

$svn checkout URL ---depth empty|files|immediates|infinity

 

--depth的参数

empty  只包含目标文件或目录,不包含子目录

files    只包含目标文件和子文件

immediates 只包含目标文件及相邻的文件,目录

infinity 所有文件,目录,子目录。

 

同样,我们在svn update的时候,也可以这样使用。

 

锁机制

 

我们前面提到,使用SVN的一种模式 Lock-Modify-Unlock。现在我们说说SVN的锁。

SVN有三种锁的概念。

避免多用户同时提交的锁

WorkingCopy的锁,组织多个Subversion同事操作一个WoringCopy

SVN库阻止多个程序并发访问的锁。

 

我们讨论的是如何与其他同事和谐开发的锁。也就是第一种锁。SVN对于二进制文件,是不能Merge的,所以我们在修改二进制文件时,如果不上锁,遇到冲突,那么是无法解决的。比如,我在修改一张图,而另外一个同事也在修改,即使我们可能修改的位置不一样,但是,也不可能合并。而且,如果我修改了半天,他突然提交了。那么我这半天的工作,就不能合并到SVN库中。这对于我的工作来说,只能是白费劲。

所以,在遇到一些二进制文件时,我们最好使用Lock-Modify-Unlock 机制。

 

$svn lock apple.jpe -m "Editing file for painting"

这样就锁住了文件。并且在本地有缓存了一个lock token

$svn info apple.jpg

...

...

Lock Token :opaquelocktoken:0c056006-88f9-03109e48

 

LockToken是公开的,以表面在某个WorkingCopy中某人锁住了文件。而不是一个异常。

 

LockToken跟随WorkingCopy的。如果你在办公室的WorkingCopy锁住了一个文件,那么你回到家的时候,你发现,你不能提交了。因为锁认证是需要两个条件:

 

你是锁的拥有者

你有LockToken

 

如果你在认证通过后,提交了文件,锁自动解开。并且,在同一个目录下的锁都会解开。当然,你如果只是提交一个功能,还想继续锁住,编写下一个功能,那么使用 --no-unlock

如果你不想提交,也不想锁住文件那么使用

 $svn unlock file

就可以解锁。

 

我们可以通过

$svn status -u

M  O  32  apple.jpg

O表示被其他人锁住了(other)。

 

如果你急需编辑文件,或者加锁的人渡假去了,而我们必需要完成他未完成的功能,那么我们是可以干掉这个锁的。

两种方法,一是找管理员。

$svnadmin lslocks /var/svn/idp

$svnadmin rmlocks /var/svn/idp/apple.jpg

 

或者我们自己来

 $svn status -u

 $svn unlock --force /var/svn/idp/apple.jpg

使用--force,很暴力。使用svn status查看

$svn status -u

B   32   apple.jpg

B 表示锁坏了(broken)

 

SVN在设计的时候,这里有两个争论。就是是否只有管理员能解锁?还是其他用户也能解锁。SVN 使用了灵活的方式,我们可以用户解锁,但是也可以使用 Repostory hook来设置只有管理员可以解锁。关于hook的问题,我们就不多说了。

分享到:
评论

相关推荐

    svn学习笔记

    ### SVN学习笔记 #### 版本控制的重要性及概念解析 版本控制在软件开发过程中扮演着极其重要的角色。尤其是在多人协作的环境下,版本控制系统能够有效帮助团队成员管理代码、文档和其他重要资源的不同版本,确保每...

    SVN中文教程 SVN简明教程 SVN学习笔记

    - 学习笔记通常包含个人理解和实践总结,可能涵盖一些实用技巧和常见问题解决方案。 通过以上内容,你将能够掌握SVN的基本操作和使用策略,更好地融入团队开发环境中。在实际工作中,结合具体的项目需求和团队协作...

    svn学习笔记-windows下安装svn加apache的安装流程

    **标题解析:** "svn学习笔记-windows下安装svn加apache的安装流程" 这个标题告诉我们,本文将重点讲解如何在Windows操作系统上安装Subversion(简称svn)以及与Apache服务器的集成配置过程。Subversion是一款流行...

    SVN笔记学习

    以下是对"SVN笔记学习"内容的详细解读: 1. **Linux下SVN的搭建** - **安装SVN**: 在Linux系统中,通常通过包管理器来安装SVN,如在Ubuntu或Debian上使用`apt-get install subversion`,在CentOS或Fedora上使用`...

    SVN学习笔记

    本文将从SVN客户端与服务器端的安装配置、版本控制操作、用户权限管理以及数据备份恢复等方面进行详细的学习笔记记录。 首先,进行SVN客户端软件的安装,以TortoiseSVN为例,它为Windows环境下提供图形界面的客户端...

    我的SVN学习笔记(原创)

    **我的SVN学习笔记(原创)** 在信息技术领域,版本控制系统是不可或缺的工具之一,它帮助开发者跟踪和管理代码的变化,使得多人协作变得有序而高效。Subversion(简称SVN)就是这样的一个开源版本控制系统,它允许...

    svn笔记资料

    通过本文的学习,我们不仅深入了解了SVN的基本概念和原理,还掌握了SVN的实际应用技巧。无论是对于个人开发者还是大型软件团队,熟练运用SVN都是非常必要的。希望本文能够帮助读者更好地理解SVN的核心价值,并将其...

    SVN 学习笔记

    这篇学习笔记主要涵盖了SVN的基本概念、安装与配置、基本操作以及在实际开发中的应用。 1. SVN的基本概念 - 版本库(Repository):存储所有版本历史信息的地方,相当于数据库。 - 工作副本(Working Copy):...

    svn-笔记下载

    - Git是另一种流行的版本控制系统,相比SVN,Git具有更快的速度和分布式特性,但在某些场景下,SVN的简单性和易用性可能更胜一筹。 7. 学习和使用资源: SVN的官方文档和各种社区论坛提供了丰富的学习资源,如...

    svn搭建笔记.zip

    总之,通过"svn搭建笔记.zip"这份资源,你可以系统地学习如何从零开始搭建SVN服务器,逐步掌握版本控制的核心概念和操作技巧,这对于任何软件开发者而言都是一项基础且必要的技能。记得在实践中多加练习,理论结合...

    传智播客2015PHP34期SVN学习笔记

    SVN与CVS一样,是一个跨平台的软件,支持大多数常见的操作系统。作为一个开源的版本控制系统,Subversion 管理着随时间改变的数据。这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的...

    svn技术总结本人自己学习笔记.zip

    在“svn技术总结本人自己学习笔记.zip”这个压缩包中,我们可以期待找到关于SVN的基本概念、安装配置、日常操作、冲突解决以及高级特性的学习记录。 首先,SVN的核心概念包括仓库(Repository)、工作副本(Working...

    我的cvs2svn笔记

    《我的cvs2svn笔记》是一份详细的指南,旨在帮助用户在Windows环境下将CVS(Concurrent Versions System)版本库转换为SVN(Subversion)版本库。CVS是一种广泛使用的源代码控制系统,而SVN则因其先进的特性,如分支...

    版本控制SVN和GIT笔记

    SVN支持强大的分支和合并策略,允许开发者在不影响主线(主分支)的情况下进行开发。SVN也在开源社区和商业领域获得了广泛应用。 分布式版本控制系统以GIT为代表,它使用分散的架构,每个开发者都拥有完整的版本库...

    Maven+Svn安装笔记.rar

    2. **SVN使用教程**:"svn-笔记.docx"和"svn.docx"可能会详细解释如何创建、检出、提交、更新和解决冲突等基本SVN操作。此外,可能还会涉及到如何使用命令行工具和图形化客户端,如TortoiseSVN。 3. **Maven安装**...

Global site tag (gtag.js) - Google Analytics