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

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

清除锁

有时候我们在操作的时候,可能系统崩溃了,或者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  版权归作者所有

SVN 学习笔记-高级操作的更多相关文章

  1. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  2. Javascript学习笔记二——操作DOM

    Javascript学习笔记 DOM操作: 一.GetElementById() ID在HTML是唯一的,getElementById()可以定位唯一的一个DOM节点 二.querySelector( ...

  3. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

  4. [No000091]SVN学习笔记2-TortoiseSVN Client初级操作update(获取)、commit(提交)

    SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...

  5. svn学习笔记(1)入门学习----安装及创建运行仓库

    学习及使用svn有一段时间了,但是以前学习的时候不怎么用,现在用只是简单的更新上传,又把基本理论忘了.为了以后自己看自己的笔记回忆,特此记录 svn学习博客:http://www.cnblogs.co ...

  6. PHP学习笔记--文件目录操作(文件上传实例)

    文件操作是每个语言必须有的,不仅仅局限于PHP,这里我们就仅用PHP进行讲解 php的文件高级操作和文件上传实例我放在文章的最后部分.--以后我还会给大家写一个PHP类似于网盘操作的例子 注意:阅读此 ...

  7. Javascript学习笔记三——操作DOM(二)

    Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...

  8. DP动态规划学习笔记——高级篇上

    说了要肝的怎么能咕咕咕呢? 不了解DP或者想从基础开始学习DP的请移步上一篇博客:DP动态规划学习笔记 这一篇博客我们将分为上中下三篇(这样就不用咕咕咕了...),上篇是较难一些树形DP,中篇则是数位 ...

  9. Scala学习——函数高级操作

    scala函数高级操作 一.字符串高级操作 多行字符串和插值 package top.ruandb.scala.Course06 object StringApp { def main(args: A ...

随机推荐

  1. 测试当前C环境的栈帧增长方向以及传递参数时的压栈顺序

    前文链接:上次由于一个很常见的printf-bug(下文有提及)引发了我对栈的思考,并写下了一点总结.这次就尝试对不同的C环境进行实践,检测其传递参数的一些性质. 这是今天写的检查C环境的一段程序.能 ...

  2. 多表单异步验证 可以用 Promise validate

    https://www.jb51.net/article/140062.htm vue动态绑定组件子父组件多表单验证功能的实现代码 // 加载组件:每次下拉框监听则给changValue新赋值,如果下 ...

  3. Java文件编译与反编译:javac命令和javap命令

    1.创建一个Test.java文件,并输入内容 public class Test{ private int m; public int inc(){ return m + 1; } } 2.使用ja ...

  4. CPP-基础:inline

    背景: 在C&C++中 一.inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义. 表达式形式的宏定义一例: #define ExpressionNam ...

  5. Perl语言入门: 斜线不是元字符,所以在不作为分隔符时不需要加上反斜线。

    Perl语言入门: 斜线不是元字符,所以在不作为分隔符时不需要加上反斜线.

  6. java基本框架

    public class 文件名 { public static void mian(string[] args) { 自己的代码: } }

  7. UVa-401-Palindromes(回文)

    这一题的话我们可以把映像字符的内容给放入一个字符串常量里面,然后开辟一个二维的字符串常量数组,里面放置答案. 对于回文实际上是很好求的,对于镜像的话,我们写一个返回char的函数,让它接收一个char ...

  8. 4. InnoDB表单独表空间

    4. InnoDB表单独表空间 从历史上看,所有InnoDB表和索引都存储在系统表空间中.这种单片方法的目标是完全专用于数据库处理的机器,精心规划的数据增长,其中任何分配给MySQL的磁盘存储都不会用 ...

  9. 深入Linux内核架构——进程管理和调度(上)

    如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停 ...

  10. Java:post请求

    文章来源:https://www.cnblogs.com/hello-tl/p/9140870.html 0.post请求返回json import java.io.BufferedInputStre ...