svn 存储库因构建而失控
Posted
技术标签:
【中文标题】svn 存储库因构建而失控【英文标题】:svn repository growing out of control because of builds 【发布时间】:2012-12-04 08:52:12 【问题描述】:我的存储库大小有问题,我的存储库变得失控,因为我们的项目组有一次决定将我们的构建也保留在 svn 中,每个二进制文件大约 30 MB,存储库的每日备份需要 4数百人签入后 -5 GB。备份存储库并将其复制到每天备份的网络位置变得非常困难。
对每个构建进行备份的最佳做法是什么?
我可以创建一个 svn 提交触发器,将构建压缩并复制到某个地方,而不是把它放到 svn 中吗?
如何缩小我的回购规模?
我可以用 svn 命令摆脱一些旧的二进制文件吗?
【问题讨论】:
您的项目组在决定将构建存储在版本控制存储库中之前应该三思而后行。 在对构建中使用的源代码进行版本控制时,为什么需要对构建工件进行版本控制?这真的没有多大意义。最佳实践(如果可以说存在的话)不是版本控制构建工件。 其实我是反对的,在做出决定时无法说服他们,但我必须想办法清理这个烂摊子。我想我们可以重新开始,然后我们将丢失提交历史等。 我们使用 TeamCity 等产品进行持续集成,效果非常好。它将最后五个构建(可配置)存储在一个存档中,易于检索。 svndumfilter 可能值得一试 【参考方案1】:对每个构建进行备份的最佳做法是什么?
不要这样做。 SVN(和所有/大多数其他版本控制系统(VCS))旨在通过使用/存储差异来有效地存储文本文档(源代码)。这不适用于二进制文件。
我可以创建一个 svn 提交触发器,将构建压缩并复制到某个地方,而不是把它放到 svn 中吗?
可能,但这是一个重大的 hack,(可能)需要在每台具有存储库结帐的计算机上完成。 如果您想在签出存储库时再次检索这些 zip,那就更麻烦了。
如何缩小我的回购规模?
我可以用 svn 命令摆脱一些旧的二进制文件吗?
一旦您向 SVN(以及大多数其他 VCS)提交了某些内容,它就会保留下来,您就无法修改历史记录。 也就是说,您可以创建一个新的存储库,可以将所有更改复制到它(有一些工具可以用来保存提交消息)。也许可以重新提交所有内容(没有构建)并从那时起使用该存储库。 (确保所有项目合作伙伴签出新的存储库以防止出现问题)
如您所见,将所有派生文件(构建)存储在 VCS 中并不是一件好事。为了重现性,您可以存储构建信息,例如所用工具的版本号。因此,如果需要,始终可以重新构建特定的构建。
使用仅包含最新版本的共享位置,以便所有项目合作伙伴都能看到/尝试这个最新版本。
但是,不要再将它存储在 VCS 中了!
【讨论】:
非常感谢您的精彩解释,我会在过滤提交的构建时尝试将 repo 复制到新的。如果我做不到,我将使用最新版本的 repo 并创建一个新的 repo,这一次我将确保不会提交构建 请注意有 Artefact Repositories,例如Sonartype Nexus,如果你碰巧使用 Maven 或 Ivy。【参考方案2】:对每个构建进行备份的最佳做法是什么?
为每项任务使用正确的工具。 源代码管理 可以管理构建的工件,但是 - 效果很差。为这项工作使用工件管理器
我可以创建一个 svn 提交触发器,将构建压缩并复制到某个地方,而不是把它放到 svn 中吗?
是的,理论上在钩子中你可以做任何事情(构建、归档、部署),但是(再次)特殊工具可以为最终用户更轻松、更顺利地完成它(阅读“Jenkins”, “马文”)
如何缩小我的回购规模?
创建转储,杀死转储中不需要的修订,恢复完善的转储
我可以用 svn 命令摆脱一些旧的二进制文件吗?
你不能用客户端工具来做,只能用 svnadmin-|dumpfilter-hacking dump
【讨论】:
以上是关于svn 存储库因构建而失控的主要内容,如果未能解决你的问题,请参考以下文章