Svn 清理Subversion存储库的最佳方法是什么?

Svn 清理Subversion存储库的最佳方法是什么?,svn,version-control,Svn,Version Control,我有一个不断增长的存储库,其中包含十几个左右的项目,我使用TortoiseSVN维护这些项目,因为我对这个项目完全陌生,还不知道细节。我必须保存存储库的空间有限,所以我想备份它,然后删除一些旧版本。例如,如果一个项目的版本是50,我只想保留50,49,48。没有办法按照您描述的方式在特定版本中剪切存储库。您可以做的是svn以所需的版本导出整个存储库,然后将其导入到新的存储库中,然后将修订后的提交从日志文件重放到新的存储库中。这不是小事 或者,如果您只想从存储库中排除一些杂乱的路径,并且您可以直接

我有一个不断增长的存储库,其中包含十几个左右的项目,我使用TortoiseSVN维护这些项目,因为我对这个项目完全陌生,还不知道细节。我必须保存存储库的空间有限,所以我想备份它,然后删除一些旧版本。例如,如果一个项目的版本是50,我只想保留50,49,48。

没有办法按照您描述的方式在特定版本中剪切存储库。您可以做的是svn以所需的版本导出整个存储库,然后将其导入到新的存储库中,然后将修订后的提交从日志文件重放到新的存储库中。这不是小事

或者,如果您只想从存储库中排除一些杂乱的路径,并且您可以直接访问存储库所在的文件系统,则可以使用svnadmin和svndumpfilter的组合来选择所需的路径并删除所有其他路径


请注意,您描述的内容或多或少与颠覆的观点背道而驰:它应该保留所有内容。如果您经常遇到问题,请考虑建立更好的签入实践。或者考虑使用,这使得这类实验实际上是免费的。

< P>删除旧的修订版会破坏版本控制的点,但是你可以把你要保留的修订结果扔掉,然后把它们放入新的回购中,删除旧的。
svnadmin dump /path/to/current/repo -r48:50 > svn.dump
svnadmin create /path/to/new/repo
svnadmin load /path/to/new/repo < svn.dump
或用于包含/排除所需的特定位等。svn常见问题解答中还有一些有用的信息。

我是否可以删除旧版本或存储库以释放存储空间

简短的回答是否定的。颠覆和CVS的工作方式是保持一个完整的变化历史,包括删除的文件、二进制文件等。每一次修改都依赖于最后一次修订,所以你不能仅仅在中间某个地方删改或者破坏你的存储库。如果空间不足,您可以做两件事:1删除模块,然后仅使用HEAD修订重新创建它,这将清除所有旧修订,但您将丢失提交历史记录。2更好的选择-升级到更高的计划:-。这对于Git来说不是什么问题,因为它对服务器端存储的需求要少得多

如何从存储库的历史记录中完全删除文件

在某些特殊情况下,您可能希望销毁文件或提交的所有证据。也许有人无意中犯下了一份机密文件。这并不是那么容易,因为Subversion被故意设计为永远不会丢失信息。修订是建立在彼此基础上的不变的树。从历史记录中删除修订将导致多米诺效应,在所有后续修订中造成混乱,并可能使所有工作副本无效

然而,该项目计划有一天实现一个svnadmin删除命令,该命令将完成永久删除信息的任务。见第516期

同时,您唯一的方法是svnadmin转储存储库,然后通过svndumpfilter将转储文件传输到svnadmin load命令中,排除错误路径。有关详细信息,请参阅Subversion手册的第5章

引自:


不。请将存储库移动到更大的空间。您真的应该像在beer at中一样阅读Subversion book free的版本控制,以便更好地理解版本控制的要点。这不是只会转储48到50版本的特定提交吗?我想他是在寻找存储库的状态,就像第48版一样,而不仅仅是那里的提交。这根本不是我认为OP想要的:它只从这些修订中获得提交。您无法在第48版获得存储库的状态,然后是将其提交到第50版所需的所有提交。John:您是如何运行它的?这对我来说很好。它完全转储指定的第一个版本,然后提交到指定的最后一个版本。只有指定-deltas开关,它才会转储提交。subversion中的svn copy分支在时间和空间上几乎都是免费的。从subversion 1.6开始,分支之间的补丁合并使用表示共享来避免数据重复。我不知道你所说的svn中的分支空间昂贵是指什么。一般来说,使用svn dumpfilter要比使用git filter分支和/或.git/info/grafts耗费大量人力。我对svn dumpfilter进行了大量修补,以支持更多类型的历史编辑,但它仍然不是一个好工具。@wcoenen:你说得对。我说得一点也不好@埃姆克:同意,这很糟糕。现在我主要使用Git。老实说,我只使用Subversion,因为我需要在家里和工作的各种机器上同步我的代码,这是一种通过U盘实现的好方法。我发现SVN是bi
但这并不烦人,因为它不强制签出和合并有时似乎有点可疑。。。。就像我忘记在一台机器上提交而在另一台机器上更改代码一样。对于我的简单需求,SourceSafe类型的功能很棒,但SS不是很稳定。