我有一些包含 bin 文件(图像、流量跟踪转储等)的颠覆存储库。问题是对这些文件的多次提交导致了一个相当大的存储库。由于我们仅出于历史目的保留 repo,是否可以重置 repo 的历史记录?我基本上是在寻找一个简单的替代方法来导出内容并重新创建 repo。
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
没有办法1从 Subversion 存储库中删除历史记录。
使用 Subversion 或任何源代码控制系统的标准方法是不存储从您自己的源文件构建的文件。例如,如果我构建一个可执行文件,我应该将源代码存储在 Subversion 中,而不是可执行文件。
相反,将构建的工件存储在发布服务器上。这可以像 Maven 存储库一样复杂,或者只是远程计算机上的目录布局,您可以在其中存储这些内容,任何需要这些构建工件的项目都可以轻松访问它。这需要一些工作,但您最终不会得到臃肿的源存储库。
我的建议是首先重组您的构建过程以使用某种发布存储库。您没有提及您的环境,但如果是 Java,请查看 Maven 存储库,例如Artifactory或Nexus。你不需要使用 Maven。如果您使用 Ant,请查看与 Ant 很好地集成的Ivy 。或者,仅用于<wget>
获取您需要的工件。
如果您在 C/C++ 世界中,您可以使用ftp
、scp
、curl
、wget
或NFS
从您的发布存储库中获取和复制所需的工件。
一旦你获得了发布存储库设置,执行 Subversion 转储/过滤/加载以删除无关的二进制文件,并且感谢你永远不必再这样做。
1.好,不容易。但是,您已经提到您知道钻取、转储、过滤、加载。
Subdivision是一个图形工具,可以很容易地从 svn 存储库中永久删除文件。虽然它仍然需要一个可能很长的转储/过滤/加载周期来创建输出,但它保证了操作一次完成并且您将获得预期的输出,这通常很难通过 svndumpfilter 实现。
全面披露:我们是细分的开发商
不幸的是,没有真正简单的方法可以从 Subversion 存储库中完全删除数据。Apache Subversion 旨在永不丢失数据。
请参阅 Apache Subversion 常见问题解答:“如何从存储库的历史记录中完全删除文件?” .
Apache Subversion(和其他版本控制系统)旨在保留所有历史记录。从回购历史中删除文件通常被认为是一项复杂的任务,并不是一件好事。这不是您可以轻松完成的任务。