首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > CVS SVN >

见习笔记-脚本: SVN批量添加与删除

2012-08-15 
实习笔记----脚本: SVN批量添加与删除大家好,本文涉及到我在使用svn时遇到的一个实际问题:如何一次性完成

实习笔记----脚本: SVN批量添加与删除
大家好,本文涉及到我在使用svn时遇到的一个实际问题:如何一次性完成涉及多文件的命令。

一般来讲在svn版本控制下的文件操作如添加删除等需要使用svn add 和svn rm来执行以便使svn知道这些变动,但实际使用中往往版本文件夹就是Eclipse的项目文件夹,想删除添加文件直接在Eclipse里操作就好了何必跳转到命令行?【话说eclipse里好像有相关的功能但是我还没仔细看暂时忽略。。。】

直接在Eclipse里进行操作的后果就是在使用svn提交时,在svn st 命令的列表中,所有新加入的文件前面会有‘?’,而删除的文件前会有‘1’,我们需要把有‘?’的行使用svn add添加进版本控制,对?的行使用 svn rm;问题是如何进行这一批量操作呢?

通过“svn st | grep ?”命令可以得到需要添加的文件列表,但每行都以‘?’开头所以无法直接通过xargs传给svn add。 那么问题转换为如何才能把那些?过滤掉呢?
例:
得到的文件列表:
d:\PROJET\repo\trunk>svn st | grep ?
? main.xml
? logo.png
? bin
? gen
? add.png
希望最终执行的命令:svn add main.xml logo.png bin gen add.png

要注意使用svn add -A 并不是一个好方法;对于我这个新手来讲解决方案不是太明显,但是经过研究和发帖求助还是找到了答案;

svn st | grep ? | sed "s/?//" |xargs svn add

svn st | awk '{if($1 == "?"){print $2}}'|xargs svn add

第一种方案使用sed 把?替换为空然后传过去就好了,第二种使用了awk命令;这两个命令在进行字符串的替换等处理时是非常常用的,有了他们思路就比较完整了;建议和我一样的新手们好好研究一下sed以及正则表达式,很组合成很强大的脚本哦;)


下一篇文章就给大家分享我写的文件夹备份脚本,下次见喽


热点排行