【问题标题】:Version control of deliverables可交付成果的版本控制
【发布时间】:2008-09-12 08:43:54
【问题描述】:

我们需要在多个不同位置的许多开发人员之间定期同步数十个二进制文件(项目可执行文件和 DLL),以便每个开发人员都有一个最新的环境来构建和测试。由于项目的性质,必须经常和按需进行更新(隔夜更新是不够的)。这不漂亮,但我们坚持了一段时间。

我们决定使用常规版本(源代码)控制系统:将所有内容作为二进制文件放入其中,在测试前获取最新版本并在测试后签入更新的 DLL。

它工作正常,但是版本控制客户端有很多对我们没有意义的功能,人们有时会感到困惑。

有没有更适合这项任务的工具?或者可能是完全不同的方法?

更新:

我需要澄清一下,它不是一个紧密集成的项目——更像是具有大量“插件”的可扩展系统,包括第三方插件。我们需要确保这些模块插件能够很好地与彼此的最新版本和核心一起工作。最初考虑了建议的集中构建,但这不是一个选项。

【问题讨论】:

  • 我认为您对我的更新评论似乎仍然可以使用某种构建过程来完成,这些构建过程可能会引入那些外部二进制文件并对其运行一组测试等。我想我一直在你以前的情况,在你把东西落实到位之前很难看到 CI 工作。
  • 我们有这样的东西用于最终测试,但这并不能避免开发人员需要拥有最新的库。无论如何,我理解指出错误过程的冲动,但问题涉及版本控制和分发二进制文件的工具和技术。
  • 这个问题听起来非常像我们目前在我公司使用的问题。我们甚至有可能在同一家公司工作。感谢您提出这个问题。

标签: version-control deployment


【解决方案1】:

我可能会看看 rsync。

只需创建一个 .CMD 文件,其中包含对 rsync 的调用以及所有正确的参数,然后让人们调用它。 rsync 在决定需要传输文件的哪一部分时非常聪明,因此即使涉及大文件也会非常快。

虽然 rsync 不做的是解决冲突(甚至检测),但在您描述的场景中,它更像是从 rsync 旨在处理的中心位置读取。

【讨论】:

  • 谢谢,这是一个可能的解决方案。但我更喜欢我们现在拥有的东西。实际上,我们的版本控制 (SourceGear) 在大型二进制项目中的表现给我留下了深刻的印象。
【解决方案2】:

另一个选项是unison

【讨论】:

  • 看起来,我们试试看。
【解决方案3】:

您应该研究持续集成并采用某种集中式构建过程。我只能想象你目前的方法正在经历的那种地狱。

显然这对保持本地文件同步无济于事,但我认为您的流程存在更大的问题。

【讨论】:

  • 这个过程很糟糕,同意,但它有重要的遗产和实际原因。完全集中是不可能的 - 基本上,你不想用一些脆弱的接口插件来构建你的核心。
【解决方案4】:

构建项目应该是一个集中的过程,以便尽快进行更好的控制,从长远来看,您的解决方案将是 caos。无论如何,这就是我要做的。

  • 为 源文件、资源、 每个项目的文档等。
  • 为资源创建一个存储库。 会有最新的二进制 每个项目的版本以及 任何所需的资源、文件等。 保持良好的文件夹结构 每个项目,以便开发人员可以 直接“引用”文件。
  • 为最终构建创建存储库 这将保持实际稳定 释放。这将获得稳定的 文件,以自动方式完成(如果 可能)从签到 来源。这将举行真正的 产品,真实版本 集成测试等。

虽然远非完美,但您将能够定义完善的协议。在此处签入您的最新 dll,在此处从最新源生成“真实”版本。

【讨论】:

  • 我编辑了问题以解释为什么它不是集中式的 - 否则您所描述的正是我们现在所做的。不过,我们对源代码控制工具处理二进制文件和部署场景的方式并不满意。
【解决方案5】:

如何在可执行文件和库中嵌入“what”字符串。然后,您可以将所需的版本列表与清单同步。

我们倾向于使用 CVS id 字符串作为 what 字符串的一部分。

const char cvsid[] = "@(#)INETOPS_filter_ip_$Revision: 1.9 $";

输入命令

what filter_ip | grep INETOPS

返回

INETOPS_filter_ip_$Revision: 1.9 $

我们对所有可交付成果执行此操作,以便查看库和可执行文件包中的版本是否与关联清单中的列表匹配。

HTH。

干杯,

罗伯

【讨论】:

    【解决方案6】:

    Subversion 可以很好地处理二进制文件,速度非常快,并且可以编写脚本。 VisualSVNTortoiseSVN 也让处理 Subversion 变得非常容易。

    你可以设置一个从 Subversion 签出的文件夹,其中包含所有二进制文件(所有开发人员都可以推送和更新),然后只需在命令行中键入“svn update”,或使用 TortoiseSVN:右键单击该文件夹,点击“SVN更新”,它会更新所有文件并告诉你发生了什么变化。

    【讨论】:

    • 这就是我们现在所做的(使用不同的版本控制系统,但在这方面它比 SVN 更好),如问题所述。
    猜你喜欢
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    相关资源
    最近更新 更多