将忽略的配置文件添加到git repo作为示例

时间:2010-09-10 16:08:12

标签: git

我有一个我正在处理的应用程序的存储库,其中包含一个配置文件。目前,我使用.dist扩展名进行分发,并让用户在编辑文件之前重命名该文件。

nate:~/myAwesomeApp% git ls-files 
.gitignore
README
config.dist
glorious_support_lib.p
bestProgramEvar.f90

这很好,花花公子,实际的配置会被忽略。

nate:~/myAwesomeApp% cat .gitignore 
config

然而,如果我可以将该配置文件以其真实名称分发并准备编辑,同时将其忽略,以便新存储库的副本具有 sweet 一个“功能”的发行版,它不被覆盖,破坏或以其他方式骚扰,并且用户不必担心通过一个推送或发布他们的超级秘密配置细节到interwebs无意的git commit -a -m 'hurrrr derp! oopsies!' && git push

有没有办法做到这一点?让git保留在克隆出来的文件的单个原始版本中,但此后被忽略了吗?

我确信之前已经问过,但对于我的生活,我的google-fu失败了。把学校放在深处,SO。

4 个答案:

答案 0 :(得分:6)

我可能会包含某种将'config.dist'复制到'config'的'install'脚本。

我认为没有办法让文件既不被忽略也不被忽略。

答案 1 :(得分:4)

这是一个很好的问题,但AFAIK没有针对此的git解决方案。

几点解决方法:

  • 将您的应用配置为在config.dist不存在时阅读config(例如,PHPUnit使用此技术)
  • 使用构建脚本为您重命名(例如蚂蚁或phing)
  • 使用git hooks重命名配置

答案 2 :(得分:3)

您还可以进行版本和分发:

  • 声明 filter driver .gitattributes个文件(仅限'config.dist')
  • 一个涂抹脚本,它将检测该内容并生成最终版本(以及“非版本化”config文件中的私有内容)

现在,这是一个过滤器驱动程序的一点点(它是关于修改文件的内容,regardless of its "state", i.e its full path and name)。但它可以工作。
.gitattributes将包含:

config.dist  filter=generateConfig

alt text

您可以注册涂抹脚本(在创建/更新工作目录时的结帐步骤中应用),如:

git config --global filter.generateConfig.smudge /path/to/generateConfig

答案 3 :(得分:1)

正如其他人所指出的那样,在Git中没有神奇的解决方案。据我所知,它与其他版本控制系统相同。

Hooks在这里也没有解决方案,如果它们以这种方式工作,这将是一个严重的安全威胁 - 只需克隆一个回购,一个邪恶的代码就可以在你的机器上执行。

但是要使用你的应用程序,除了使用git克隆它之外,用户还必须至少做一件事:运行你的应用程序。

  • 如果修改运行应用程序所需的配置文件不是,那么如果您的程序在启动时执行if [ ! -e config ] ; then cp config.dist config ; fi,那么应该是恕我直言。另外,您应该在config.dist内面发出警告,警告您不应该修改此文件,而是复制它。

  • 如果需要修改配置文件 ,则启动没有配置文件的程序可能会启动某种安装模式,要求用户输入所需的配置选项并保存。

  • 第三种可能是您的应用无法在启动时修改配置文件(可能只是一些JavaScript + HTML文件)。在这种情况下,除了拥有一些单独的构建脚本或让用户手动执行此操作外,我没有其他选择。