svn属性知识介绍


svn -r介绍


-r [--revision] ARG      : ARG (一些命令也接受ARG1:ARG2范围) 
                             版本参数可以是如下之一: 
                                NUMBER       版本号 
                                '{' DATE '}' 在指定时间以后的版本 
                                'HEAD'       版本库中的最新版本 
                                'BASE'       工作副本的基线版本 
                                'COMMITTED'  最后提交或基线之前 
                                'PREV'       COMMITTED的前一版本 


svn diff -r 47:48 比较47版本和48版本的差别 

svn log -r head显示最新版本的提交日志 

svn diff -r head 显示本地文件和最新版本的差别 

svn update -r prev rain.txt将这个文件更新到前一个版本 
svn update -r 版本号,例如:svn update -r 8 更新到第8版本 

svn co svn://localhost --r {'2011-06-13'} 

 

属性介绍

 

Subversion属性

Subversion允许用户在文件或目录上发明任意名称的版本化属性和非版本化属性,唯一的限制就是“svn:”是Subversion本身的保留前缀,用户可以设置这些属性来改变Subversion的行为方式,用户不能发明新的“svn:”属性

 

版本控制的属性

svn:executable

如果出现在一个文件上,客户端会将此文件在Unix工作拷贝中设置为可执行。

svn:mime-type

如果出现在一个文件,这个值表示了文件的mime-type,这允许客户端在执行更新时决定以行为依据的合并是否安全,同时也会影响使用浏览器浏览文件时的行为方式。

svn:ignore

如果出现在目录上,这是一组svn status可以忽略的未版本化文件的名称模式。

svn:keywords

如果出现在一个文件上,这个值告诉客户端如何扩展文件的特定关键字。

svn:eol-style

如果出现在一个文件上,这个值告诉客户端如何处理工作拷贝中的文件的行结束符。

svn:externals

如果出现在一个目录上,则这个值就是客户端必须要检出的路径和URL列表。

svn:special

如果出现在一个文件上,表示了那个文件不是一个普通的文件,而是一个符号链或者是其他特殊的对象。

svn:needs-lock

如果出现在一个文件上,告诉客户端在工作拷贝将文件置为只读,可以提醒我们在修改以前必须解锁。

 

未版本控制的属性

svn:author

如果出现,则保存了创建这个修订版本的认证用户名。(如果没有出现,则修订版本是匿名提交的。)

svn:date

保存了ISO 8601格式的修订版本创建UTC时间,这个值来自服务器主机时钟,不是客户端的。

svn:log

保存了描述修订版本的日志信息。

svn:autoversioned

如果出现,则修订版本是通过自动版本化特性创建。

 

 

svn:ignore属性使用

我们常常用svn status命令来查看本地的文件修改情况,用svn import导进大批量文件,但通常情况下我们本地有许多不需要纳入系统的文件,如编译产生的.class文件.exe文件等。svn status打印的额外信息扰乱视听;svn import可能会将无关文件错误导入库中。 
   怎么解决这个问题呢?有一个简单的办法可以避免:设置目录的svn:ignore属性,指定你想要svn忽略的文件。 

   假设我们在开发一个有关时间的库,让svn打印当前的状态,我们可以看到: 
bashs$ svn status project1/ 
?    project1/time.class 
?    project1/time.java.bak 
M    project1/time.java 

这儿,我们可以看出改动了time.java文件,但svn打印了另外2个我们不关心的文件。 

现在,使用 svn propedit svn:ignore project1 来打开一个编辑器编辑project1的svn:ignore 属性。输入以下内容: 
*.class 
*.bak 

  现在再运行 svn status,.class和.bak文件就会被忽略掉了,世界一片清净。 

修改完属性后,再commit,则每个人都会接受到 project1 更新过的svn:ignore属性,从而他们的svn也会忽略掉工作拷贝中的那些文件。 

  svn:ignore只应用于指定目录中的内容,它不会递归地应用于其子目录。

 

svn的externals属性使用

1. 定义一个svn的终端编辑器,比如vim: 
export SVN_EDITOR=mate 
2.使定义的生效 
source ~/.bashrc 
3.直接编辑 
svn pe svn:externals test-repo 

问题:

我们的项目里,服务器脚本工程svn地址为:svn://server/script;配置文件地址为:svn://server/cfg。都是独立的仓库。有一天,对外发布人员觉得每次都Update两次很烦,说能否把类似这种目录都放在一个仓库里,只需要Update一次就可以了。

    是否所有资源、代码都用一个仓库就ok了呢?千万不要这么做,因为
    svn的效率很低!

svn在管理代码这种文本文件(而且相比美术资源体积不大,文件不算多)的时候,下载、上传、查上传log速度还是可以接受的。我们已经做了多年的仓库依然能应付过来。

    但是管理二进制文件的时候,速度实在是慢的令人发指,角色、场景这种容量、文件数比较夸张的目录,完全下载一次甚至可以用掉4个小时。随着时间流逝,历史记录越来越长,下载速度就越来越难以容忍了。

