Git配置文件的最佳实践等

时间:2012-02-18 16:27:32

标签: git github config

我仍然对git的所有事情都很陌生,并且想知道配置文件的最佳做法是什么。我的本地开发服务器需要与我的实时服务器不同的配置值,所以如何阻止它推送/拉动这些文件?

5 个答案:

答案 0 :(得分:39)

使用符号链接。

举个例子,你有一个名为“config.ini”的配置文件。在git repo的工作目录中,您将执行以下操作:

  1. 创建名为“config-sample.ini”的配置文件版本。这是您要完成所有工作的文件。

  2. 在“config.ini”和“config-sample.ini”之间创建一个符号链接。

    ln -s config-sample.ini config.ini
    

    即使您真的维护“config-sample.ini”,也可以将所有代码指向“config.ini”。

  3. 更新.gitignore以防止存储“config.ini”。也就是说,添加一个“config.ini”行:

    echo "config.ini" >> .gitignore
    
  4. (可选,但强烈推荐)使用“config.ini export-ignore”行创建.gitattributes文件。

    echo "config.ini export-ignore" >> .gitattributes
    
  5. 做一些编码和部署....

  6. 将代码部署到生产环境后,将“config-sample.ini”文件复制到“config.ini”。您需要进行必要的调整才能进行生产设置。您只需在首次部署时以及每次更改配置文件的结构时都执行此操作。

  7. 这样做的一些好处:

    • 配置文件的结构保留在仓库中。

    • 可以为开发和生产之间相同的任何配置选项维护合理的默认值。

    • 每当您将新版本推向生产时,您的“config-sample.ini”都会更新。这样可以更轻松地发现您需要在“config.ini”文件中进行的任何更改。

    • 您永远不会覆盖“config.ini”的生产版本。 (带有.gitattributes文件的可选步骤4添加了额外的保证,即使您不小心将其添加到存储库中,也不会导出“config.ini”文件。)

    (这对我在Mac和Linux上很有用。我猜测在Windows上可能有相应的解决方案,但其他人必须对此发表评论。)

答案 1 :(得分:7)

有多种选择:

1。提交默认配置文件,但允许本地配置文件

将文件default.conf添加到您的Git存储库。

您的应用首先查找app.conf,但如果不存在,则会使用default.conf

想要非默认配置的用户可以将default.conf复制到app.conf,然后进行修改。

用户不应将app.conf提交到存储库,因为不同的用户可能需要该文件中的不同设置。 (所以你应该将app.conf放入.gitignore。)

扭曲(推荐)

您的应用始终加载default.conf,但如果app.conf存在,那么它将app.conf的{​​strong>复制设置超过default.conf的设置。< / p>

这种扭曲有几个优点:

  • app.conf只需保留与默认值的差异,使其更小,更易于维护。

  • 当应用更改时,添加到default.conf的新默认值将可供应用使用,用户无需将其复制到app.conf

  

此解决方案非常类似于Alan W. Smith的上述答案,但有一点不同:如果应用程序可以在没有app.conf文件的情况下启动,那么它将立即运行。但是,它确实为应用程序的启动代码增加了一些复杂性。

     

这个建议是Linus Torvalds在git或内核邮件列表上做的一些建议之一,但我今天无法找到它。

2。使用环境变量和/或命令行参数

您可以使用环境变量将应用指向特定的配置文件。你可以像这样开始你的应用程序:

CONFIG_FILE=test.conf ./start-app

或者:

./start-app --config=test.conf

这意味着您可以拥有多个配置文件development.confstaging.confproduction.conf。当您启动应用程序时,您可以告诉它使用哪个配置文件。

想要尝试不同配置的开发人员可以指向他们自己的文件,例如custom.conf

您还可以使用环境变量或命令行参数来覆盖特定设置:

./start-app --config=default.conf --db-url=... --debug-level=5

3。不同的分支

您可以将默认配置保留在主分支中。

为每个不同的环境分叉不同的分支。

每个分支都可以根据需要修改默认配置文件。

当您的主分支更新时,从主服务器合并到您的特定分支。

就个人而言,我不推荐这种方法。我认为维护起来比较困难。

答案 2 :(得分:5)

Git将忽略您未明确添加的文件,因此检查不同的分支只会将它们留在目录结构中的位置,因为其他文件会在它们周围发生变化。如果您将配置文件添加到repo根目录中的.gitignore文件中(可能需要创建它,更多信息here),那么您仍然可以执行所有文件命令,例如

git add .

如果你想,而不是担心它。

答案 3 :(得分:3)

最好的方法是创建一个名为“.gitignore”的文件,然后插入要忽略的文件/文件夹。

这样你就可以每次都进行git add *

答案 4 :(得分:0)

我总是使用另一个名称制作默认配置文件,例如rename_to_config.ini。程序尝试读取 config.ini 并在它不存在时返回错误。

优点:

  • 我可以将真正的 config.ini 保留在 .gitignore 中,并且不会与 git add . 一起添加。
  • 您可以确认用户必须考虑配置文件,以防它具有数据库信息等必填字段。

缺点:

  • 用户无法使用默认配置立即运行程序。
  • 可能不是一种非常标准的做事方式。