SVN是一个非常优秀的源代码管理工具,功能强大,支持HTTP协议访问,也是很多公司首选的源代码管理工具。

在使用过程中发现一个小问题没有什么好的解决方案,遂自己写了一个小程序辅助,感觉对大家都有用,遂拿出来分享。

我们知道SVN有一个指令叫做commit,即提交工作目录的修改,但麻烦的是,commit指令只能提交文件的修改,而不能自动提交目录结构(如新增和删除文件)的修改。要提交这些修改,我们需要先使用add或是delete指令标记这些修改,然后再使用commit。也就是类似于小乌龟(TortoiseSVN)的这个功能:

JAVA SVN 多文件提交_JAVA SVN 多文件提交

在小乌龟的提交界面中,我们可以简单的通过勾选“显示无版本控制的文件”和“全选”,然后提交的时候,就会自动add和delete多出来和丢失的文件。

但是小乌龟的命令行不支持静默提交(不显示提交对话框自动提交),这使得我们没办法自动化这个过程,例如每次编译成功后提交所有修改。那么这个SvnCommitHelper工具就是专门解决这个问题的。

 

原理:

SvnCommitHelper会首先调用svn的status指令,然后将指令的输出重定向到一个字符串。然后分析这个字符串,发现有?开头的(多出来的文件),便自动执行一个svn add指令。发现有!开头的(丢失的文件),便自动执行一个svn delete指令。最后,执行svn commit提交所有修改。

 

使用方法:

1、将SvnCommitHelper放在svn命令行客户端目录(即该目录里面一定要有svn.exe文件)。

2、将当前目录定位到你要提交的工作目录,如你要提交c:\Project\MyProject里面所有的文件,请先cd c:\Project\MyProject。

3、运行SvnCommitHelper,所有参数都将被视为提交的message。

如图所示:

JAVA SVN 多文件提交_c#_02

然后SvnCommitHelper便会自动完成提交工作。

 

由于是命令行的形式,所以你可以简单的写一段编译后脚本来实现每次编译后自动提交:

JAVA SVN 多文件提交_命令行_03

在生成的时候你能在输出窗口看到提交的信息:

JAVA SVN 多文件提交_c#_04

可以看到标记为?和!的文件都被自动的Add或是Delete了。

最后,再提供一个C#项目默认的svn的忽略列表:

bin
obj
*.pdb
*.dll
*.user
*.cache
*.FileListAbsolute.txt