0

我正在创建一个包含 PDF 图像的 LaTeX 文档;所以,我想忽略生成的 PDF,而不是源 PDF。我实际上已经设法做到这一点,但我尝试的第一件事没有奏效,我想知道为什么。

文档部分说:

从与路径相同的目录或任何父目录中的 .gitignore 文件读取的模式,较高级别文件(直到工作树的顶层)中的模式被低级别文件中的模式覆盖到目录包含文件。这些模式与 .gitignore 文件的位置相匹配。项目通常在其存储库中包含此类 .gitignore 文件,其中包含作为项目构建的一部分生成的文件的模式。

...但我似乎无法让更深的.gitignore文件覆盖更浅的文件。这是一个简单的命令序列来重现我所看到的:

~% mkdir git-test
~% cd git-test
~/git-test% git init
Initialized empty Git repository in /home/dmwit/git-test/.git/
~/git-test% echo '*.pdf' >.gitignore
~/git-test% mkdir images
~/git-test% touch images/.gitignore
~/git-test% git add .gitignore images/.gitignore 
~/git-test% git commit -m "example .gitignore files"
[master (root-commit) 8c7e91d] example .gitignore files
 2 files changed, 1 insertion(+)
 create mode 100644 .gitignore
 create mode 100644 images/.gitignore
~/git-test% touch images/foo.pdf
~/git-test% git status
# On branch master
nothing to commit, working directory clean

为什么在此之后工作目录是干净的?.gitignore中的空文件不应该git-test/images/覆盖中的文件images/,导致该目录中的任何内容都不会被忽略吗?(另外,对于它的价值,删除后git-test/.gitignore,新的pdf确实出现在 中git status,所以我不相信我的任何全局排除会影响这一点。)

4

1 回答 1

2

git不会覆盖.gitignore子目录中的完整文件。它将这些文件的内容添加到当前的忽略规则中。.gitignore在您的特定情况下,处理该子目录(及其任何子目录......)时,空文件被合并到忽略列表中,但由于该文件中没有规则,因此它是无操作的。我建议a)尝试放入"!*.pdf".gitignore文件以告诉它不要忽略那里的PDF文件,或者b)摆脱顶级*.pdf忽略规则,重新安排构建过程以将生成的PDF文件放在单独的目录中(例如output/),然后在.gitignore其中放置一个带有“* .pdf”规则的内容。

于 2013-11-07T17:16:14.087 回答