您好我想通过指定最大大小来限制我的存储库的大小,但是我无法找到有关这样做的任何信息。这在技术上是否可行?
编辑:抱歉,如果我不清楚的话。我想保留一个功能存储库,我可以继续提交修补程序,但是至少有一个较新版本的最旧版本的文档可以自动删除以保持在sizelimit中。所以说我可以恢复67个版本,因为旧的版本已被删除(理想情况下保留提交消息)。
答案 0 :(得分:13)
执行此操作是对您的存储库进行的大手术。在真正的存储库中实现这一点之前,请确保您完全了解自己正在做的事情。
您将无法为单个文件执行所需操作,但您可以在整个存储库中执行此操作。您需要做的是切断存储库的历史尾部。
这意味着如果您的存储库中有5000个修订版,并且您切断了最早的1000个修订版,那么最终将获得一个仅包含最新版本4000的存储库。
执行此操作需要转储/恢复周期,这意味着您在处理和重建存储库时必须禁用对存储库的写访问权。
在浏览存储库时,您不会丢失任何仍然可见的文件,但任何特定文件的历史记录可能会完全丢失(如果对它的所有修改都在前1000次修订中)。显然,如果在早期版本之一中删除了某个文件,那么在剪切后你将无法完全恢复它。
另请注意,执行此操作的天真方式将重新编号从0开始的所有修订,因此在上面的示例中,修订版5000将在截断后变为修订版4000。如果这会给你带来麻烦,你就必须做额外的工作。
因此,假设我们想要丢失最早的1000个修订版,基本工作流程是:
svnadmin dump [repository path] -r 1000:HEAD > repository.dump
。这将创建一个dumpfile,它只包含1000以后的修订版。通过不使用--incremental
标志,dumpfile中的第一个修订版将包含存储库的完整转储,因为它查看了修订版1000(不包括所有历史记录)。svnadmin create
创建一个干净的存储库并复制conf&amp;挂钩旧存储库中的目录。svnadmin load [new repository path] < repository.dump
以加载最新版本。如果要保留修订号,则必须从某处加载空修订。您可以通过将修订版1:999转储到单独的转储文件中,然后使用svn dumpfilter从中删除所有内容,然后加载空修订版,然后加载所需的修订版。它有点繁琐,但会让你到那儿。
答案 1 :(得分:1)
在预提交挂钩中,如果存储库超出限制,您可以“中止”事务。
答案 2 :(得分:1)
没有简单的方法可以做到这一点。您真的需要重建存储库,删除最旧的修订版。没有单个SVN命令可以执行此操作。您需要的过程大致是:
这个link将为您提供有关svndumpfilter的一些信息,这是整个操作的关键部分。
重新思考:svndumpfilter可以控制要包含或排除的文件/路径,但我不确定它是否会对修订版进行细粒度的控制......
答案 3 :(得分:1)
由于SVN中的所有修订都是基于之前的差异,因此无法“清除”旧版本。如果您出于某种原因确实需要执行此操作,则必须经常进行导出并将其重新导入到新存储库中。
答案 4 :(得分:0)
答案 5 :(得分:0)