在使用SVN的过程中往往会遭遇这样的问题:Checkout至本地的文件往往不带可执行权限或可写权限,这是由于SVN的文件属性设置导致的。现时网上对于SVN属性相关的中文文章非常少,基本只描述了问题现象而没有系统地讲解其背后的原理,本文在此做个小结。
SVN版本控制系统提供了多项文件属性供用户应用于不同的使用场景下(例如防冲突等),此外还提供了针对目录操作的目录属性,本文不涉及该部分。SVN文件属性的名称均以“svn:”开头。以SVN 1.9为例,共支持如下文件属性:
名称 | 描述 |
---|---|
svn:keywords | 扩展关键字 |
svn:executable | 文件可执行权限 |
svn:eol-style | EOL(行尾结束字符) |
svn:mime-type | 文件MIME类型 |
svn:needs-lock | 文件锁(一般用于防止在多人开发场景下的提交冲突与内容覆盖) |
上述SVN文件属性的详细说明可通过svn ps --help命令获取。
SVN提供了一组命令供用户对SVN文件属性进行增删改查操作,分别是:
命令 | 快捷命令 | 功能 |
---|---|---|
svn propdel | svn pd / svn pdel | 删除属性 |
svn propedit | svn pedit / svn pe | 编辑属性 |
svn propget | svn pget / svn pg | 获取指定属性的属性值 |
svn proplist | svn plist / svn pl | 显示属性 |
svn propset | svn pset / svn ps | 设置属性 |
上述命令均可通过--help参数获取详细的使用说明。
SVN文件属性删除命令,基本格式为
svn propdel PROPNAME [PATH...]
其中PROPNAME即需要删除的SVN文件属性名,[PATH...]即目标操作对象或文件。以常见的文件解锁操作为例,文件锁定操作由svn:needs-lock属性决定的,若需要清除该属性,可执行如下命令
svn propdel svn:needs-lock main.c
SVN文件属性编辑命令,基本格式为
svn propedit PROPNAME TARGET...
以修改一个文件svn:keywords属性值为例,可执行如下命令
svn pedit svn:keywords main.c
执行该命令时,SVN将打开一个GNU nano文本编辑器界面供用户修改属性,总体的操作流程和Git基本一致。
SVN文件属性值获取命令,基本格式为
svn propget PROPNAME [TARGET[@REV]...]
以获取一个文件的svn:keywords属性值为例,可执行如下命令
svn propget svn:keywords main.c
执行上述命令后,系统将回显对应的属性值。
SVN文件属性列举命令,该命令用于查看目标文件的所有属性(但不显示具体的属性值),其基本格式为
svn proplist [TARGET[@REV]...]
以查看某一文件的所有属性值为例,可执行如下命令
root@ubuntu:~# svn pl main.c
Properties on 'main.c':
svn:keywords
svn:needs-lock
SVN文件属性设置命令,该命令用于为目标文件添加用户所需的文件属性,其基本格式为
svn propset PROPNAME PROPVAL PATH...
以常见的为目标文件添加可执行权限为例,可执行如下命令
root@ubuntu:~# svn ps svn:executable on main.c
property 'svn:executable' set on 'main.c'