代码之家  ›  专栏  ›  技术社区  ›  sleepynate

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

git
  •  9
  • sleepynate  · 技术社区  · 15 年前

    我有一个用于我正在开发的应用程序的存储库,其中包含一个配置文件。目前,我用一个 .dist

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

    这是很好的,而且忽略了实际的配置。

    nate:~/myAwesomeApp% cat .gitignore 
    config
    

    会的 甜的 但是,如果我能以真实的名称分发配置文件并准备编辑,同时忽略它,这样新克隆的存储库副本就具有“功能性”分发,它就不会被覆盖、重击或以其他方式骚扰,这样用户就不必担心推送或发布他们的配置文件了 超级秘密 git commit -a -m 'hurrrr derp! oopsies!' && git push

    有办法吗?让git保留一个被克隆出来的文件的原始版本,但是 此后 忽略?

    我敢肯定以前有人问过这个问题,但就我而言,我的googlefu失败了。把学校埋得很深,所以。

    4 回复  |  直到 15 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    您还可以编辑和分发:

    • .gitattributes 声明 filter driver
    • 一个污迹脚本,它将检测到该内容并生成最终的(和私有的,如“无版本的” config

    现在这有点弯曲了一个过滤器驱动程序是关于什么的(它是关于修改一个文件的内容, regardless of its "state", i.e its full path and name
    这个 .git属性

    config.dist  filter=generateConfig
    

    alt text

    git config --global filter.generateConfig.smudge /path/to/generateConfig
    
        2
  •  6
  •   Jonathan Leffler    15 年前

    我可能会包括一个'安装'脚本的某种复制'配置分布'到'config'。

    我不认为有一种方法可以让一个文件既不被忽略也不被忽略。

        3
  •  4
  •   takeshin    15 年前

    这是一个很好的问题,但是目前还没有git解决方案。

    解决方法很少:

    • 将应用程序配置为读取 config.dist 什么时候 config
    • 使用构建脚本为您重命名(例如ant或phing)
    • 使用git钩子重命名配置
        4
  •  1
  •   Rene Saarsoo    15 年前

    钩子在这里也没有解决方案,如果它们以这种方式工作,那将是一个严重的安全威胁——仅仅通过克隆repo,一个邪恶的代码就可能在您的机器中执行。

    • 如果修改配置文件 运行应用程序所必需的,那么如果您的程序 if [ ! -e config ] ; then cp config.dist config ; fi 在启动时,这应该足够了。另外,你应该在里面有警告 config.dist

    • 如果修改配置文件 如果需要,那么在没有配置文件的情况下启动程序可能会启动一些安装模式,要求用户输入所需的配置选项并保存它们。

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