有条件的 Gitignore

Conditional Gitignore

我有一个 git 存储库,用于存储我的个人文档。其中一些文档是 LaTeX 文件,有些甚至是 PDF。我当然希望它们在我的文档仓库中。

但是当我创建一个 org-mode 文档 (*.org) 时,我经常构建它,如果调用 org-mode 文档会导致创建这些文件 α:

我不想跟踪它们,因为它们是我拥有源代码的生成文件,但我不能简单地忽略所有 *.tex,甚至不能忽略所有 *.pdf 文件。

是否可以告诉 .gitignore 忽略名称为 α.texα.pdf 的每个文件(如果存在名为 α.orgα 为任意字符串的变量?

这是不可能的,.gitignore 是一个非常简单的文件,不允许任何条件规则。

然而,通常好的想法是准备构建系统以将所有中间文件生成到某个构建目录中。通常使用 buildtarget。然后你可以简单地输入 .gitignore:

/target # / specifies the root path
/auto # probably your temporary files...?

如果编译是用 Makefile 完成的,规则可以是这样的:

target/%.pdf: target/%.tex
         $(LATEX) -o $@ $<
target/%.tex: %.org
         generate_tex -o $@ $<

(不太确定 latex 的语法,当然还有从 *.org 生成 *.tex 的具体命令)