svn 命令行提交忽略修改或添加的文件

2014/11/22 运维

在开发中搭建测试环境时,经常碰到开发人员需要根据自己的情况修改本地checkout下来的配置文件,比如jdbc,config等等,这些修改后的文件往往是不需要再提交到svn repo中的。不然肯定乱套了。 这样就带来一个需求,怎样才能在提交时忽略掉这些文件呢?用tortoiseSVN很简单,直接在界面操作添加到ignore list中。在命令行应该怎么做呢? 网上之前看了很多做法,比较多的一种是这样的:

假设working copy的目录为temp

  1. cd到temp所在的目录下
  2. svn propedit svn:ignore . 注意:请别漏掉最后的点(.表示当前目录),如果报错请看下面
  3. 打开的文件就是忽略列表文件了(默认是空的),每一行是一项,在该文件中输入temp,保存退出
  4. svn st查看状态,temp的?状态已经消除了

其实就是将需要忽略的文件添加到一个文件中,这个文件由 svn propedit svn:ignore命令打开

但在实际的测试中,我发现,针对不在版本控制中的文件,也就是状态为”?”的文件,这种方法是有效的。说到文件的状态,这里简要列举一下:


svn status打印五列字符,紧跟一些空格,接着是文件或者目录名。第一列告诉一个文件的状态或它的内容,返回代码解释如下:

A item

文件、目录或是符号链item预定加入到版本库。

C item

文件item发生冲突,在从服务器更新时与本地版本发生交迭,在你提交到版本库前,必须手工的解决冲突。 D item

文件、目录或是符号链item预定从版本库中删除。

M item

文件item的内容被修改了。

R item

文件、目录或是符号链item预定将要替换版本库中的item,这意味着这个对象首先要被删除,另外一个同名的对象将要被添加,所有的操作发生在一个修订版本。

X item

目录没有版本化,但是与Subversion的外部定义关联。

? item

文件、目录或是符号链item不在版本控制之下,你可以通过使用svn status的–quiet(-q)参数或父目录的svn:ignore属性忽略这个问题。

! item

文件、目录或是符号链item在版本控制之下,但是已经丢失或者不完整,这可能因为使用非Subversion命令删除造成的,如果是一个目录,有可能是检出或是更新时的中断造成的,使用svn update可以重新从版本库获得文件或者目录,也可以使用svn revert file恢复原来的文件。

~ item 文件、目录或是符号链item在版本库已经存在,但你的工作拷贝中的是另一个。举一个例子,你删除了一个版本库的文件,新建了一个在原来的位置,而且整个过程中没有使用svn delete或是svn add。

I item

文件、目录或是符号链item不在版本控制下,Subversion已经配置好了会在svn add、svn import和svn status命令忽略这个文件,注意,这个符号只会在使用svn status的参数–no-ignore时才会出现—否则这个文件会被忽略且不会显示!


针对需要删除版本库中的文件,但是在本地又得保留副本,可以采用下面的命令

svn del –keep-local config.properties

这样,在 config.properties中的修改就不会提交到版本库中了,相当于把文件从”M”状态变为”?”状态

Search

    Table of Contents