【问题标题】:Git default files (ignoring after first pull)Git 默认文件(首次拉取后忽略)
【发布时间】:2023-03-11 10:24:02
【问题描述】:

你会如何在 git 中设置这个场景:

我的源有一个设置文件,其中包含配置设置,例如 db 连接凭据等...(这是一个 Drupal 源,我指的是 settings.php)

当开发人员克隆源代码时,他们需要进入并更改特定于其环境的设置。这些变化当然不应该被推回原点。同时我希望他们能够使用这个默认模板(因为大部分都不会改变)。

所以 .gitignore 在这里不起作用,因为我想在他们的第一个克隆中使用它。 我需要向每个新开发人员介绍git update-index --assume-unchanged吗?

没有更巧妙的方法吗?

【问题讨论】:

标签: git


【解决方案1】:

我会将database.php 重命名为database.php.sample 并将database.php 添加到.gitignore

每当有新用户出现时,只需从 database.php.sample 复制到 database.php 并进行适当的更改。

【讨论】:

  • 好建议!就像wordpress 所做的那样。 :D
  • 谢谢!我当前项目中的人对此有点反对,但我倾向于认为这是最好的方法。
  • 您应该警惕忽略过去在项目中跟踪的文件。 git 将忽略的文件视为一次性文件,因此如果在 <OLD-COMMIT> 中跟踪了 database.php,则执行 git checkout <OLD-COMMIT> && git checkout - 将删除您的 database.php 文件而不发出警告。更安全的选择是让database.php 包含一组默认选项,但在该文件的末尾包含database.local.php(如果存在)可以覆盖默认设置。
【解决方案2】:

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

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

之后您需要注意的一件事是,您永远不应该从存储库的根目录中git add . —— 但没人这样做,对吧? ;)

【讨论】:

  • 请更详细地描述您的解决方案。我尝试了以下方法:git add -N template.file 清理了模板文件 git add -p template.file Stage this hunk [y,n,q,a,d,/,s,e,?]? y 使用 Sourcetree 提交阶段之后,template.file 的任何更改仍然会被注意到并将被提交:(
【解决方案3】:

一种更巧妙的方法是使用 filter driversmudge 脚本

Pedropropositiondatabase.php.gitignore)的基础上,您将:

  • 版本 a database.php.sample
  • 通过涂抹脚本(在git checkout)将其复制到私有(即未版本化)database.php,前提是该私有database.php 尚不存在。

从 git 1.7.4 开始,过滤器定义中的%f 将替换为当前文件的路径;见the .gitattributes manpage

【讨论】:

  • 过滤驱动的想法是自动处理database.php.sample的副本,而不是手动复制它。
猜你喜欢
  • 2016-11-13
  • 2018-12-29
  • 2020-10-25
  • 1970-01-01
  • 2019-08-20
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多