git + LaTeX工作流程

git + LaTeX workflow

我正在用乳胶写一份很长的文件。我有我的工作电脑和笔记本电脑,我都在用它们。我需要保持两台计算机之间的所有文件同步,还希望保留修订历史记录。我选择了Git作为我的DVC,并且在我的服务器上托管我的存储库。我还使用Kile+Okular进行编辑。Kile没有集成的Git插件。我也没有在这篇文章上与任何人合作。如果由于某种原因我的服务器不可访问,我还考虑在Codaset上放置另一个私有存储库。

在这种情况下,推荐的工作流实践是什么?在这个工作方案中如何适应分支?是否有方法比较同一文件的两个版本?用藏匿处怎么样?


对乳胶工作流的更改:

有效管理git+乳胶工作流的第一步是对乳胶习惯进行一些更改。好的。

  • 首先,把每个句子写在一行上。Git被写到版本控制源代码中,每一行都是不同的,并且有特定的用途。当你用乳胶笔写文件时,你经常用段落来思考,把它写成一个自由流动的文件。但是,在git中,对段落中单个单词的更改将被记录为对整个段落的更改。好的。

    一种解决方案是使用git diff --color-words(参见我对类似问题的回答,我在这里举了一个例子)。但是,我必须强调,拆分为单独的行是一个更好的选择(我只是在传递该答案时提到过),因为我发现这样做会导致非常小的合并冲突。好的。

  • 如果您需要查看代码差异,请使用Git的本机差异来查看两个任意提交(版本)之间的差异,您可以使用每个提交的sha来完成。请参阅文档了解更多详细信息和此问题好的。

    另一方面,如果您需要查看格式化输出的差异,请使用latexdiff,这是一个很好的实用程序(用Perl编写),它可以获取两个乳胶文件并生成类似以下PDF格式的完全不同的输出(图像源):好的。

    >。好的。<P>您可以在单个命令中使用git latexdiff(例如<wyn>git latexdiff HEAD^</wyn>)将<wyn>git</wyn>和<wyn>latexdiff</wyn>(如果需要,还可以加上<wyn>latexpand</wyn>)组合在一起,以查看您的工作树和最后一个但只有一个提交的命令之间的差异。好的。</li>
<li><P>如果您用LaTex编写一个长文档,我建议将不同的章节分成各自的文件,并使用<wyn>\include{file}</wyn>命令在主文件中调用它们。这样,编辑工作的本地化部分更容易,版本控制也更容易,因为您知道每一章都做了哪些更改,而不必从一个大文件的日志中计算出来。好的。</li>
</ul>
<p>有效使用Git:</p>
<ul>
<li><P>使用树枝!或许没有更好的建议。我发现分支对于跟踪文本或工作的master分支机构应是您的主要工作机构,处于最新的"准备发布"状态,即,如果在所有分支机构中,有一个分支机构您愿意将您的名字写在上面,那么它应该是主分支机构。好的。

    如果你是研究生,分支机构也非常有用。任何一个研究生都会证明,导师肯定会有很多修正,其中大部分你不同意。然而,你可能至少要暂时改变它们,即使它们在讨论之后会被恢复。因此,在这种情况下,您可以创建一个新的分支advisor,并对它们的喜好进行更改,同时维护自己的开发分支。然后你可以将两者合并,然后挑选你需要的。好的。

  • 我还建议将每个部分拆分为不同的分支,只关注与您所在分支相对应的部分。当您进行初始提交(实际上是您的选择)时,当您创建一个新的节或虚拟节时,生成一个分支。当你不在某个分支上时,不要急于编辑另一个部分(比如3)。如果需要编辑,请提交这个,然后在分支之前签出另一个。我觉得这很有帮助,因为它将该部分的历史记录保存在自己的分支中,而且还可以一目了然地(从树上)告诉您某个部分有多旧。也许你已经在第3节中添加了需要调整到第5节的材料…当然,在仔细阅读的过程中,很有可能会观察到这些,但我发现一眼就能看出这一点很有帮助,这样当我对某一部分感到厌烦时,我就可以换档了。好的。

    下面是我的分支和合并的一个例子,来自最近的一篇文章(我在OSX上使用sourcetree,在Linux上使用命令行中的git)。你可能会注意到我不是世界上最频繁的提交者,我也不会一直留下有用的评论,但这不是你不遵守这些好习惯的原因。主要的信息是在分支中工作是有帮助的。我的想法、想法和发展是非线性的,但是我可以通过分支来跟踪它们,并在我满意的时候将它们合并(我还有其他分支,这些分支后来没有被删除)。我也可以"标记"提交,如果它们意味着什么(例如,期刊的初始提交/修订提交等)。在这里,我将它标记为"版本1",这是到目前为止草稿的位置。这棵树代表了一周的工作量。好的。

    enter image description here。好的。

  • 另一个有用的方法是对文档范围内的内容进行更改(例如在任何地方都将\alpha更改为\beta)自己提交。这样,您就可以在不回滚其他内容的情况下还原更改(有一些方法可以使用git来完成此操作,但是,如果可以避免,那么为什么不呢?).对序言的补充也是如此。好的。

  • 使用远程回购并定期将更改推到上游。使用免费服务提供商,如GitHub和BitBucket(后者甚至允许您使用免费帐户创建私人回购),如果您使用Git/Mercurial,则没有理由不使用这些服务。至少,把它当作辅助备份(我希望你有一个主备份!)为您的乳胶文件和服务,允许您继续编辑从您离开在不同的机器。好的。

