如果存在具有不同扩展名的文件,则Gitignore为文件

时间:2015-02-04 15:32:07

标签: git wildcard gitignore githooks

在涉及解析器的项目中,某些源代码是程序的产物。例如,yacc基于.yy文件生成实现解析器的源代码文件。

由于.yy文件中的少量修改可能会在编译后导致相应源代码文件发生较大变化,并且由于生成的源代码(几乎)在生成后几乎不会更改。这些源代码文件是.gitignore列表的完美候选者。

现在可以手动将这些文件写入列表:

lexer1.cpp
parser1.cpp
lexer2.cpp
parser2.cpp

但是,当一个人构建一个新的解析器时,他/她将忘记将该文件添加到列表中。

有没有办法指定模式,其行为如下:

  

如果文件foo.ext1存在,请忽略foo.ext2

其中一个提供ext1ext2。对于词法分析器/解析器,这意味着将此模式应用于.xx / .cpp.yy / .cpp

这可能是.gitignore直接无法实现的,但也许已经为此实现了一些钩子?

2 个答案:

答案 0 :(得分:9)

我可以看到三种方法 - 直接回答问题,不,忽略处理只咨询有问题的路径名,而不是其他任何有关环境的信息。

  1. 将生成的来源放在您忽略的generated文件夹中。

    我,我最喜欢这个,我知道我是少数但我不喜欢在我的源目录中构建碎片。

  2. 让您的makefile目标也使用

    更新.gitignore
    grep -qs ^target$ .gitignore || echo target >>.gitignore
    

    其中target是生成的源文件,作为配方的一部分。

  3. 在生成的文件名中添加一些标记,scanner.generated.c或其他内容。

  4. 出于某种原因,我真的不喜欢预先提交的钩子清除不需要的源,git从提交中删除所有东西本身就是令人不安的。

答案 1 :(得分:1)

我的建议是创建一个脚本来更新.gitignore。 我不知道,但您可以在提交之前自动查找运行此脚本的解决方案。

编辑:我用Google搜索并发现:https://github.com/observing/pre-commit - 可能需要一些测试。