10

假设我编写了一个 jQuery 插件并将其添加到我的存储库(在我的例子中是 Mercurial)。它是一个文件,比如说jquery.plugin.js. 我正在使用 BitBucket 来管理这个存储库,它的功能之一是下载页面。因此,我将其添加jquery.plugin.js为下载之一。

现在我想提供我的插件的缩小版本,但我不确定最佳实践是什么。我知道它应该在“下载”页面上可用jquery.plugin.min.js,但我是否应该在每次更新它以反映未缩小的版本时对其进行版本控制?

我看到的版本控制缩小版本最明显的问题是,每次对未缩小版本进行更改时,我可能会忘记更新它。

那么,我应该对缩小文件进行版本控制吗?

4

3 回答 3

9

不,您不需要将生成的最小化版本置于源代码控制之下。

由于 TFS 将本地文件设置为只读的方式,我们在将生成的文件添加到源代码控制 (TFS) 时遇到了问题。在构建过程中生成文件的工具会出现写访问问题(这可能不是其他版本控制系统的问题)。

但重要的是,所有:

  • 工具
  • 脚本
  • 源代码
  • 资源
  • 第三方库

构建、测试和部署产品所需的任何其他内容都应受版本控制。

您应该能够从源代码控制中检出特定版本(通过标签或修订号或等效项)并完全按照当时的状态重新创建软件。即使在“新”机器上。

构建不应依赖于不受源代码控制的任何内容。

脚本:构建脚本,无论是 ant、make、MSBuild 命令文件还是您正在使用的任何文件,以及您可能需要的任何部署脚本都需要处于版本控制之下——而不仅仅是在构建机器上。

工具:这意味着编译器、最小化器、测试框架——构建、测试和部署脚本工作所需的一切——应该在源代码控制之下。您需要这些工具的确切版本才能重新创建到某个时间点。

持续交付》这本书教会了我这一课——我强烈推荐它。

虽然我相信这是一个好主意 - 并尽可能坚持下去 - 但有些领域我不是 100% 确定的。例如操作系统、Java JDK 和持续集成工具(我们使用的是 Jenkins)。

你练习持续集成吗?这是测试您是否已控制上述所有内容的好方法。如果您必须在持续集成机器上进行任何手动安装才能构建软件,那么可能是出了点问题。

于 2012-06-01T20:12:01.080 回答
5

我的简单经验法则:

这可以在构建过程中自动生成吗?

  1. 如果是,那么它是资源,而不是源文件。不要检查它。
  2. 如果不是,那么它是一个源文件。检查它。
于 2012-06-01T20:16:53.597 回答
3

以下是我自己使用的 Repositories™ 的明智规则:

  1. 如果需要将 blob 作为源包的一部分进行分发,以便在源代码树中构建、使用或测试它,则它应该处于版本控制之下。
  2. 如果可以根据需要从版本化源重新生成资产,请改为这样做。如果你可以(GNU)制作它,(Ruby)rake 它,或者只是简单地伪造它,不要将它提交到你的存储库。
  3. 您可以使用版本化符号链接、维护脚本、子模块、外部定义等来区分差异,但结果通常不令人满意且容易出错。必要时使用它们,并尽可能避免使用它们。

这绝对是您的里程可能会有所不同的情况,但是三个明智的规则对我来说效果很好。

于 2012-06-01T18:13:38.330 回答