我有一些包含bin文件的subversion repos(图像,流量跟踪转储等)。问题是这些文件上的几个提交导致了一个非常大的存储库。由于我们仅为历史目的保留回购,是否可以重置回购的历史?我基本上只是为了一个简单的替代方法来导出内容并重新创建回购。
答案 0 :(得分:4)
1 无法从Subversion存储库中删除历史记录。
使用Subversion或任何源代码控制系统的标准方法不是存储从您自己的源文件构建的文件。例如,如果我构建一个可执行文件,我应该将源存储在Subversion中,而不是可执行文件。
相反,将构建的工件存储在发布服务器上。这可能像Maven存储库一样复杂,或者只是远程计算机上的目录布局,您可以通过这种方式存储这些东西,以便任何需要这些构建工件的项目都可以轻松访问。这需要一些工作,但你不会得到膨胀的源代码库。
我的建议是首先重构您的构建过程以使用某种版本的存储库。您没有提到您的环境,但如果它是Java,请查看Maven存储库,如Artifactory或Nexus。您不需要使用Maven。如果您正在使用Ant,请查看Ivy,它与Ant完全集成。或者,只需使用<wget>
来获取所需的工件。
如果您处于C / C ++世界,可以使用ftp
,scp
,curl
,wget
或NFS
来获取和从发布存储库中复制所需的工件。
一旦获得发布存储库设置,请执行Subversion转储/过滤/加载以删除无关的二进制文件,并感谢您永远不必再次执行此操作。
1。好吧,没有简单方式。但是,您已经提到过您已知道钻取,转储,过滤,加载。
答案 1 :(得分:4)
根据Rob - Delete parts of subversion history,您要删除版本9000以下的所有内容(您的存储库现在版本为10000),因此您可以尝试此操作
svnadmin dump /path/to/current/repo -r9000:10000 > svn.dump
svnadmin create /path/to/new/repo
svnadmin load /path/to/new/repo < svn.dump
答案 2 :(得分:1)
Subdivision是一个图形工具,可以轻松地从svn存储库中永久删除文件。虽然它仍然需要一个可能很长的转储/过滤器/加载周期来创建输出,但它保证操作在一次通过中完成,并且您将获得预期的输出,这通常很难用svndumpfilter实现。
完全披露:我们是Subdivision的开发者
答案 3 :(得分:0)
不幸的是,没有非常简单的方法可以从Subversion存储库中完全删除数据。 Apache Subversion旨在永远不会丢失数据。
请参阅Apache Subversion常见问题解答:"How do I completely remove a file from the repository's history?"。
Apache Subversion(和其他版本控制系统)旨在保留所有历史记录。从回购历史中删除文件通常被认为是一项复杂的任务,并不是一件好事。这不是你可以轻松完成的任务。