好啊。


我也有类似的工作流程。尽管一次只处理一个分支,但我发现为不同的工作状态设置单独的分支是有益的。例如,想象一下,把一份好的论文草稿发给你的顾问。然后,你会有一个疯狂的想法!你想开始改变一些核心概念,重新工作一些主要部分,等等,所以你要分出一部分,开始工作。您的主分支机构始终处于"可发布"状态(或在该时刻尽可能接近)。所以,虽然你的另一个分支是疯狂的,并有一些巨大的变化,如果另一个出版商想看看你有什么,或你是一个学生提交一个会议,主分支总是可以发布,随时可以去(或准备展示你的顾问)。如果你的博士顾问想在早上第一时间看到草稿,是的,你可以存储/准备/提交你当前的更改,使用标签或搜索日志,但是为什么不保留单独的分支呢?!

假设您的主分支具有您工作的"可发布"状态。你现在想把它提交到几个同行评审的期刊上,每个期刊对相同的内容都有不同的格式要求,你希望他们回来时对如何编辑论文以适合他们的读者提出不同的小批评,等等。你可以很容易地为每个期刊创建一个分支,对期刊进行特定的更改,提交,当您收到反馈时,对每个单独的分支进行更改。

我还使用Dropbox和Git创建了您上面描述的系统。您可以在Dropbox文件夹中创建一个裸骨存储库。然后,您可以将任一台计算机推/拉到Dropbox,以在所有端保持最新。这个系统通常只在合作者数量较少时工作,因为如果人们试图同时推动Dropbox回购,就有可能出现腐败。

从技术上讲,您也可以在Dropbox文件夹中保留一个存储库,然后从中完成所有工作。不过,我不鼓励这样做,因为人们提到Dropbox在同步不断变化的文件(Gits内部文件)时遇到了一些问题。


我尝试将其作为bash函数来实现,我将其包含在我的~/.bashrc中,以使其始终可用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function git-latexdiff {    
    if [[ $# != 2 ]];    
    then      
        printf"\tusage: git-latexdiff <file> <back-revision>  
";    
    elif [[ $2 -lt 0
]];    
    then    
        printf"\t<Back-revision> must be positive
";  
    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(可在路径上找到)。找到pdflatexokular也很重要。

第一种是我处理乳胶的首选方法,所以你也可以把它改成latex。第二个是我的PDF阅读器,我想您应该在gnome下使用evince,或者其他一些解决方案。

这是一个快速版本,只考虑一个文档,这是因为使用Git,您将损失大量时间和精力来跟踪多文件的LaTex文档。你也可以让Git完成这项任务,但是如果你愿意,你也可以继续使用\include


另一种选择是使用Authorea,这是一种用于科学论文的Github。Authorea中的每一篇文章都是Git报告。你编写的乳胶被渲染到HTML5(以及PDF,当你编译时)。


如果您在Windows上,而不是安装程序,只需一个简单的bat脚本,那么可以将其用于版本差异。它在Windows10、Miktex 2.9上工作得很好:

https://github.com/redreamality/git-latexdiff