我们有一个由5名开发人员组成的团队从事硬件项目。我们有一个user_config.h文件,其中包含#defines,用于每个用户的特定环境和偏好 - 例如他们使用的硬件版本,是否应该打开声音等。
目前,该文件位于我们的.gitignore文件中,该文件运行良好。用户可以更改他们不被推送的设置。它之前被跟踪过,并已在主分支上进行了rm。
我们偶尔会切换到没有该文件的旧分支,并将其删除。然后,用户必须让其他人通过电子邮件向他们发送当前的user_config.h文件。我们希望阻止这种情况发生。
奖励积分:我真正喜欢的是跟踪文件,但忽略用户更改。有时,项目负责人需要在添加新功能时向此文件添加设置,因此我们希望将这些更改推送给所有用户。如果新用户签出了回购协议,我们希望他们获得"出厂默认设置"设置,也可以随时改变。
因此,理想情况下,我们要忽略对文件任何行的更改,但接受添加或删除行的更改。最好能暂时关闭它,以便我们可以更改默认值(即使这意味着直接在github或类似的东西中编辑文件),覆盖repo上的内容但不包括用户'变化。
git中有什么方法可以实现这一切吗?
答案 0 :(得分:0)
根本不跟踪config.h
您可以进行版本和跟踪:
config.h.tpl
(带占位符值的模板文件)。 config.h
文件(保持未跟踪,私有).gitignore
忽略生成的config.h
文件.gitattribute
声明污迹内容过滤器(见下文)然后,您可以将本地克隆 值文件保存在值文件中,其中每个开发人员都有自己的私有值。如果脚本没有在repo之外检测到该文件,它将使用默认值文件生成config.h
。
使用content filter driver通过 .gitattributes
declaration 自动生成该代。
(来自"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
并选择你想提交的内容,而不是。