配置文件等的Git最佳实践

ih99xse1  于 2022-11-20  发布在  Git
关注(0)|答案(5)|浏览(155)

我对git还是个新手,我想知道关于配置文件的最佳实践是什么。我的本地开发服务器需要不同的配置值,我该如何阻止它推送/拉取这些文件呢?

eimct9ow

eimct9ow1#

使用符号链接。
举一个例子,你有一个名为“config.ini”的配置文件,在你的git存储库的工作目录中,你可以执行以下操作:
1.创建一个名为“config-sample.ini”的配置文件,您将在该文件上执行所有操作。
1.在“config.ini”和“config-sample.ini”之间创建一个符号链接。

ln -s config-sample.ini config.ini

这样,即使您实际上维护的是“config-sample.ini”,您的所有代码都指向“config.ini”。
1.更新您的.gitignore以防止存储“config.ini”。即,添加一个“config.ini”行:

echo "config.ini" >> .gitignore

1.(可选,但强烈建议)创建一个.gitattributes文件,其中包含“config.ini export-ignore”行。

echo "config.ini export-ignore" >> .gitattributes

1.进行一些编码和部署......
1.将代码部署到生产环境后,将“config-sample.ini”文件复制到“config.ini”。您需要对生产环境的设置进行必要的调整。您只需要在第一次部署时以及任何时候更改配置文件的结构时进行调整。
这样做的几个好处:

  • 配置文件的结构在存储库中维护。
  • 可以为开发和生产之间相同的任何配置选项维护合理的默认值。
  • 每当你将一个新的版本推向生产时,你的“config-sample.ini”就会更新。这使得你更容易发现你需要在你的“config.ini”文件中做的任何修改。
  • 你永远不会覆盖“config.ini”的生产版本(可选的步骤4和.gitattributes文件增加了一个额外的保证,即使你不小心把“config.ini”文件添加到了repo中,你也永远不会导出它)。

(This在Mac和Linux上运行很好,我猜在Windows上可能有相应的解决方案,但其他人将不得不对此发表评论。)

kmb7vmvb

kmb7vmvb2#

有多种选项可供选择:

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

将文件default.conf添加到Git存储库。
您的应用首先查找app.conf,但如果不存在,则使用default.conf
需要非默认配置的用户可以将default.conf复制到app.conf,然后进行编辑。
用户不应该将app.conf提交到存储库中,因为不同的用户可能希望在该文件中有不同的设置(因此您应该将app.conf放入您的.gitignore中)。

带扭曲(推荐)

您的应用始终加载default.conf,但如果存在app.conf,则它将复制app.conf中的设置,覆盖default.conf中的设置。
这种扭转有两个优点:

  • 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.不同的分支机构

您可以在master分支中保留默认配置。
为每个不同的环境划分不同的分支。
每个分支都可以根据需要修改默认配置文件。
当您的master分支更新时,从master合并到您的特定分支。
我个人并不推荐这种方式,我认为这种方式更难维护。

配置文件的标准位置

每个操作系统都有不同的配置文件推荐存储位置。

根据您的编程语言,您可能还可以找到一个库来帮助您完成此任务。(C, C++PythonR

  • 对于系统服务,配置将属于不同的位置。

例如,在Linux上:/etc/default/app_name/etc/app_name/something.conf

8e2ybdfx

8e2ybdfx3#

Git会忽略你没有显式添加的文件,所以 checkout 不同的分支只是让它们在目录结构中保持不变,因为其他文件会围绕它们变化。如果你将config文件添加到repo根目录下的.gitignore文件中(可能需要创建它,更多信息here),那么你仍然可以执行所有文件的命令,比如

git add .

如果你想的话,不用担心

svdrlsy4

svdrlsy44#

最好的方法是创建一个名为.gitignore的文件,然后插入要忽略的文件/文件夹。
这样你每次都可以做git add *

8ehkhllq

8ehkhllq5#

我总是用另一个名字来创建默认的配置文件,例如rename_to_config.ini。程序试图读取config.ini,如果它不存在,则返回一个错误。
优点:

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

缺点:

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

相关问题