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

Wil*_*sem 9 git wildcard gitignore githooks

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

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

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

lexer1.cpp
parser1.cpp
lexer2.cpp
parser2.cpp
Run Code Online (Sandbox Code Playgroud)

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

有没有办法指定一个行为如下的模式:

给定文件foo.ext1存在,忽略foo.ext2.

从而提供ext1ext2.对于词法分析器/解析器,这意味着将此模式应用于.xx/ .cpp.yy/ .cpp.

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

jth*_*ill 9

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

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

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

  2. 让你的makefile目标也更新.gitignore,用

    grep -qs ^target$ .gitignore || echo target >>.gitignore
    
    Run Code Online (Sandbox Code Playgroud)

    target生成的源文件在哪里,作为配方的一部分.

  3. 在生成的文件名本身scanner.generated.c或其他东西中放置一些标记.

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


suu*_*uzi 0

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

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