前言,先扯几句。最近学了GIT,虽然很肤浅,但是也算是用上了分布式版本管理控制系统。Linus很牛,他也很厌烦SVN,而我看这些都是工具,是否拿来使用主要看是否顺手。我赞同分布式版本管理控制,它有诸多优点,但是对于在局域网中做项目的封闭式开发或者项目很小且本机就能搭建SVN服务器,这两种情况来使用SVN也无可厚非。至于神人Linus他做的Linux系统源码太庞大,而且项目源码数据量大,这个对于SVN还是不太适用。准备进入公司新项目开发阶段了,有同事在外地分公司工作,因此代码版本管理尤为重要。之前有个项目居然是手工拷贝合并代码,还好只有3个人,即使这样也有不一致的地方,现在想起来真是汗一个。这次首先跟同事询问代码如何管理,同事说把源码放在公司服务器上,用SVN同步,因为外地的同事编码量不会太多,而我们在公司的同事可以直接通过公司局域网访问服务器,因此用SVN还是没问题。SVN的基本使用我都会了,这里只是想学习两点:1、SVN设置忽略文件;2、SVN给文件设置只读属性(该文件必须先获取锁,锁定后才能编辑,编辑好以后提交解锁)。
首先,先说如何设置忽略文件。这里先说一下为什么要设置忽略文件,因为Visual Studio编辑器在编译生成项目时会有一些无关代码的文件,比如bin文件夹、obj文件夹,还有一些用户配置文件,比如*.user、*.suo等。这类文件是不用提交同步到服务器,而是个人用个人的。对于已维护在SVN上的项目,在客户端对于某个文件右击在SVN子菜单中找到【删除和增加到忽略列表】菜单,点击它这个文件就被忽略了,需要提交一下,忽略的文件在服务器上是被删除的,但是在每个人本机上是存在的,且不受SVN版本控制。如果我想在导入本地项目文件到服务器上或者批量添加文件时,如何忽略指定类型的文件呢?这个要点击SVN右键菜单中的设置菜单,在弹出来的对话框中,常规设置中有个全局忽略样式,这里面已经有一些东西了,我们不管它。我们把我们要忽略的东西添加进去,注意文件夹直接写,文件可以使用通配符*和?(并且还支持正则表达式),多个项之间用空格隔开。比如我添加如下4项:[Bb]in [Oo]bj *.user *.suo。这样在导入操作时符合忽略规则的文件夹或文件不会导入到服务器的SVN仓库中。
然后,再来说给文件设置只读属性,为什么要设置只读属性呢?其实SVN有合并的功能,但是是对文本文件,比如txt、cs、xml、aspx等。但是对于二进制或者其他一些重要文件,合并的效果就不太好了,这时如果多人同时编辑同一文件,很容易出现冲突。而只读属性并不是真的只读,其实据说有办法可以绕开这个设置,不过这个咱们先不关心。它只是提醒我们该文件要先锁定再编辑,在提交解锁前,其他人是无法获取锁的,因此也就无法提交,他的编辑只能在本地保存副本了,这样我们就不会对于重要的需要防范冲突的文件忘记锁定了。对于已维护在SVN上的项目,在客户端对于某个文件右击在SVN子菜单中找到【属性...】,然后再点击【新建】按钮,键选择“svn:needs-lock”,值随便填,这里我就填*,提交到服务器上后,这个文件以后就必须锁定后才能编辑了。那么如果想对某个文件夹下所有的文件都设置该属性,就右击该文件夹,然后还是像前面一样操作,这时在填写键值的窗口上有个复选框会启用——递归应用该属性,勾选它,这个文件夹中的所有文件都会应用这个属性,然后提交即可,那么对于后添加或后导入的文件如何自动加上该属性呢?还要进入到之前设置全局忽略样式的窗口,它下面有个Subversion配置文件,点击【编辑】按钮,会用记事本打开一个文件,里面有这么一段:
### Set enable-auto-props to 'yes' to enable automatic properties
### for 'svn add' and 'svn import', it defaults to 'no'.
### Automatic properties are defined in the section 'auto-props'.
# enable-auto-props = yes
大概意思就是:将“启用自动属性”设置为是来启用自动属性功能,启用后对于SVN的Add和Import(添加和导入)会自动应用这些属性,“启用自动属性”默认值为否,自动属性可以在“auto-props”配置节中定义。然后将第4行的最前面的#和空格去掉即可,该文档下方有一个[auto-props],它下面已经有若干的自动属性定义了,只不过被注释掉了(行首加#即为该行已被注释),那些被注释的自动属性我们不管,我们配置我们的属性,比如*.sln = svn:needs-lock=*,换一行再写*.csproj = svn:needs-lock=*等等。
最后再扯一句啊,SVN服务器上有个权限,是对SVN用户做的控制,里面有只读、读写等权限,如果你在服务器的仓库中对某个文件设置成只读权限,那么对应用户是可以将该文件拉到本地,但是修改后提交,SVN客户端会提示无法提交(红色字体)。这个跟之前说的设置只读属性不是一回事。