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

sle*_*ate 9 git

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

nate:~/myAwesomeApp% git ls-files 
.gitignore
README
config.dist
glorious_support_lib.p
bestProgramEvar.f90
Run Code Online (Sandbox Code Playgroud)

这很好,花花公子,实际配置被忽略.

nate:~/myAwesomeApp% cat .gitignore 
config
Run Code Online (Sandbox Code Playgroud)

这将是甜的,但是,如果我可以只发布在其真实姓名和现成编辑配置文件,同时保留它忽略,这样仓库的新克隆副本都有一个"功能性"的分布,这是不被覆盖,破坏或以其他方式骚扰,并且用户不必担心通过意外推送或发布他们的超级秘密配置细节到interwebsgit commit -a -m 'hurrrr derp! oopsies!' && git push

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

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

Jon*_*ler 6

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

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


Von*_*onC 4

您还可以版本化和分发:

  • .gitattributes声明过滤器驱动程序的文件(仅适用于“config.dist”)
  • 一个涂抹脚本,它将检测该内容并生成最终的(并且是私有的,如“非版本化”config文件)

现在,这稍微改变了过滤器驱动程序的含义(它是关于修改文件的内容,无论其“状态”如何,即其完整路径和名称)。但它可以发挥作用。
其中.gitattributes将包含:

config.dist  filter=generateConfig
Run Code Online (Sandbox Code Playgroud)

替代文本

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

git config --global filter.generateConfig.smudge /path/to/generateConfig
Run Code Online (Sandbox Code Playgroud)