Iva*_*van 261 git latex git-workflow
我在LaTeX写了一篇很长的文档.我有自己的工作电脑和笔记本电脑,我都在工作.我需要保持两台计算机之间的所有文件同步,并且还希望保留修订历史记录.我选择git作为我的DVCS,我在我的服务器上托管我的存储库.我也使用Kile + Okular进行编辑.Kile没有集成的git插件.我也没有在这篇文章中与任何人合作.如果由于某种原因我的服务器无法访问,我也在考虑在codaset上放置另一个私有存储库.
在这种情况下,推荐的工作流程是什么?如何在这个工作方案中安装分支?有没有办法比较同一个文件的两个版本?使用藏匿怎么样?
abc*_*bcd 376
有效管理git + latex工作流程的第一步是对LaTeX习惯进行一些更改.
首先,将每个句子写在一个单独的行上.Git被编写到版本控制源代码中,其中每一行都是不同的并且具有特定的目的.当您在LaTeX中编写文档时,通常会根据段落进行思考并将其写为自由流动的文档.但是,在git中,对段落中单个单词的更改将记录为整个段落的更改.
一种解决方案是使用git diff --color-words
(参见我对类似问题的回答,其中我展示了一个例子).但是,我必须强调,拆分成单独的行是一个更好的选择(我只是在答案中提到它),因为我发现它导致非常小的合并冲突.
如果你需要查看代码差异,请使用git的原生差异.要查看两个任意提交(版本)之间的区别,可以使用sha
每个提交的s来完成.有关详细信息和此问题,请参阅文档
另一方面,如果您需要查看格式化输出的差异,请使用latexdiff
哪个是一个出色的实用程序(用perl编写),它接受两个乳胶文件,并在pdf中产生一个整齐的差异输出(图像源):
您可以使用git-latexdiff在单个命令中组合git
和latexdiff
(加上(latexpand
如果需要))(例如,查看工作树和最后一个提交之间的差异).git latexdiff HEAD^
如果您在latex中编写一个长文档,我建议将不同的章节拆分为自己的文件,并使用该\include{file}
命令在主文件中调用它们.通过这种方式,您可以更轻松地编辑工作的本地化部分,并且更容易进行版本控制,因为您知道对每个章节进行了哪些更改,而不必从一个大的日志中找出它.文件.
使用分支!.我可能没有更好的建议.我发现分支对于跟踪文本的"不同想法"或工作的"不同状态"非常有帮助.该master
分支应该是你工作的主体,在其最新的"准备发布"状态,即,如果所有的分支,如果有一个你愿意把你的名字就可以了,它应该是主分支.
如果您是研究生,分支机构也非常有帮助.正如任何研究生都会证明的那样,顾问肯定会有许多更正,其中大部分都是你不同意的.然而,您可能会被期望至少暂时改变它们,即使它们在讨论之后被还原.因此,在这种情况下,您可以创建一个新分支advisor
并根据自己的喜好进行更改,同时维护自己的开发分支.然后你可以合并两个和樱桃挑选你需要的东西.
我还建议将每个部分拆分为不同的分支,并仅关注与您所在分支对应的部分.当您进行初始提交时(您的选择,确实)创建新的部分或虚拟部分时,会生成一个分支.当你不在其分支上时,抵制编辑不同部分(例如,3)的冲动.如果你需要编辑,提交这个,然后在分支之前签出另一个.我发现这非常有用,因为它将该部分的历史记录保存在自己的分支中,并且一目了然(从树中)告诉您某个部分的年龄.也许你已经在第3部分添加了需要调整到第5部分的材料......当然,在仔细阅读的过程中,很可能会观察到这些材料,但我发现看到这一点很有帮助,所以我可以如果我对一个部分感到厌倦,就会换挡.
这是我的分支和合并来自最近的一篇论文的例子(我在OS X上使用SourceTree,在Linux上使用命令行中的git).你可能会注意到我不是世界上最常见的提交者,也不会一直留下有用的评论,但你没有理由不遵循这些好习惯.主要的外卖信息是在分支机构工作很有帮助.我的思想,想法和发展是非线性的,但是我可以通过分支跟踪它们并在我满意的时候将它们合并(我还有其他分支导致无处可去,后来被删除).如果它们具有某些意义,我也可以"标记"提交(例如,对期刊的初始提交/修订提交/等).在这里,我将其标记为"版本1",这是草案截至目前的位置.这棵树代表了一周的工作价值.
另一个有用的事情是自己进行文档更改(例如更改\alpha
到\beta
任何地方)提交.这样,你可以恢复更改,而不必回滚其他东西(有很多方法你可以使用git,但是嘿,如果你可以避免它,那么为什么不呢?).对于序言的增加也是如此.
使用远程仓库并定期向上游推送您的更改.有了github和bitbucket等免费服务提供商(后者甚至允许你用免费帐户创建私人回购),如果你正在使用git/mercurial,没有理由不使用这些.至少,将它视为辅助备份(我希望你有一个主要的备份!)用于您的乳胶文件和一项服务,允许您从另一台机器上的位置继续编辑.
Die*_*ego 12
我也有类似的工作流程.即使一个分支正在处理,我发现为不同的工作状态分别设立分支是有益的.例如,假设向您的顾问发送一份好的草稿草稿.然后,你得到一个疯狂的想法!你想开始改变一些核心概念,重新修改一些主要部分等等.所以你分支并开始工作.您的主分支始终处于"可释放"状态(或者在那个时刻尽可能接近).因此,虽然你的另一个分支是疯狂的并且有一些重大的变化,如果另一个发布者希望看到你有什么,或者你是一个学生提交到会议,主分支总是可以发布,准备好去(或准备展示你的顾问).如果您的博士生顾问想在早上看到草案第一件事,是的,您可以存储/暂存/提交您当前的更改,使用标签或搜索日志,但为什么不保留单独的分支?!
让我们说你的主分支具有你工作的"可释放"状态.您现在想要将其提交给多个同行评审的期刊,每个期刊对相同的内容都有不同的格式要求,并且您期望他们回来时会有几个不同的小批评,关于如何编辑论文以适合读者等.您可以轻松地为每个日记创建分支,进行日记帐特定更改,提交,并在收到反馈时在每个单独的分支上进行更改.
我还使用Dropbox和git创建了上面描述的系统.您可以在Dropbox文件夹中创建一个简单的存储库.然后,您可以从任一计算机推/拉到您的保管箱,以保持最新状态.此系统通常仅在协作者数量较少时才起作用,因为如果人们试图同时推送到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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,需要latexdiff
安装此功能(并在路径中找到).找到pdflatex
和找到它也很重要okular
.
第一个是我首选的处理LaTeX的方法,所以你也可以将它变为特色latex
.第二个是我的PDF阅读器,我想你要evince
在gnome或其他解决方案下使用.
这是一个快速版本,考虑到单个文档,这是因为使用git,您将失去跟踪多文件LaTeX文档的大量时间和精力.您也可以让git执行此任务,但如果您愿意,也可以继续使用\include