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

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

 
阅读更多

所谓高级操作,只是曲高和寡,其实都不怎么用的。但是关键时候,可能会很有用。

这个高级只是针对基本操作而言。有些操作可能也是比较基本的。

 

 

清除锁

 

 

有时候我们在操作的时候,可能系统崩溃了,或者SVN非正常结束了。由于SVN在Working Copy 改变时,会有一个 to_do_list ,并且锁住了要改变的东西。改变以后恢复解锁。当时如果正在这是系统非正常结束了。某些文件可能就被锁住了。

 

$svn status 

L   somedir

 

L表示lock,被锁住了。此时我们可以用cleaup来清除这样的锁。

 

$svn cleanup

$svn status

 

 

树冲突

有时候,我们的冲突发生在删除,移动一个文件时。例如我提交的时候,这个文件已经被更名了。此时的解决方法,和普通冲突类似。例如,code/bar.c 被改名为 code/baz.c

我们首先需要和发生冲突的同事商量,如果要保留baz.c那么就

$svn remove --force code/bar.c

$svn resolve --accept=working code/bar.c

$svn status 

$svn diff

同样,我们如果要保留bar.c那么把要removed和resolved的文件改成baz.c即可。

 

属性

 

SVN的每个文件都可以增加一个属性。属性有自定义的,SVN原生的。属性也分为有版本的,和无版本的等等。

属性是一个有时很有用的东西,她一般用来存放一些元数据,额外的信息,方便获取。也可以用来做一些有意思的事情。

对属性的操作还是增删改查

$svn propset copyright "(C) 2011 YDTF Software Inc." code/readme.txt

Property 'copyright' set on 'code/readme.txt'

 

$svn proplist code/readme.txt

$svn propdel ...

$svn propget

 

以上几个命令,可以通过help查看详细。

几个SVN自带的属性介绍:

svn自带几个属性以svn开头。

1、svn:eol-style 表示的是行结束。

不同的操作系统,可能使用不同的行结束符号。

比如Window使用  CRLF。LF就是换行  CR就是回车。

而Unix中 只使用 LF。

这样,这个svn:eol-style就有几种值:

native; 根据本地定义

CRLF: 使用CRLF作为EOF(End-of-line)

LF: 

CR

 

svn:ignore

Svn:ignore表示忽略Working Copy中的Unversioned文件。

当你使用svn status 时,你会发现,很多无关紧要的文件都列出来了。

于是我们可以使用svn:ignore忽略这些文件。比如 有很多 .bak文件。

我们可以设置 svn:ignore=*.bak 这样所有后缀为bak 的文件,在svn status时就不见了。

$svn status

M mydir/foo.c

M mydir/bar.c

? mydir/bar.c.bak

? mydir/foo.c.bak

$svn propset svn:ignore mydir *.bak 

$svn status

M mydir/foo.c

M mydir/bar.c

 

