如何协作时管理配置文件?

问题描述 投票:53回答:6

我在页面的顶部写几个简单的变量很短的脚本。我想与朋友对他们的工作,但我们不知道如何管理变量需要每次都牵引着我们中的一个之后被改变,增加不必要的垃圾到git的状态。我想过只为我们每个人创造不同的命名的分支,然后主就只能例如用户名设置,但似乎傻必须尽一切额外的工作合并。我们可以有传递到脚本选项中的变量,但不希望,也不是出分离到另一个单独的配置文件。这将是巨大的,有一些像的.gitignore但仅在忽略文件中的几行。

这又如何优雅地管理?如何这个问题通常是管理?

git configuration-files gitignore
6个回答
61
投票

你不能轻易忽略更改文件的特定行,我很害怕,所以你可能坚持使用具有独立的配置文件。下面我列出处理此的两种典型的方式,和一个稍微更奇特的一个:

Have a sample configuration file in git

在这里,你会保持一个文件config.sample在混帐作为一个例子,但应用程序实际上在一个文件config这是.gitignore使用的值。然后,应用程序将除非config存在产生错误。你要记住,当你添加新的配置变量,以您的个人config文件,以改变在样本文件中的值。在这种情况下,它也让你的应用程序检查所有必需的配置变量实际设置,万一有人已经忘记了更改后的样本来更新他们的config文件是一个好主意。

Have a file of default values in git

您保持git的文件config.defaults,其尽可能具有合理的默认配置值。从config.defaults然后从config(这是在.gitignore)应用程序第一次源配置以可能地覆盖任何的缺省值。使用这种方法,通常你不会让一个错误config不存在,因此应用程序可以工作开箱即用的谁没有费心去创造config人。

Using a single configuration file with --assume-unchanged

第三种可能性,我不会在这种情况下推荐,个人,将有它在的git犯了一个配置文件,而是利用git update-index --assume-unchanged <FILE>,告诉混帐忽略更改。 (这在this useful blog post进一步描述。)这意味着你对配置文件的本地更改不会git commit -a承诺或git status出现。


5
投票

的Python / Django的特定的解决方案是具有被检入到存储库的共享settings.py文件,以及在本地settings_local.pysettings.py的端部导入的,它覆盖了与机器特定值的设置。


4
投票

就我而言,我有一个单独的(小)文件“配置”变量做对球队的所有其他开发人员。像我的数据库位置等东西都保存在那里。我们在.gitignore把这个文件的名称,以便它不是版本控制,但签了“sample_config”文件,让后来者可以复制并使用它自己的目的。


2
投票

其他选项(不优雅,但可能会有所帮助):

  • 使用git stashgit stash pop为您的配置文件
  • 有一个名为,比如说分支,配置具有本地配置文件的更改,然后使用git checkout config <your config file>

如果你需要保持本地配置的变化在回购(地方)第二个选择是好。


0
投票

我有几个短暂的脚本像这样的和,而不是创建一个单独的配置文件,我创建一个单独的setenv.sh(或setenv.bat)文件。我动几下,简单的变量,这个新文件,并调用主脚本setenv.sh文件。这将不是每个用户改变的变量仍然是主要的脚本。根据此setenv.sh脚本是多么小,我将在写关于如何创建这个setenv.sh文件,或将承诺作为模板的setenv.sh.sample。

这一个变化是无法创建或调用一个setenv.sh,并让主脚本中使用的用户设置环境变量。如果不存在变量的主脚本会抱怨。

有些短脚本长成大脚本或成为羽翼丰满的应用。发生这种情况时,我去的配置文件的方式。我们有一个管理名为config配置文件,在http://www.configapp.com的应用程序。配置了环境和实例的概念。在你的榜样,你有1对当地环境和2个实例。常见的变量进入当地环境和机特定变量(你和你的朋友)进入实例。这是一个有点过分了小脚本,但效果很好的应用。


0
投票

现在我用ENV瓦尔例如在Python / Django的,你也可以默认添加到他们。在泊坞窗的情况下,我可以在一个码头工人,compose.yml文件或在版本控制忽略了一个额外的文件保存ENV瓦尔。

# settings.py
import os
DEBUG = os.getenv('DJANGO_DEBUG') == 'True'
EMAIL_HOST = os.environ.get('DJANGO_EMAIL_HOST', 'localhost')
© www.soinside.com 2019 - 2024. All rights reserved.