处理项目配置文件最简单的方法是什么?

Ond*_*ták 72 git

在任何项目中至少有一个配置文件是很常见的.每次与我分享项目时git,我都遇到同样的问题:

  • 敏感信息(每个开发人员都有不同的DB密码等)
  • 任务特定信息(当开发人员处理需要更改某些设置的特定任务时)

显然,必须以某种方式忽略配置,以防止开发人员特定数据泛滥到主存储库.现在有几种我常用的方法,每种方式都有一些缺陷:

  • .gitignore 配置文件
    • 最基本的方式
    • 当开发人员克隆repo时,配置文件丢失,并且必须找出configs重新创建的位置
  • 配置文件不会被忽略.它包含一些虚拟信息,每个开发人员要么解开并将其放入.git/info/exclude或设置git update-index --assume-unchanged ...为文件
    • 克隆repo的任何人都可以使用这些文件
    • 它包含的先进技术可能会使第一次使用git的人感到困惑
    • 当有人意外提交配置文件时,它不允许人们拉/取(因为排除不起作用的方式.gitignore)
  • 例如,_original在具有真实文件的情况下分发以后缀为例的配置文件.gitignore.然后每个开发人员将文件重命名为真实姓名
    • 克隆repo的任何人都可以使用这些文件
    • 一个人必须在整个应用程序中搜索所有配置并重命名它们

有没有其他可能更好的方法来处理这个问题?我怀疑我缺少一些东西,至少是一些插件.

Von*_*onC 21

过滤器驱动程序是实现选项3的"自动"方式,详见" 当您在项目中拥有密钥时,如何才能推送到GitHub? ":

在此输入图像描述

该结果smudge将在结帐时显示:

  • 检测要修改的正确配置文件
  • 获取所需的信息(最好保留在任何Git仓库之外),并将模板值替换为实际值.

从那里开发人员可以对这些配置文件进行任何类型的修改.
这没关系,因为clean脚本在提交时会将该文件的内容恢复为其原始(模板)值.没有意外的推动.


pla*_*gue 17

我在上一个项目上做的方式就是有一个主配置文件加载用户本地配置文件(如果它存在)可能会覆盖master中设置的默认值(如果指定)并声明它自己的配置信息(如果不存在)在主人.本地文件已添加到gitignore.这样所有常见的东西都可以共享,一些配置总是存在,每个开发人员都可以修改他们的本地.

  • 这个,加上一个README文件,解释了放置本地配置文件的位置. (4认同)

Pas*_*cal 6

由于花了我一段时间才想出使用@VonC提示的可行解决方案,因此这里有一个完整的示例,说明如何使用Objective-C头文件中的git clean过滤器忽略密码。

  1. 假设你有一个名为默认的配置脚本Config.h包含此

    // Change "12345" to your password
    #define kPass @"12345"
    #define kConstant 42
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建hidepass.sh与关键行匹配的脚本,并打印默认行

    #!/bin/sh
    awk '{ if (/#define kPass/) print "#define kPass @\"12345\""; else print $0; }'
    exit 0
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使脚本可执行并添加到仓库中

  4. 告诉git通过添加以下行来过滤您的配置文件.gitattributes(还将.gitattributes添加到您的仓库中)

    Config.h filter=hidepass
    
    Run Code Online (Sandbox Code Playgroud)
  5. 告诉git 在清理过程中将hidepass.sh脚本用于hidepass过滤器:

    git config filter.hidepass.clean ./hidepass.sh
    
    Run Code Online (Sandbox Code Playgroud)

就是这样,您现在可以更改密码,Config.h但是git不会提交此更改,因为它始终将该行替换为签入中的默认行。

这是单行密码的快速解决方案,您可以发疯,例如使用特殊的字符串结束要忽略的行,并检查该字符串是否存在。