Git用户配置文件 - 自定义忽略

时间:2017-01-15 00:11:58

标签: git github

我们有一个由5名开发人员组成的团队从事硬件项目。我们有一个user_config.h文件,其中包含#defines,用于每个用户的特定环境和偏好 - 例如他们使用的硬件版本,是否应该打开声音等。

目前,该文件位于我们的.gitignore文件中,该文件运行良好。用户可以更改他们不被推送的设置。它之前被跟踪过,并已在主分支上进行了rm。

我们偶尔会切换到没有该文件的旧分支,并将其删除。然后,用户必须让其他人通过电子邮件向他们发送当前的user_config.h文件。我们希望阻止这种情况发生。

奖励积分:我真正喜欢的是跟踪文件,但忽略用户更改。有时,项目负责人需要在添加新功能时向此文件添加设置,因此我们希望将这些更改推送给所有用户。如果新用户签出了回购协议,我们希望他们获得"出厂默认设置"设置,也可以随时改变。

因此,理想情况下,我们要忽略对文件任何行的更改,但接受添加或删除行的更改。最好能暂时关闭它,以便我们可以更改默认值(即使这意味着直接在github或类似的东西中编辑文件),覆盖repo上的内容但不包括用户'变化。

git中有什么方法可以实现这一切吗?

2 个答案:

答案 0 :(得分:0)

根本不跟踪config.h 您可以进行版本和跟踪:

  • 一个config.h.tpl(带占位符值的模板文件)。
  • 默认值文件,使用出厂默认设置
  • 一个能够获取值文件和模板文件的脚本,并生成config.h文件(保持未跟踪,私有)
  • 一个.gitignore忽略生成的config.h文件
  • a .gitattribute声明污迹内容过滤器(见下文)

然后,您可以将本地克隆 文件保存在文件中,其中每个开发人员都有自己的私有值。如果脚本没有在repo之外检测到该文件,它将使用默认值文件生成config.h

使用content filter driver通过 .gitattributes declaration 自动生成该代。

https://i.stack.imgur.com/tumAc.png
(来自"Customizing Git - Git Attributes"的图片来自“Pro Git book”))

在本地配置中声明内容文件管理器驱动程序后,它会自动在git checkout上为您生成config.h文件。
请参阅“Best practice - Git + Build automation - Keeping configs separate”中的完整示例。

答案 1 :(得分:-1)

  

奖励积分:我真正喜欢的是跟踪文件,但忽略用户更改

这就是git assume-unchanged is for

https://git-scm.com/docs/git-update-index

- [无糖]假设-不变

  

指定此标志时,不会更新为路径记录的对象名称。

     

相反,此选项设置/取消设置路径的“假定未更改”位。

     

当“假定未更改”位打开时,用户承诺不更改文件并允许Git假定工作树文件与索引中记录的文件匹配。如果要更改工作树文件,则需要取消设置该位以告知Git。当在具有非常慢的lstat(2)系统调用(例如cifs)的文件系统上处理大项目时,这有时很有用。

     

如果需要在索引中修改此文件,Git将失败(优雅地),例如合并时提交;因此,如果上游更改了假定未跟踪文件,则需要手动处理该情况。

  

我们希望他们获得“出厂默认”设置,这也可以随时更改

如上所述,这是最新情况,只有当您选择这样做时,您才能办理登机手续,而其他变更将被忽略。

  

因此,理想情况下,我们要忽略对文件任何行的更改,但接受添加或删除行的更改

使用git partial add git add -p并选择你想提交的内容,而不是。

enter image description here