• 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中有效,而且不能用于目录。

    本文摘自:https://airu.iteye.com/blog/1145030  版权归作者所有

  • 相关阅读:
    05:背景设置
    04:文本 + 字体
    03:CSS三大特性
    02:Emmet 语法 + Ps切图
    01:基本概念 + 引入CSS
    input禁止输入的方法
    十进制转换成任意进制(栈的应用)
    假定一个解并判断是否可行(二分搜索应用)
    关于二分查找和二分搜索
    统计单词
  • 原文地址:https://www.cnblogs.com/ysyy/p/10903939.html
Copyright © 2020-2023  润新知