我对git还是个新手,我想知道关于配置文件的最佳实践是什么。我的本地开发服务器需要不同的配置值,我该如何阻止它推送/拉取这些文件呢?
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”。您需要对生产环境的设置进行必要的调整。您只需要在第一次部署时以及任何时候更改配置文件的结构时进行调整。这样做的几个好处:
(This在Mac和Linux上运行很好,我猜在Windows上可能有相应的解决方案,但其他人将不得不对此发表评论。)
kmb7vmvb2#
有多种选项可供选择:
将文件default.conf添加到Git存储库。您的应用首先查找app.conf,但如果不存在,则使用default.conf。需要非默认配置的用户可以将default.conf复制到app.conf,然后进行编辑。用户不应该将app.conf提交到存储库中,因为不同的用户可能希望在该文件中有不同的设置(因此您应该将app.conf放入您的.gitignore中)。
default.conf
app.conf
.gitignore
您的应用始终加载default.conf,但如果存在app.conf,则它将复制app.conf中的设置,覆盖default.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。还可以使用环境变量或命令行参数来覆盖特定设置:
development.conf
staging.conf
production.conf
custom.conf
./start-app --config=default.conf --db-url=... --debug-level=5
您可以在master分支中保留默认配置。为每个不同的环境划分不同的分支。每个分支都可以根据需要修改默认配置文件。当您的master分支更新时,从master合并到您的特定分支。我个人并不推荐这种方式,我认为这种方式更难维护。
每个操作系统都有不同的配置文件推荐存储位置。
根据您的编程语言,您可能还可以找到一个库来帮助您完成此任务。(C, C++,Python,R)
例如,在Linux上:/etc/default/app_name或/etc/app_name/something.conf
/etc/default/app_name
/etc/app_name/something.conf
8e2ybdfx3#
Git会忽略你没有显式添加的文件,所以 checkout 不同的分支只是让它们在目录结构中保持不变,因为其他文件会围绕它们变化。如果你将config文件添加到repo根目录下的.gitignore文件中(可能需要创建它,更多信息here),那么你仍然可以执行所有文件的命令,比如
git add .
如果你想的话,不用担心
svdrlsy44#
最好的方法是创建一个名为.gitignore的文件,然后插入要忽略的文件/文件夹。这样你每次都可以做git add *
git add *
8ehkhllq5#
我总是用另一个名字来创建默认的配置文件,例如rename_to_config.ini。程序试图读取config.ini,如果它不存在,则返回一个错误。优点:
rename_to_config.ini
config.ini
缺点:
5条答案
按热度按时间eimct9ow1#
使用符号链接。
举一个例子,你有一个名为“config.ini”的配置文件,在你的git存储库的工作目录中,你可以执行以下操作:
1.创建一个名为“config-sample.ini”的配置文件,您将在该文件上执行所有操作。
1.在“config.ini”和“config-sample.ini”之间创建一个符号链接。
这样,即使您实际上维护的是“config-sample.ini”,您的所有代码都指向“config.ini”。
1.更新您的.gitignore以防止存储“config.ini”。即,添加一个“config.ini”行:
1.(可选,但强烈建议)创建一个.gitattributes文件,其中包含“config.ini export-ignore”行。
1.进行一些编码和部署......
1.将代码部署到生产环境后,将“config-sample.ini”文件复制到“config.ini”。您需要对生产环境的设置进行必要的调整。您只需要在第一次部署时以及任何时候更改配置文件的结构时进行调整。
这样做的几个好处:
(This在Mac和Linux上运行很好,我猜在Windows上可能有相应的解决方案,但其他人将不得不对此发表评论。)
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.使用环境变量和/或命令行参数
您可以使用环境变量将应用指向特定的配置文件。您可以如下启动应用:
或者可替换地:
这意味着你可以有多个配置文件
development.conf
,staging.conf
和production.conf
。当你启动应用程序时,你告诉它要使用哪个配置文件。想要尝试不同配置的开发人员可以指向他们自己的文件,例如
custom.conf
。还可以使用环境变量或命令行参数来覆盖特定设置:
3.不同的分支机构
您可以在master分支中保留默认配置。
为每个不同的环境划分不同的分支。
每个分支都可以根据需要修改默认配置文件。
当您的master分支更新时,从master合并到您的特定分支。
我个人并不推荐这种方式,我认为这种方式更难维护。
配置文件的标准位置
每个操作系统都有不同的配置文件推荐存储位置。
根据您的编程语言,您可能还可以找到一个库来帮助您完成此任务。(C, C++,Python,R)
例如,在Linux上:
/etc/default/app_name
或/etc/app_name/something.conf
8e2ybdfx3#
Git会忽略你没有显式添加的文件,所以 checkout 不同的分支只是让它们在目录结构中保持不变,因为其他文件会围绕它们变化。如果你将config文件添加到repo根目录下的.gitignore文件中(可能需要创建它,更多信息here),那么你仍然可以执行所有文件的命令,比如
如果你想的话,不用担心
svdrlsy44#
最好的方法是创建一个名为
.gitignore
的文件,然后插入要忽略的文件/文件夹。这样你每次都可以做
git add *
8ehkhllq5#
我总是用另一个名字来创建默认的配置文件,例如
rename_to_config.ini
。程序试图读取config.ini
,如果它不存在,则返回一个错误。优点:
config.ini
保留在.gitignore
中,它不会与git add .
相加。缺点: