默认的 Git 文件(第一次拉取后忽略)

9
你应该如何在git中设置这种情况:
我的源代码有一个配置文件,其中包含诸如数据库连接凭据等配置设置(这是Drupal源代码,我指的是settings.php)。
当开发人员克隆源代码时,他们需要进入并更改特定于其环境的设置。当然,这些更改不应被推送回原始版本库。与此同时,我希望他们能够使用此默认模板(因为大部分内容都不会更改)。
所以.gitignore在这里行不通,因为我希望它在他们第一次克隆时就存在。我需要教每个新开发人员使用git update-index --assume-unchanged吗?
难道没有更好的方法吗?

可能是提交机器特定配置文件的重复问题。 - Senseful
3个回答

8

我建议将database.php重命名为database.php.sample并将database.php添加到.gitignore文件中。

每当有新用户加入时,只需从database.php.sample复制到database.php并进行相应更改即可。


好建议!就像 wordpress 一样。 :D - Kjuly
1
谢谢!我目前的项目组人员有些反对这种方法,但我倾向于认为这是最好的方法。 - Pedro Nascimento
1
你应该注意不要忽略过去在项目中被跟踪的文件。Git将被忽略的文件视为可丢弃的,因此如果database.php<OLD-COMMIT>中被跟踪,则执行git checkout <OLD-COMMIT> && git checkout -将无警告地删除你的database.php文件。更安全的选择是让database.php包含一组默认选项,但在该文件的末尾包含database.local.php(如果存在),它可以覆盖默认设置。 - Mark Longair

0
一个更好的方式是使用过滤器驱动程序平滑脚本

content driver

Pedro建议(使用database.php.gitignore中)的基础上,您应该:

  • 版本化一个database.php.sample
  • 通过smudge脚本(在git checkout时)将其复制到私有(即未版本化)的database.php中,仅当该私有database.php不存在时。

从git 1.7.4开始,在过滤器定义中的%f将被当前文件路径替换;请参见.gitattributes手册


过滤器驱动程序的想法是自动处理database.php.sample的复制,而不必手动复制它。 - VonC

0

是的,有解决方案。这是我已经发布过的一个解决方案。

database.php上使用git add -N,然后使用git add -p。编辑块以将敏感数据替换为占位符。

之后你需要小心的一件事是,你不应该从仓库的根目录下运行git add . -- 但是没有人会这样做,对吧?;)


请更详细地描述您的解决方案。我尝试了以下操作: git add -N template.file 清理模板文件 git add -p template.file 阶段这个块[y,n,q,a,d,/,s,e,?]?y 使用Sourcetree提交舞台 之后,任何对template.file的更改仍然会被注意到并提交 :( - user1185087

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接