在git(或任何其他版本控制系统)中保存什么?

时间:2012-08-17 15:06:30

标签: git svn mercurial cvs dspace

我会把Drupal作为第一个问题的例子。我们有一个带有自定义主题和许多下载模块的drupal实例。我们有一台服务器用作源代码仓库。 然后,对drupal的dev实例的当前工作流程将更改迁移到test。一旦客户端测试出来,就像更改一样,将它们转移到生产中。 - 我应该将整个drupal dir放在git中吗?还是主题+插件?还是只是主题? 放置整个实例的一个优点是我可以轻松克隆prod上的更改,它看起来与dev和test相同。

第二个问题是我们对产品的核心代码进行本地定制(让我们以DSpace为例)。我们获得1.6版本并进行本地更改并将其保留在我们的仓库中。然后,当他们发布版本1.7时,我必须得到它并合并我的本地更改。我如何获得1.7?我可以进入分店吗?

这些情况下的最佳做法是什么。

感谢。

PS - 我知道git忽略以及如何在技术上做到这一点。我正在寻找的是关于最佳实践的建议。

1 个答案:

答案 0 :(得分:2)

按重要性排序:

  1. 将所有内容放入Git中,这是构建项目所必需的(即包括构建过程本身不会自行下载的所有依赖项)。
  2. 将所有内容放入Git以在开发人员计算机上运行项目
  3. 所有生成的文件(通常用于查找突然的错误 - a.k.a“但我没有改变任何东西!”)。这些都很好,但由于经常变化,可能会令人讨厌。
  4. 所有依赖项(因此您可以轻松地重新创建旧版本)
  5. 我通常不把生产版本放到Git中;相反,我有一个脚本,可以从项目中创建一个生产站点,还有一个上传脚本来部署这个站点。这样,我可以为新的生产版本提供本地运行。并且上传脚本有一个“备份旧文件”的步骤,所以我可以在几分钟内恢复旧的生产站点(好吧,除非一些错误损坏了数据库)。

    [编辑] 很多人不同意第3点和第4点。

    首先,(正如我上面所说),这是有序列表。所以前两点比其他两点重要得多。

    也就是说,版本生成的文件仍然很有意义。常见的情况是IDE项目设置和代码生成器的输出。

    为什么要在重新创建它们时如此简单?有几个原因:

    1. 硬盘空间便宜。如果这可以帮助您在一小时内找到一个错误,那就相当于大约100美元,大约是2TB的磁盘空间。
    2. IDE项目文件包含编译器设置和其他非常重要的配置。如果您不总是在版本控制下使用它们,则最终会出现这种情况:文件将位于DVCS的忽略列表中。你发现了一个问题(就像一个应该激活的重要警告)。您激活警告。 您忘记将更改的文件添加到版本控制中。

      或者:你是团队的一员。一个月后,团队中的每个人都使用不同的选项来构建他们的项目。构建中断是因为在IDE中将某些内容配置为警告但对其他人来说这是一个错误。

    3. 某些工具生成的代码肯定不应该版本化?是否足以对代码生成器的配置文件进行版本化?

      也许。问题是:您是否必须在此代码中找到错误?即使不是:当文件受版本控制时,很容易看出配置选项的变化意味着什么。您只需更改选项,运行代码生成器并让您的版本工具向您显示已更改的内容。当然,你可以手动做类似的事情,但为什么要浪费这么多精力去买一些可以免费获得的东西呢?

    4. 最重要的是,它会导致“虚假的合并冲突”。许多人认为这是一个问题,但事实并非如此。实际上,您会希望看到这些问题,因为这意味着您的构建不稳定:

      1. 您的VCS表示文件已更改,但不应该更改;这不是一个错误,这是一个福音。如果没有版本控制,这种变化无论如何都会发生,但你不会注意到它。最后一次无知是否比知识更好?
      2. 您在一个文件中反复出现合并冲突。这表明您的构建或项目设置需要一些爱。再次:解决合并冲突是一种痛苦。但是,每个开发人员在没有注意到的情况下获得他们自己的文件版本真的更好吗?