【问题标题】:Conditional Mercurial Ignore File有条件的 Mercurial 忽略文件
【发布时间】:2010-12-21 17:26:58
【问题描述】:

我有一个 mercurial 文件,我希望开发机器提取该文件,但我希望部署服务器不提取该文件(它具有开发机器没有的特殊模块)。这可能吗,还是我应该只使用自定义推送到服务器解决方案而不是只进行 hg 拉取?

【问题讨论】:

    标签: deployment mercurial hgignore


    【解决方案1】:

    执行此操作的典型方法是执行以下操作:

    您将每个文件的副本存储在存储库中,并正确命名它们。例如,如果有问题的文件是web.config,您将在存储库中存储以下两个:

    • web.server.config
    • web.dev.config

    然后您将添加一个构建步骤以确保将正确的文件复制到实际的 web.config 文件中,您可以使用批处理文件:

    if "%COMPUTERNAME%" == "SERVER" copy web.server.config web.config
    if not "%COMPUTERNAME%" == "SERVER" copy web.dev.config web.config
    

    然后你会通过 .hgignore 忽略 web.config 本身:

    glob:web.config
    

    【讨论】:

      【解决方案2】:

      我一直使用的 Karlsen 答案的变体。

      我在项目中有/config/etc 目录。该目录通常包含示例配置,例如:

      • dev.yaml
      • ci_server.yaml

      然后我的应用程序从 /etc/app.yaml 中提取,这是一个指向正确配置的符号链接,具体取决于它正在运行的主机。

      这样做的最佳想法是您没有变体代码路径(批处理脚本分支),这消除了潜在的错误向量。这允许您使用将在生产中使用的相同代码路径(直至查找覆盖文件的位置)。

      【讨论】:

        【解决方案3】:

        这是可以在版本控制之外解决的问题吗?例如,将文件包含在存储库的所有副本中,但启用或禁用它与环境变量或类似的东西的使用。这听起来不像大多数版本控制系统都是为了处理而构建的,除非你在更新后使用讨厌的黑客来执行诸如添加/删除/修补文件之类的事情。

        【讨论】:

        • 我同意,但是这个文件在服务器和开发机器上都是必需的。它是一个设置文件,其中包含指向 web urls/db 连接字符串/等的路径,这些值在服务器上与开发机器上的不同。
        【解决方案4】:

        一种选择是为部署服务器创建一个特殊的hgignore 文件,该文件可能包含在存储库中,也可能不包含在存储库中。然后在服务器的hgrc 文件中使用ignore 变量指定特殊hgignore 文件的路径。

        这将确保部署服务器忽略对文件的更新,但仍可以照常更新开发机器。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-02
          • 1970-01-01
          • 2011-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多