.gitignore是否具有版本控制文件的等效文件?

bst*_*r55 8 git

这个问题以下问题有关:https://stackoverflow.com/search?q = [git] +%2Bassume-unchanged,但是,这些问题所提供的答案似乎都不符合我的需求.

我有一个由python脚本生成的头文件(key_info.h).为了聪明,我使用一行代码控制标题(key_info.h)的占位符版本:

int i = you_need_to_run_the_key_info_gen_python_script_to_generate_this_file();
Run Code Online (Sandbox Code Playgroud)

在运行python脚本之前,编译此代码会产生错误,告诉开发人员确切要做什么; 运行脚本.

当然,开发人员将继续运行python脚本来生成最新版本的key_info.h,代码将成功编译.然后,开发人员将继续进行一系列更改,然后"git commit"他们的代码.

我们遇到的问题是key_info.h现在已被修改.因此,git会将其作为修改来接收并允许它被提交.但是,此标头的生成版本永远不应受版本控制.我们需要占位符版本保持不变,以继续向开发人员提供编译错误提示.

我的第一直觉是使用.gitignore来阻止git在提交中获取key_info.h.然后.gitignore可以在开发人员之间轻松共享,因为.gitignore本身是受版本控制的.不幸的是,.gitignore仅适用于不受版本控制的文件.

我的下一个想法是使用'git update-index --assume-unchanged/path/to/file'.这在本地工作得很好,但我无法对其他开发人员强制执行此规则.在dev意外提交生成的头部之前,这只是时间问题.

所以我的问题是:有没有办法对文件进行版本控制,同时默默地强制执行一个规则,即在提交更改时要忽略该文件?我真正想要的是.gitignore版本控制文件.

小智 3

但我无法对其他开发人员强制执行此规则

你几乎做到了:你可以让你的 key-info-gen 脚本运行git update-index --assume-unchanged /some/path

但我认为这不是一个好主意。

我可能会选择根本不覆盖头文件。让您的 Python 脚本生成正确的头文件并将其写入不同的-I目录,并按正确的顺序传递这两个目录的编译器选项。如果脚本尚未运行,则会找到版本控制的标头。如果脚本已运行,将找到用户生成的标头。然后您可以将用户生成的标头的路径放入.gitignore.