Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2313991
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2008-01-11 10:11:02

标题有点误导, CVS的提交不是原子性的, 也没有事务的概念, 如果半中间失败, 就可能出现仅有部分文件被提交成功的情况.

本意是说, 在软件的开发维护中, 经常要提交的内容是分散在多个目录中的文件, 我自己的使用体验表明Tortoise CVS远胜于WinCVS, 比如对于提交, WinCVS中你不得不自己先知道哪些文件是你自CVS上更新后做过修改, 然后分别到这些目录下去一一check in, 而在Tortoise CVS中, 只需要选中整个项目的顶层目录, 鼠标右键选择"CVS Commit..."菜单项, 它会自动递归地检查整个目录树中哪些文件需要check in, 然后只把修改过的有待提交的文件列出来.

回到正题, 关于分散在各个目录中的文件的提交, 从语义上来说, 这往往意味着程序员的一个工作单位, 这些文件的修改在整体上代表着一个新特性, 一个bugfix, 或是至此到达了一个milestone. 我经常希望的一个做法是对一次提交中的所有文件做一个tag, 简单标明这次提交作为整体上主要解决的问题. 这对于日后的跟踪是有用的. 可以方便地通过tag定位到一次修改所涉及的各个文件.

Tortoise CVS并没有在Commit的会话中提供同时做tag的功能, 如果有就太完美了. 我也就不需要在这啰嗦了, 不过它可以把选中的待提交文件名copy出来, 下面的截屏说明了利用这一功能可以相对方便地对这些文件做tag:

这里是在待提交文件中做进一步的人工过滤, 去掉那些并不真正要提交的文件, 打勾的是最终真正要提交的文件, 左键菜单中高亮的一项即是把文件名(连同相对路径名)复制出来, 如下:

上面的是vim的窗口, 1-3行是copy出来的原始内容, 注意它是以\分隔路径的. 由于我经常用cygwin/bash下, 所以需要把\转换成/, 而CVS命令行当然对/也可以良好的识别.

第5-7行是用
:%s#\\#/#g
命令把1-3行的\\转换成/后的结果.

最后是把这3行合并成一行, 并且 CTRL-C到剪贴板里.
:%j
上面这命令是假设有个空白的vim缓冲区里面全是一行一个文件, 不是上面为演示故意把替换后的结果放在同一个缓冲区中.

放到剪贴板之后就可以把所有的文件名 粘贴到命令行上做成同一个tag了.
阅读(1525) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~