解决方案:

   把不同种类的资源放在不同的仓库里,具体怎么放可以由有经验的资源管理人员安排。然后,建立一个资源主干仓库。里面用文件夹链接的形式,存放各种资源。(毫无疑问,我们的项目就是这样安排的。程序目录内,外链了数据仓库,美术资源仓库)

    资源管理员一旦设置好svn:externals属性之后,对用户来说,上传、下载都没有区别,就好像文件夹真的在主干仓库里一样。

    等过了一段时间,例如半年,某一种资源太多需要清理的时候。管理员把现有资源干净的拷贝出来到新仓库(或者新目录),例如cha目录下所有文件拷贝到cha2目录,只要最后的结果文件不要svn信息。然后修改svn文件夹链接的地址。
    修改好后,用户直接使用就ok了。达到了不影响其他人员的同时优化svn速度的目的

 

windows上属性操作

内容概要:

1、属性的概念和基础操作;

2、属性的关键字展开;

3、使用属性忽略某些文件;

4、设置Mime类型;

5、自动设置属性;

6、引用外部项目;

7、设置签入日志限制;

8、属性冲突;

其实属性还有设置换行、设置可执行标志等用途,但操作简单、用途也较小就不再此详细,有兴趣的可以自行百度。

 

1、属性的概念和基础操作


SVN不但可以存储属性,还可以存储与文件相关的元数据,文件的元数据就是属性。

属性的操作与文件类似,也有签入、签出以及冲突。

属性相当于关联到文件KV键值对,键值是字符串,而值的类型可以是任何内容,包括二进制文件。

属性可以分为两种:普通属性和特殊属性。特殊属性以svn开头,TortoiseSVN在SVN的基础上又增加了一些特殊属性,这些属性以:tsvn开头。

对属性的操作在TortoiseSVN的Properties菜单项,会打开属性窗口对属性进行增删改:

另外提一点,文件和目录的可用特殊属性是不同的,大家可以分别在文件和目录中使用Properties菜单,查看New按钮弹出的属性。

 

2、属性的关键字展开


看名字很高大上,也比较抽象难于理解,先简单解释下。

关键字可以理解为SVN内置的一些预定义变量,如:

$Date$ 已知最后提交的日期;
$Revision$ 已知最后提交的版本;
$Author$ 已知最后提交的作者;
$HeadURL$ 此文件在版本库中的 URL;
$Id$ 上述四个关键字的压缩组合;

所谓的展开,就是在你设置属性的文件内容中写入这些关键字,当文件在签入时,SVN会将这些关键字替换为实际的内容,下面实际操作下:

1、新建文本文档,输入以下内容:

1

2

$Date$

$Revision$

2、右键菜单,使用TortoiseSVN的Properties菜单项,在属性窗口中点击New按钮,选择Keywords;

3、勾选上Date和Revision;

4、签入文件,再查看一下文件内容,会被SVN关键字展开为以下内容:

1

2

$Date: 2015-03-23 19:41:11 +0800 (周一, 23 三月 2015) $

$Revision: 120 $

 

3、使用属性忽略某些文件


使用SVN中常常遇到这种情况,SVN目录下某些本地生成的文件不想签入到SVN服务器,这些文件仅用于本地操作,如C++项目中的bin和obj目录。

如果你没有把这些目录和文件加入忽略列表,而是签入到SVN,那估计你的项目组成员会遇到满屏的问号。

可以使用忽略属性 svn:ignore 来解决这种问题,本篇介绍的SVN机制有突破一般人理解的地方,请留意。

TortoiseSVN的菜单中已经提供了忽略操作,其实质也是通过忽略属性来实现的,我们来解刨一下TortoiseSVN的操作:

在文件或目录上右键,鼠标移动到图中标示的忽略菜单:

这四个子菜单项分别提供了:

1、将选中的文件加入忽略列表;2、将txt后缀的文件加入到忽略列表;3、将选中的文件和子目录中的相同文件名的文件加入忽略列表;4、不解释,按3推理。

选择第一项,在所在的目录(选择所在目录,不要选择文件)提交签入,查看TortoiseSVN做了哪些修改:

可以看出来进行了两处修改,一处是给文件的所在目录添加了svn:ignore属性,可以右键查看属性设置,发现值为我们添加的文件的文件名。

还有一处是将刚才的文件删除,如果你这时点OK,将本次操作签入的话,文件将会被删掉。当你下次再生成这个文件时,不会显示加号,而是会显示减号。

如果我只想加入忽略列表,而在本地保留这些文件怎么办?

需要先将文件复制出来,然后提交签入,签入后再将文件复制回来,真的就只有这一种方式。

如果你想加入忽略列表里的文件是刚生成的,这时候直接加入到忽略列表里,可以避免刚才的删除、复制操作。

你也可以手动在目录上添加svn:ignore属性来忽略该目录下的文件,但如果文件没有在SVN上删除,操作依然不会有效。

总结一下:你不可能保持一个添加到忽略列表里的文件在SVN上存在。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值