怎样才能把svn版本库中的某一个文件或目录永久的删除

如何彻底删除一个目录或者文件
[案例一]
例如:当前库的最新版本是46,我在第46个版本上,更加了一个5M的文件,名字为FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf
现在我要把这个新增加的5M文件彻底的删除,不想让它存在库中占用空间
(1)用svn log -v命令查看添加文件时的Path。或者使用tortoisesvn之类的客户端工具查看也可以
C:\myhouse\SCM_Home\SVN_HOME\localtest\docs\general>svn log -v "FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf"
------------------------------------------------------------------------
r46 | zhangjia | 2007-09-23 10:40:34 +0800 | 3 lines
Changed paths:
   A /docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf

FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf

delete for ever
------------------------------------------------------------------------
(2)结果得到添加的路径为/docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf
(3)把整个库先lock住,防止在此过程中有人继续修改
当然如果不lock也是可以了,只不过当你把所有的内容导入到新库中之后,还要用dumpfilter把旧库中
新增部分也导入到新库中。为了避免不必要的麻烦,所以我们需要lock
(4)导出旧库中的所有版本
svnadmin dump C:/myhouse/external/SVNRepos/svn > svns.dmp
(5)对导出的旧库中的文件做过滤,剔除我们不用的那个文件的PATH
type svns.dmp | svndumpfilter exclude "docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf" > filter.dmp
(6)重新创建一个新的库,版本最好和以前的相同。而且不要做任何的修改
svnadmin create C:/myhouse/external/SVNRepos/svndump
(7)把我们过滤后的那个导出文件,导入到新的库中
svnadmin load C:/myhouse/external/SVNRepos/svndump < filter.dmp
(8)检查新库中的文件和版本状态
[案例二]
当前库的最新版本是48,我在第46个版本上,更加了一个5M的文件,名字为FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf
现在我要把在第46个版本上新增加的5M文件彻底的删除,不想让它存在库中占用空间
(1)用svn log -v命令查看添加文件时的Path。或者使用tortoisesvn之类的客户端工具查看也可以
C:\myhouse\SCM_Home\SVN_HOME\localtest\docs\general>svn log -v "FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf"
------------------------------------------------------------------------
r46 | zhangjia | 2007-09-23 10:40:34 +0800 | 3 lines
Changed paths:
   A /docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf

FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf

delete for ever
------------------------------------------------------------------------
(2)结果得到添加的路径为/docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf
(3)把整个库先lock住,防止在此过程中有人继续修改
(4)导出旧库中的所有版本
svnadmin dump C:/myhouse/external/SVNRepos/svn > svns2.dmp
(5)对导出的旧库中的文件做过滤,剔除我们不用的那个文件的PATH
type svns2.dmp | svndumpfilter exclude "docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf" > filter2.dmp
(6)重新创建一个新的库,版本最好和以前的相同。而且不要做任何的修改
svnadmin create C:/myhouse/external/SVNRepos/svndump2
(7)把我们过滤后的那个导出文件,导入到新的库中

导入过程中出现提示:
...
<<< Started new transaction, based on original revision 46

------- Committed revision 46 >>>

<<< Started new transaction, based on original revision 47
     * editing path : src/build/build.xml ... done.

------- Committed revision 47 >>>

<<< Started new transaction, based on original revision 48
     * editing path : src/build/scmbuild.xml ... done.

------- Committed revision 48 >>>
显然46号版本已经保留了,但是我们要删除的那个文件也同样被删除了
(8)检查新库中的文件和版本状态
[案例三]
当前库的最新版本是60,我在第50个版本上,更加了一个5M的文件,名字为FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf;
同时修改了10个源代码文件;删除了2个源代码文件
现在我要把在第46个版本上新增加的5M文件彻底的删除,不想让它存在库中占用空间
考虑一下,如果按照我们案例中提供的方法是否能够做到保留历史,而删除物理文件?
并说明理由?
[总结]
删除文件确实能够通过我们上述的提供的方法解决,但是我们也看到如果当库中的版本很多,容量很大的时候
每次当我们导出和导入的时候,花费的时间比较长,而且使用的空间也比较大。我们建议,
所有的导入和导出以及过滤的操作尽量在同一块磁盘或者扇区上执行,这样速度比较快;当然你要保证你的
扇区的容量能够容纳原来仓库至少2倍(2~4倍)的大小((1)原始的库,(2)导出的dump,(3)导出的filter dump,(4)导入的库)
当然你也可以copy到别的扇区,磁盘或者机器上运行,只要保证环境一致就可以 

你可能感兴趣的:(C++,c,xml,SVN,C#)