我即将开始使用 Git 对我的 LaTeX 文档进行版本控制,但我很少使用这两个工具。我只想对编译文档所需的文件进行版本控制,但我使用不同的操作系统(OSX、Windows 和不同的 Linux 发行版)。我搜索了.gitignore
LaTeX 文件,找到了 3 个不同的文件:
- https://gist.github.com/149016
- https://gist.github.com/871983(上述版本的一个分支,但适用于 Mac)
- https://github.com/github/gitignore/blob/master/LaTeX.gitignore(另一个适用于 LaTeX 的通用方法)
以下是按字母顺序排列的表格形式的比较:
*.acn *.acn
*.acr *.acr
*.alg *.alg
*.aux *.aux .aux
*.bbl *.bbl *.bbl
*.blg *.blg *.blg
*.dvi *.dvi *.dvi
*.fdb_latexmk
*.glg *.glg *.glg
*.glo *.glo *.glo
*.gls *.gls *.gls
*.idx *.idx *.idx
*.ilg *.ilg *.ilg
*.ind *.ind *.ind
*.ist *.ist *.ist
*.lof *.lof *.lof
*.log *.log *.log
*.lot *.lot *.lot
*.maf *.maf
*.mp
*.mtc *.mtc
*.mtc1 *.mtc1
*.nav
*.nlo
*.out *.out *.out
*.pdf
*.pdfsync
*.snm
*.synctex.gz *.synctex.gz *.synctex.gz
*.tmp
*.toc *.toc *.toc
*.top
*.tui
*.vrb
# Mac IDE files
*.swp
*~
*(Autosaved).rtfd/
Backup[ ]of[ ]*.pages/
Backup[ ]of[ ]*.key/
Backup[ ]of[ ]*.numbers/
# Mac finder files and hidden folders
.DS_Store
有人能解释为什么有些可能会从其他地方缺失,以及是否可以将它们全部包含在一个.gitignore
文件中以供所有操作系统使用?
答案1
忽略文件列表的原因如下。当您的 VCS 发现目录中没有版本控制的文件时,它会(礼貌地)通知您。例如,在我运行的某个目录中bzr status
,我收到以下消息:
tex.SE% bzr status
unknown:
Project/
braids.sty@
bzr_test/
lessonplan.cls@
lessonplan.sty@
listings.sty
mylectures.sty@
refs.bib
tqft.sty@
unicode-math-chg.sty
unicode_beamer_test.txt
xepstricks.xdv
这是一个很有用的功能,因为它可以告诉我是否有我尚未将文件置于 VCS 的控制之下。特别是,如果我发现任何带有后缀的文件.tex
,那么我就知道在提交更改之前我忘记了做某事。
忽略文件(在我的情况下)的目的.bzrignore
是自动从此列表中删除内容。如果我删除此目录中的该文件,那么我会得到一个列表833文件!要查看这个列表是否很长,我得查看它,看看是否漏掉了某个.tex
文件。
忽略文件时要记住的重要事项如下:
更重要的是关注当下不是那里的文件比那里的文件多。那些不存在的扩展名的文件是那种你会认为“这种扩展名的文件很可能在 VCS 的控制之下”的文件类型。
这是咨询。忽略文件只是告诉 VCS 您通常会将哪些文件置于其控制之下。您可以完全自由地忽略其建议,并且不是将它列出的文件置于其控制之下,并且您可以完全自由地将它列出的文件置于其控制之下没有列表。
有可能已更改。实际上,最好从一个最小文件开始(我将在最后给出一个例子),并且只在发现需要时添加扩展名。正如我所说,此文件的主要目的是作为预警系统,以确保所有应该忽略的内容实际上都被忽略了。如果您从某个中央存储库导入忽略文件,然后开始自己创建恰好具有这些扩展名的文件(只是因为您不会想到它们与 TeX 有任何关系),那么您可能会错过一个文件。因此,当您发现建议文件列表太长而无法看到重要的文件时,请向列表中添加更多扩展名。
它应该是项目特定。一个项目中要忽略的文件不一定与另一个项目中的文件相同。您应该有一个可以安全忽略的小主列表总是忽略,然后根据每个项目添加内容。
它应该是版本化。不用说,真的!
那么应该包含哪些内容?基本规则是,您应该对以下文件进行版本控制:您直接创建。因此,您不需要版本控制的内容是那些为您创建的内容(例外情况是,如果您没有在每台机器上创建它们的程序副本,gnuplot 数据文件就是一个显而易见的例子)。因此,初始列表应该是您的 TeX 进程创建的文件。正如您所说,您正在使用 LaTeX,以下是一个相当简单的列表:
*.aux
*.pdf
*.ps
*.log
*.dvi
*.tex~
如果您使用的是 BibTeX,请将.bbl
和添加.blg
到该列表中。如果您的系统习惯于在系统中创建额外的文件,请添加这些文件。这就是 像 之类的东西.DS_Store
在这些列表中所做的。这是 Mac 特有的。Linux 不会做这样的事情(它很礼貌)。我不知道 Windows 会怎么做。当您开始使用其他程序和更复杂的软件包时,您会发现新文件如雨后春笋般涌现。如果您生成网页,您会发现自己想要添加一大堆像.4ct
和 类似的文件。
因此,总而言之,从小事做起,记住计算机的作用是什么你告诉它做什么,而不是相反。
答案2
LaTeX 及其软件包会生成各种辅助文件。还有一些外部工具会创建自己的文件。然后还有一组由 (La)TeX 生成的输出文件,如 DVI、PS 和 PDF 文件,您可能希望或不希望将它们置于版本控制之下。通常您不需要。
某些列表中缺少某些扩展的原因在于扩展的数量很大程度上取决于所使用的软件包和工具。新软件包不断涌现,而这些列表的作者可能不知道或未使用过某些软件包。
我认为最好有一个列表,也许还有软件包及其创建的辅助文件的描述。以下是我刚刚想到的(以及我的svn:ignore
列表中的)。我使用了一个扩展类别,我无法立即将其归类到特定的软件包中。
(La)TeX:*.log *.aux *.toc
列表:*.lof *.lot
索引:*.idx *.ind *.ilg
词汇表:*.glo *.gls *.glg
Bib(La)TeX: *.bbl *.blg
hyperref
: *。出去svn-multi
: *.svn *.svt *.svxstandalone
格式:*.sta *.stplatexmk
工具:*.fdb_latexmkendfloat
:*.fff其他:*.run.xml
答案3
我同意 ShreevatsaR 的评论。对于大多数项目来说,实际上生成的软件包很少 - 这取决于您决定包含哪些软件包。因此,我从一个空的开始.gitignore
,只添加我在编译 TeX 文件时实际看到的软件包。
此外,有时随意添加扩展名并不合适.gitignore
。例如,如果您有 PDF 图像,那么您可能不想将其添加*.pdf
到您的.gitignore
,而是想添加yourtexfile.pdf
。同样,如果您的所有*.eps
图像都是从 makefile 中的其他内容自动生成的(例如,我对大多数图像使用 dia,而 EPS 版本是通过要求 dia 自动转换图形生成的),那么添加 是合适的*.eps
。
.gitignore
最后,您可以通过在行前添加来添加例外!
。例如,以下内容将忽略所有自动生成的 PDF 文件,同时注意figure.pdf
哪些是手动生成的 PDF 图像。
*.aux
*.dvi
*.pdf
!figure.pdf
答案4
相当多的模块创建了自己的辅助文件。
例如,您可能还会清理:
*.lol
(列表列表);*.ps
(如果这不是您的最终格式);*.idv
和*.lg
;*.4tc
,,如果您使用*.4ct
;*.xref
tex4ht
通常,我会对所有源文件进行版本控制。当我使用新模块(或新渲染器)时,在使用 清理代码后make clean
,我会运行git status
来检查我不知道的辅助文件,然后将它们添加到我的clean
规则中(或者.gitignore
如果您愿意的话)。