用Git写论文

我打算用Git来写乳胶的论文。 由于Git是专门为软件开发而devise的,对我的需求是否可行? 如果对我来说这是一个不错的select,那么Git中有什么特别的和独特的function,是写论文的理想select。 另外我想知道在进入Git工作stream程之前应该采取哪些预防措施。 我是Git的一个完整的初学者,所以在开始之前我的起点应该是什么。

有一些技术上的考虑和最佳实践。 我正在为第二个,特别是写你的论文和/或论文。 对于技术上的,你可以检查任何git教程。

  1. 为你的论文定义目录结构。 您可以稍后更改它,并使用git来跟踪更改。 有一个好的结构会让你的生活更轻松。

  2. 使用多个文件(在LaTeX中使用包含和/或input)。 您可以按照章节或章节拆分它们。 这将更容易跟踪涉及论文特定部分的更改(例如git log content/introduction.tex )。

  3. 只跟踪您要触摸的文件,而不是自动生成的文件。 创build一个合适的.gitignore文件将会帮助你很多 (LaTeX生成大量的工作文件)。

  4. 就像在程序中一样,微型提交也就是:每个想法/特性/修复/活动一个提交。

  5. 每次你提交,写出有意义的消息(高级别),解释你在每一个变化中想要达到的目标。 一个星期后,你可能不记得你试图完成什么。

  6. 跟踪每一个活动/想法/修复[见(4)和(5)]可以非常有助于知道你已经做了多less(使用git log )。 您可以根据git log为您的主pipe编写预先报告。 更重要的是,您可以与您的主pipe(使用Web界面)共享资源库,并且可以检查您在论文中所做的任何事情。 在下一次会议中,他们会知道会发生什么(这取决于你的主pipe在跟随RSS时多么喜欢)。

  7. 使用git对于保持良好的心情是有用的(有时候你会觉得你没有做太多的事情,但是跟踪每一个变化将会帮助你保持透彻)。

  8. 对于您发送的每个进度报告,请创build一个标签。 对于下一个报告,您可以签出版本和应用latexdiff 。 跟踪您为修订而提交的版本之间的更改将很有用。 这也将帮助你检查你是否处理了你收到的前一份报告的反馈意见。

最后但并非最不重要的,我build议你阅读“ 一个成功的Git分支模型 ”。 这是一个非常简短的git工作stream程的文章。 当你写论文的时候,你可以运用相同的概念。 例如,如果您正在编写实验,则可以为其创build一个分支,并在“ 准备好 ”之后将其合并。 如果您以后需要重新访问,那么可以更容易地看到所涉及的变化以及原因。

当我写博士论文的时候,我用git来pipe理文档及其所有的数据,我很高兴我这样做了,不仅仅是因为它可以很容易地写出一个脚本来描绘你的进度 ,重新一起;)我发现的主要优点是:

  • 由于git是一个分布式的版本控制系统,在多台机器上工作很容易。 如果您需要在台式机上使用笔记本电脑上的最新版本,则可以直接从笔记本电脑中pull出来在那里工作。 当你离开,你去你的笔记本电脑,并从台式机拉。
  • 如果你在多台机器上工作,那么你实际上有一个最近的工作备份(包括完整的历史logging),如果你想创build更多的备份,你可以推到一个新的裸仓库(正如VonC的答案指出的那样)。
  • 知道以前的版本是安全存储的,您可以对文档进行大的修改,如果您想要检索旧版本,那很容易。
  • 当你离线时能够提交到你的仓库是非常有用的,特别是因为没有互联网访问使得它更容易编写;)我还保存了我在同一个仓库中引用的所有论文的PDF,使它更容易工作离线,虽然这大大夸大了存储库,所以有些人可能会提出反对意见。

我会给的主要build议是:

  • 经常提交,并确保通过添加所需的文件或将其列在.gitignore ,保持git status的输出为空。 你不想冒险重要的文件未跟踪。
  • 切勿使用历史重写命令(例如git rebase ),为了安全起见,切勿使用git的危险命令,如git reset --hardgit checkout -f 。 没有人会看到你的完整的存储库,所以你不关心历史是什么样子 – 更重要的是你不要做任何可能会丢失(或者使得更难获取)你的工作的东西。
  • 当你看着你的版本之间的差异,使用--color-words选项来git diff 。 否则,你的差异将是基于行的,如果你在LaTeX中重新格式化一个段落,很难看到真正的变化是什么 – git diff --color-words忽略了换行符,只显示旧的红色的字和绿色的新字。

¹…与LyX而不是直接在LaTeX中,但问题基本相同。

在DVCS中 ,“ 工作stream程 ”是指:

  • 合并工作stream程(你不需要那么多)
  • 出版工作stream程(推送到远程回购)

使用您的本地.git回购,您将能够与以前的版本进行比较(可以派上用场)
但是DVCS的好处是:

  • 您可以通过推送到远程仓库来保存您的工作(或者为了备份目的,捆绑 )
  • 你可以在两台不同的PC之间同步你的工作(比如在“ 如何将本地git版本库推送到另一台计算机? ”或“ 笔记本电脑与PC之间的git服务器(MS Windows 7) ”)。
    然后,一旦同步完成(通过git push ),您可以将您的第二个环境完全脱机,并且还可以从您的repo的完整历史logging中受益。
    这就是DVCS重要的地方。

这主要只是作为一个评论,但结果有点太长,所以我把它作为一个答案张贴。

我使用darcs作为硕士论文,过去一直在使用RCS,CVS和SVN进行大量的文档/写作项目。 所有这些工具都提供了我想要的基本function – 能够检查我的更改,回顾历史,在开始写新内容时检查“撤消点”。

对于使用版本控制编写文档有一些陈旧的build议。 使用纯文本格式对于获得理智的差异非常重要。 另外,我提到的一个有用的提示(Kernighan的IIRC,关于在版本控制中保留Troff源代码)是为了确保所有行都相当短。 我倾向于按照每行几行的方式进行操作,注意在一行中保留一个特定的子句或习惯用法,这样如果我决定稍后修改这个特定的细节,那么差异将会很小。

Git会工作。 乳胶是有效的源代码,所以它应该是非常好的。

也就是说,Git虽然很棒,但它的学习曲线稍微陡峭,因为它可以与很多人合作,处理不同的历史等等。 它真正的巨大优势在于合并冲突(如果我更改文件而其他人更改文件,并且我们都尝试上传/提交给某个服务器,会发生什么?)。

如果你只是想对你的论文进行版本分析,那么你甚至不可能碰到冲突的合并案例(因为你是唯一编辑的),更不用说多个历史案例了。
我会使用像SVN这样简单的东西,尽pipe我所描述的两件事情更糟糕,但它更符合您的需求,并且更容易学习。

此外,git将所有文件都存储在您所在文件夹的.git文件中。如果您删除该文件夹,则数据将消失。