释放我的SVN仓库中的空间

我有一个最大的存储大小的免费增值站点上托pipe的SVN存储库。 当我接近这个容量时,我知道我检查过的文件,我知道我可以永久删除以释放磁盘空间。 我如何告诉SVN一个文件不仅可以被删除,但它的历史呢?

正如Hubert所说, svnadmin pack会将一个目录中的所有单个回购文件打包成一个大文件。 这会为你节省一些空间,但这只是推迟你的一天。 (它应该使历史操作更快,所以它是一个很好的build议)。 有一点需要注意的是,它只能在分片目录上工作(即新的目录结构是将1000个修订版放到一个目录中,然后启动一个新目录),它只打包旧的分片目录,而不是包含当前修订版的目录在里面。

所以,你唯一的select是从你的历史logging中删除旧版本。 这需要svnadmin转储和加载,可选的filter来删除您不再需要的回购目录。 (如旧的临时分支机构)。

转储很简单: svnadmin dump -r xxx:HEAD其中xxx是您要保留的最旧版本(即,这将转储最近的版本,因此您的古版本将被丢弃,如归档)。 您也可以通过转储来保留旧版本的存档( svnadmin dump -r 1:xxx

一旦你有你的转储文件,加载它就像运行svnadmin加载传递转储文件名称一样简单。 在加载新的repo之前删除旧的回购可能是一个好主意 – 如果您还没有它们,那么您将获得最新的服务器文件系统属性的好处。

如果你想保留所有的旧版本,但是要过滤掉某些目录,你需要通过svndumpfilter运行转储文件,这会删除指定的path。 请注意,您将需要转储而不使用 – 增量选项。

显然,testing所有的操作本地 – 转储到本地文件,然后加载到本地驱动器上的临时回购(它会更快),并testing历史和最新版本工作正常 – 我出口最新版本目录并使用winmerge检查文件是否与从live repo导出的最新版本相同。 如果你想成为偏执的人,也可以试着用一个历史性的修改。

从Subversion FAQ :

该项目计划…有一天实施一个svnadmin obliterate命令,将完成永久删除信息的任务。

同时,唯一的办法是使用svnadmin转储您的存储库,然后通过svndumpfilter(不包括坏path)将转储文件转储到svnadmin加载命令中。

你不能在不执行svnadmin dump; svndumpfilter; svnadmin load情况下从SVN仓库中删除一个文件svnadmin dump; svndumpfilter; svnadmin load svnadmin dump; svndumpfilter; svnadmin load svnadmin dump; svndumpfilter; svnadmin load舞蹈。 如果您使用的是FSFS,则可以减小存储库的大小,只需在repo目录上运行svnadmin pack

通常,在版本控制下从版本库中删除文件是一个坏主意。

我不知道我是否明白,但这是我的理解。 版本控制是关于独特的校验和。 如果删除了某些内容,则可能会重复使用这些校验和,从而导致冲突。 以这种方式缓解磁盘空间不足的问题根本不值得,更好地升级数据计划。