我对git方面的一切仍然很陌生,想知道有关配置文件的最佳实践是什么。我的本地开发服务器需要不同的配置值与我的线上服务器不同,那我该如何阻止它推送/拉取这些文件呢?
ln -s config-sample.ini config.ini
即使你实际上在维护 "config-sample.ini" 文件,使用这种方法可以让你所有的代码都指向 "config.ini"。
更新你的 .gitignore 文件以防止存储 "config.ini"。也就是说,添加一个 "config.ini" 行:
echo "config.ini" >> .gitignore
(可选,但强烈建议)创建一个.gitattributes文件,并在其中添加一行"config.ini export-ignore"。
echo "config.ini export-ignore" >> .gitattributes
进行一些编码和部署......
将代码部署到生产环境后,将“config-sample.ini”文件复制到“config.ini”。您需要进行必要的调整以设置生产环境。您只需要在第一次部署时执行此操作,并且每当更改配置文件的结构时都需要执行此操作。
一些好处:
你的配置文件结构会在版本库中得到维护。
可以为任何在开发和生产环境之间相同的配置选项设置合理的默认值。
每当您推送新版本至生产环境时,“config-sample.ini”将更新。这样更容易发现您需要在“config.ini”文件中进行的更改。
您永远不会覆盖生产版本的“config.ini”。(.gitattributes文件的可选步骤4会增加一个额外的保证,即即使您意外添加它到版本库中,也永远不会导出“config.ini”文件。)
(此方法在我的Mac和Linux上运行良好。我猜在Windows上可能有相应的解决方案,但其他人需要发表评论。)
有多种选择:
将文件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或内核邮件列表上提出的几个建议之一,但我今天找不到它了。
您可以使用环境变量来指向应用程序特定的配置文件。您可以像这样启动应用程序:
CONFIG_FILE=test.conf ./start-app
或者,另一种选择是:
./start-app --config=test.conf
这意味着您可以拥有多个配置文件,例如development.conf
、staging.conf
和production.conf
。当您启动应用程序时,告诉它使用哪个配置文件。希望尝试不同配置的开发人员可以指向他们自己的文件,例如custom.conf
。
您还可以使用环境变量或命令行参数来覆盖特定的设置:
./start-app --config=default.conf --db-url=... --debug-level=5
您可以在主分支中保留默认配置。
为每个不同的环境分叉出不同的分支。
每个分支可以根据需要修改默认配置文件。
当主分支更新时,从主分支合并到您的特定分支。
个人而言,我不推荐这种方法。 我认为这样更难维护。
每个操作系统都有不同的推荐存储配置文件的位置。
git add .
如果您想要做到这一点而不必担心它。
.gitignore
的文件,并插入想要忽略的文件/文件夹。 git add *
命令。我一直将默认配置文件命名为另一个名称,例如rename_to_config.ini
。程序尝试读取config.ini
,如果不存在则返回错误。
优点:
config.ini
保留在.gitignore
中,并且不会随git add .
添加。缺点: