Answers:
有效管理git + latex工作流程的第一步是对LaTeX习惯进行一些更改。
对于初学者,请在单独的行上写下每个句子。Git被编写为版本控制源代码,其中每一行都是不同的并且有特定的用途。当您在LaTeX中编写文档时,通常会以段落的方式思考并将其编写为自由流动的文档。但是,在git中,对段落中单个单词的更改会记录为对整个段落的更改。
一种解决方案是使用git diff --color-words
(在示例中,请参见我对类似问题的回答)。但是,我必须强调,将行拆分为一个更好的选择(我只是在传递答案时提到了它),因为我发现它导致的合并冲突非常小。
如果您需要查看代码diff,请使用git的本机diff。要查看两个任意提交(版本)之间的差异,可以使用sha
每个提交的s来实现。请参阅文档以获取更多详细信息以及此问题
另一方面,如果您需要查看格式化输出的差异,请使用latexdiff
它是一个出色的实用程序(用perl编写),该实用程序可以接收两个乳胶文件,并以pdf格式生成整齐的差异输出,如下所示(图像来源):
您可以使用git-latexdiff在单个命令中组合git
和latexdiff
(latexpand
如果需要,可以加上)(例如,查看工作树和最后一个提交之间的差异)。git latexdiff HEAD^
如果您要使用乳胶编写较长的文档,建议将不同的章节拆分为各自的文件,然后使用\include{file}
命令在主文件中调用它们。这样,您就更容易编辑工作的本地化部分,并且也使版本控制更容易,因为您知道对每一章进行了哪些更改,而不必从一个大的日志中找出来文件。
使用分支!。我可能没有更好的建议。我发现分支机构对于跟踪文本的“不同想法”或作品的“不同状态”非常有用。该master
分支应该是你工作的主体,在其最新的“准备发布”状态,即,如果所有的分支,如果有一个你愿意把你的名字就可以了,它应该是主分支。
如果您是研究生,分支机构也非常有帮助。正如任何研究生所证明的那样,顾问必定会做出许多更正,而您大多数都不同意。但是,您可能希望暂时至少更改它们,即使在讨论之后稍后将它们还原。因此,在这种情况下,您可以创建一个新分支advisor
并对其喜好进行更改,同时保持自己的开发分支。然后,您可以将两者合并,然后选择所需的东西。
我还建议将每个部分分成一个不同的分支,并只关注与您所在的分支相对应的部分。在创建新节时生成分支,在进行首次提交时生成伪段(实际上是您的选择)。当您不在其分支上时,请不要编辑其他部分(例如3)。如果需要编辑,请提交一个,然后在分支之前签出另一个。我发现这非常有帮助,因为它可以将该节的历史记录保留在自己的分支中,并且一目了然(从树上)告诉您某个节的年龄。也许您已经在第3节中添加了需要对第5节进行调整的内容...当然,在仔细阅读的过程中很可能会发现这些内容,但是我发现一目了然会有所帮助,以便我可以如果我换档
这是我最近发表的论文中分支和合并的示例(我在OS X上使用SourceTree,在Linux上从命令行使用git)。您可能会注意到,我不是世界上最频繁的提交者,也不总是留下有用的评论,但这并不是您不遵循这些良好习惯的理由。最主要的提示是,在分支机构中工作会有所帮助。我的思想,想法和发展是非线性进行的,但是我可以通过分支跟踪它们,并在满意时将它们合并(我还有其他分支,后来无处可去)。我也可以“标记”提交(如果它们表示某些意思)(例如,初次提交到期刊/修订的提交/等)。在这里,我将其标记为“版本1”,这是到目前为止的草案。这棵树代表一个星期
另一有用的操作是使文档范围的更改(例如更改\alpha
到\beta
任何地方)自行提交。这样,您可以还原更改而不必回滚其他任何内容(有多种方法可以使用git进行此操作,但是,嘿,如果可以避免的话,为什么不这样做呢?)。对于前言的补充也是如此。
使用远程存储库,并定期将更改推送到上游。使用github和bitbucket之类的免费服务提供商(后者甚至允许您使用免费帐户创建私有存储库),如果您正在使用git / mercurial,则没有理由不使用它们。至少,可以将其视为乳胶文件的辅助备份(希望您有一个主备份!),并且该服务可以让您从其他计算机上继续编辑。
git [log|show|add] some_file.tex
全部工作,无需在此处添加常量分支切换。如果需要,您仍然可以自行提交每个文件。
我也有类似的工作流程。即使一次要处理一个分支,我发现为不同的工作状态设置单独的分支也是有益的。例如,想象一下将一份好的草稿发送给顾问。然后,您得到一个疯狂的主意!您想开始更改一些核心概念,对一些主要部分进行重做,等等。因此您开始分支并开始工作。您的主分支始终处于“可释放”状态(或与您当时的状态一样近)。因此,尽管您的其他分支机构很疯狂并且发生了巨大变化,但是如果另一个发布者想要查看您拥有的内容,或者您是一个正在提交会议的学生,则主分支机构总是可释放的,随时可以使用(或准备展示您的顾问)。如果您的博士导师想早上看草稿,
假设您的主分支处于工作的“可释放”状态。现在,您想将其提交给几本经过同行评审的期刊,每本期刊对相同内容的格式都有不同的要求,并且期望它们对如何编辑论文以适合其读者等提出不同的批评。您可以轻松地为每个日记创建一个分支,进行日记特定的更改,提交,并在收到反馈后在每个单独的分支上进行更改。
我还使用了Dropbox和git来创建您上面描述的系统。您可以在Dropbox文件夹中创建准系统存储库。然后,您可以从任一台计算机上推/拉到您的保管箱,以保持最新状态。该系统通常仅在协作者数量很少时才能使用,因为如果人们尝试同时推送到保管箱回购协议,则可能会导致损坏。
从技术上讲,您也可以只将一个存储库保留在dropbox文件夹中,然后从那里进行所有工作。但是,我不鼓励这样做,因为人们已经提到Dropbox在同步不断变化的文件(gits内部文件)时遇到一些麻烦。
我试图将其实现为bash函数,我将其包括在内~/.bashrc
以使其始终可用。
function git-latexdiff {
if [[ $# != 2 ]];
then
printf "\tusage: git-latexdiff <file> <back-revision> \n";
elif [[ $2 -lt 0 ]];
then
printf "\t<Back-revision> must be positive\n";
else
dire=$(dirname $PWD/$1);
based=$(git rev-parse --show-toplevel);
git show HEAD~$2:$(echo $dire| sed 's!'$(echo $based)'/!!')/$1 > $1_diff.tmp;
latexdiff $1 $1_diff.tmp > $1_diff.tex;
pdflatex $1_diff.tex;
okular $1_diff.pdf;
rm $1_diff*;
fi;
}
请注意,此功能需要latexdiff
安装(并在路径中找到)。找到pdflatex
并找到它也很重要okular
。
第一种是我偏爱的处理LaTeX的方法,因此您也可以将latex
其修改。第二个是我的PDF阅读器,我想您要evince
在gnome或其他解决方案下使用。
这是一个快速版本,只考虑了一个文档,这是因为使用git,您将浪费大量时间和精力来跟踪多文件LaTeX文档。您也可以让git执行此任务,但是如果您愿意,还可以继续使用\include
latexdiff
命令行工具git diff
。
如果您在Windows上,无需安装,只需一个简单的脚本,就可以将它用于diff版本。bat
它可以在Windows10,miktex2.9上完美运行: