开开 发表于 2009-7-28 14:50

svn版本暗中偷换妙法

swordlea

版主

发贴: 652
积分: 0
来自: 论坛神游夜
注册日期: 2006-05-16
发表时间: 2006-12-26 09:53:05

--------------------------------------------------------------------------------
使用Subversion 管理代码和文档时,最苦恼的事情莫过去错误地Import了不该导入的东西,比较obj文件、ncb文件、bsc文件等,不仅浪费了Subversion数据库的空间(或者磁盘空间),也常常因为这些无用文件的微小变化使整个Project的版本信息发生变化。若是不留神把代码目录下的大量样本或者几个几百兆的AVI也Import了,那么,想象一下飞刀李每天下班后守夜备份源代码时痛苦表情吧……
最让人气愤的是,我们常用的tortoisesvn工具并未提供取消本次Import的功能,Update to revision也不会把误导入的东西从Subversion数据库中清除。这意味着,面对错误的Import,你有权保持沉默,你所讲的一切将会没人理睬。
不过,tortoise再狡猾也斗不过好程序员,经过昨夜雨疏风骤的一番尝试,终于发现了一个瞒天过海的办法,和兄弟们共享一下,看起来我们的后半生再也不必为错误的Import而丧心病狂地重建Subversion数据库了。
具体方法——
1.Subversion数据库目录结构为
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks
其中,db\revprops和db\revs分别保存各版本的增量变化和各版本的属性信息(如最后修改时间、作者等)。
2.假设该数据库存放在C:\SourceCode,且db\revprops和db\revs目录中文件列表分别为:
C:\SourceCode\db\revprops\0
C:\SourceCode\db\revprops\1
C:\SourceCode\db\revprops\2
C:\SourceCode\db\revprops\3
C:\SourceCode\db\revprops\4
C:\SourceCode\db\revprops\5
C:\SourceCode\db\revprops\6
C:\SourceCode\db\revprops\7
C:\SourceCode\db\revprops\8
C:\SourceCode\db\revprops\9
C:\SourceCode\db\revprops\10
C:\SourceCode\db\revprops\11
C:\SourceCode\db\revprops\12
C:\SourceCode\db\revprops\13
C:\SourceCode\db\revprops\14
C:\SourceCode\db\revprops\15
C:\SourceCode\db\revprops\16
C:\SourceCode\db\revprops\17
C:\SourceCode\db\revprops\18
C:\SourceCode\db\revprops\19
C:\SourceCode\db\revprops\20
C:\SourceCode\db\revprops\21
C:\SourceCode\db\revprops\22
C:\SourceCode\db\revprops\23
C:\SourceCode\db\revprops\24
C:\SourceCode\db\revprops\25
C:\SourceCode\db\revprops\26
C:\SourceCode\db\revprops\27
C:\SourceCode\db\revprops\28
C:\SourceCode\db\revprops\29
C:\SourceCode\db\revprops\30
C:\SourceCode\db\revprops\31

C:\SourceCode\db\revs\0
C:\SourceCode\db\revs\1
C:\SourceCode\db\revs\2
C:\SourceCode\db\revs\3
C:\SourceCode\db\revs\4
C:\SourceCode\db\revs\5
C:\SourceCode\db\revs\6
C:\SourceCode\db\revs\7
C:\SourceCode\db\revs\8
C:\SourceCode\db\revs\9
C:\SourceCode\db\revs\10
C:\SourceCode\db\revs\11
C:\SourceCode\db\revs\12
C:\SourceCode\db\revs\13
C:\SourceCode\db\revs\14
C:\SourceCode\db\revs\15
C:\SourceCode\db\revs\16
C:\SourceCode\db\revs\17
C:\SourceCode\db\revs\18
C:\SourceCode\db\revs\19
C:\SourceCode\db\revs\20
C:\SourceCode\db\revs\21
C:\SourceCode\db\revs\22
C:\SourceCode\db\revs\23
C:\SourceCode\db\revs\24
C:\SourceCode\db\revs\25
C:\SourceCode\db\revs\26
C:\SourceCode\db\revs\27
C:\SourceCode\db\revs\28
C:\SourceCode\db\revs\29
C:\SourceCode\db\revs\30
C:\SourceCode\db\revs\31

3.假设C:\SourceCode\db\current内容为
31 21r 2
这表明当前版本为第31版

4.假设最后一次导入(revision = 31)出现失误,希望回到前一个版本并放弃本次导入的全部内容,可以直接删除
C:\SourceCode\db\revs\31和C:\SourceCode\db\revprops\31两个文件,并使用UltraEdit-32打开C:\SourceCode\db\current文件(注意此时不要选择转换到DOS格式),将其中的31修改为30即可。

5.使用tortoisesvn工具提供的show log功能,就可以看到目前的最新版本已经是30了,那些不想要的文件也不见了。

祝好运!
<---- 以上言论仅代表本人立场 ---->



__________________
- Is life always this hard,or it just when you're a kid?
- Always like this.
页: [1]
查看完整版本: svn版本暗中偷换妙法