注意,ignore 使用类似正则的匹配。比如 ? 表示一个,*表示多个,[ 表示开始

但是这个属性还会影响很多,诸如svn add * 时,

如果想把所有的文件加入到SVN库 ,那么使用 svn add -* -force 即可。

3、svn:keywords

我们来编辑一个svn库中的文本文件

$vi foo.c

 

$Date$

$Revision$

$Author$

#include<stdio.h>

...

:wq

 

$svn propset svn:keywords "Date Author" foo.c

$svn cat foo.c

$Author: yinshaoxin $ 

$Date: 2011-07-26 17:01:10 +0800 (Tue, 26 Jul 2011) $

$Revision$

#include<stdio.h>

...

于是SVN为我们的文档自动加上了Author和Date。 这里注意,SVN命令有一个全局选项,那就是--username,这个涉及到SVN的认证和授权。你最好使用自己的帐号来操作SVN。

 

4 svn:needs-lock

这个属性,用在一些不能同时多个人编辑的文件上。只有使用了lock锁住文件,这些文件才能是可读的,否则是不可读的。

注意,这个属性的值无关紧要。

$svn propset svn:needs-lock foo.jpg

这样,我们如果要修改这个foo.jpg 那么,只能先执行

$svn lock foo.jpg 

关于lock我们后面马上就讲到。这样做并不是很严格的,但是某些时候很有用。例如,因为一些二进制文件,例如jpg文件是不可合并的。如果没有锁,两个人可能同时做了很大的修改,但是有一个人的却要是白费时间,因为他比另一个人玩提交,修改的地方是不可能自动合并的。为了不必要的浪费时间,Lock-Modify-Unlock的这种方式,就对我们很重要了。

 

5 svn:externals

当我们同时在两个库中工作时,我们可能在一个Working Copy中需要从另外一个库中checkout文件。这时,svn:externals就很有用了。

 

$svn propedit svn:externals file:///var/idp2/svn/repos/src

third-party/souds   file:///var/idp/svn/repos/souds

third-party/skin -r148 file:///var/idp/svn/repos/skin

 

注意,我们使用 propedit来编辑 这个属性,因为她是多行的。

$svn checkout file:///var/idp2/svn/repos/src

A              src

A          src/Makefile

...

...

Checkd  out revision 148

Fetching external item into src/third-party/souds

A  src/third-party/sounds/ding.ogg

A  src/third-party/sounds/dong.ogg

...

...

 

我们可以看到,checkout会吧external的属性设置的库也一起checkout出来了。

当我们用svn status看的时候

 $svn status

E 表示External 

X 表示 从external获取的。

外部文件可以提交,只要这个外部文件是HEAD版本。

我们checkout的时候,如果不想check出external的,可以加 --ignore-externals

 

上面列举的是一些有意思的SVN自带属性的,最好的原则是不去管他们。除非必要。

 

修改列表(Changelists)

 

有时候,我们修改的文件太多了,提交的时候,忘记了改了些什么文件,如果全部提交吧,不好区分填写日志。于是我们把修改的某一类,加如一个changlists中。提交的时候指定提交这个changlists内的东西,这样就避免了上述的问题。

 

$svn changlist sort-fixes  sort.c list.c array.c

Path  'sort.c' now is a member of changlist 'sort-fixes'

Path  'list.c' now is a member of changlist 'sort-fixes'

Path  'array.c' now is a member of changlist 'sort-fixes'

 

$svn status --changelist 'math-fixes'

M sort.c

M list.c

M array.c

如果需要删除,则使用svn  changlist --remove 

$svn changelist --remove sort.c

 

一但有了changlist,我们可以用来做很多事情。比如,比较文件的时候,我们只关心指定的chagnlist的。

$svn diff  --changelist  sort-fixes

 

$svn -commit -m "fix the sort bugs" --changelist sort-fixes

 

提交后的changelist自动被清除。如果想保留,使用 --keep-changelists

有意思的是,changelist命令也带有--changelist选项,啊,递归。

我们需要注意的是,changlist只在Working Copy中有效,而且不能用于目录。

分享到:
评论

相关推荐

    svn学习笔记

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

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

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

    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学习笔记-windows下安装svn加apache的安装流程

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

    svn笔记资料

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

    SVN 学习笔记

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

    svn-笔记下载

    除了命令行工具,还有许多图形化的SVN客户端,如TortoiseSVN,它提供了直观的右键菜单操作,使得SVN更易用。 6. SVN与其他版本控制系统对比: - 相较于CVS( Concurrent Version System),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带来的更高效、更安全的版本控制体验。

    Maven+Svn安装笔记.rar

    1. **SVN安装**:笔记将涵盖如何在不同操作系统(如Windows、Linux或Mac OS)上安装SVN客户端和服务器。这可能包括下载安装包,配置环境变量,以及设置SVN仓库。 2. **SVN使用教程**:"svn-笔记.docx"和"svn.docx...

    版本控制SVN和GIT笔记

    文档中提到的VirtualBox是一种虚拟机软件,允许用户在宿主操作系统之上运行另一个操作系统。文档提到了VirtualBox的安装过程,以及如何创建一个新的虚拟电脑,并配置操作系统类型和版本。虚拟机的安装对于学习和测试...

Global site tag (gtag.js) - Google Analytics