我仍然对git的所有事情都很陌生,并且想知道配置文件的最佳做法是什么。我的本地开发服务器需要与我的实时服务器不同的配置值,所以如何阻止它推送/拉动这些文件?
答案 0 :(得分:39)
使用符号链接。
举个例子,你有一个名为“config.ini”的配置文件。在git repo的工作目录中,您将执行以下操作:
创建名为“config-sample.ini”的配置文件版本。这是您要完成所有工作的文件。
在“config.ini”和“config-sample.ini”之间创建一个符号链接。
ln -s config-sample.ini config.ini
即使您真的维护“config-sample.ini”,也可以将所有代码指向“config.ini”。
更新.gitignore以防止存储“config.ini”。也就是说,添加一个“config.ini”行:
echo "config.ini" >> .gitignore
(可选,但强烈推荐)使用“config.ini export-ignore”行创建.gitattributes文件。
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上可能有相应的解决方案,但其他人必须对此发表评论。)
答案 1 :(得分:7)
有多种选择:
将文件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或内核邮件列表上做的一些建议之一,但我今天无法找到它。
您可以使用环境变量将应用指向特定的配置文件。你可以像这样开始你的应用程序:
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
您可以将默认配置保留在主分支中。
为每个不同的环境分叉不同的分支。
每个分支都可以根据需要修改默认配置文件。
当您的主分支更新时,从主服务器合并到您的特定分支。
就个人而言,我不推荐这种方法。我认为维护起来比较困难。
答案 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 .
一起添加。缺点: