从svn存储库中删除包含所有历史记录的文件

alt*_*ern 36 svn version-control repository

有没有办法从svn存储库中删除文件,包括其所有历史记录?当我想摆脱驻留在repo中的大型二进制文件时,会出现这个问题.

我知道在这种情况下只有一种方法可能会有所帮助:

  1. svnadmin实用程序的帮助下转储所有回购.
  2. 使用过滤器转储文件grep.Grep应该使用filename并写入另一个dump-file
  3. 导入最后一个转储文件 svnadmin

但这太复杂,不可靠.也许有另一种解决方案?

Joh*_*ell 33

这个命令最近变得更加直接svndumpfilter.详细信息可在此处的subversion文档中找到.基本上,为了避免冲突(这里解释),它需要一个repo转储并重做每次提交,包括或排除给定的文件前缀.基本语法:

svndumpfilter exclude yourfileprefix < yourdump > yournewdump
Run Code Online (Sandbox Code Playgroud)

排除可能是问题提供者正在寻找的内容,但您也可以使用include来提取repo的子树,以便将其作为自己的存储库进行分解.

颠覆(非常元)中最新的subversion版本也可以采用glob模式.我最近不得不从repo中删除所有pdf,它很容易就像这样:

svndumpfilter exclude --pattern '*.pdf' < dump > dump_nopdfs
Run Code Online (Sandbox Code Playgroud)

可以通过调用svndumpfilter help和找到更多使用信息svndumpfilter help exclude.

  • 好的,我试过了,过程看起来很像这样:`svnadmin dump path_to_repository> old.dump; svndumpfilter exclude file_prefix <old.dump> new.dump; rm -rf path_to_repository; svnadmin创建path_to_repository; svnadmin load path_to_repository <new.dump;`主要区别在于您必须删除存储库并在加载已过滤的转储之前重新创建它.另请注意,path_to_repository是服务器上存储库的路径,而不是工作副本的路径. (12认同)

sbi*_*sbi 6

但这太复杂,不可靠.

我不知道为什么这不应该被认为是可靠的.但是,如果你想彻底摆脱文件,历史和所有,无论这个文件是以前版本的影响是什么,只有一种方法这样做,这种方式确实很复杂.这是正确的.SVN是一个只有一个目标的工具:永远不会丢失任何文件,即使它已被删除.强迫它做其他事情应该很难.