一段时间以来,我一直使用它pdfLaTeX
来撰写求职申请,它通常包含 3 个 pdf 文档,所有文档都是用以下方式创建的LaTeX
:
- 动机信
- 简历和更多关于我的项目的信息
- 文凭、证书等
我现在注意到,使用不同版本的版本控制来记录差异或记录更改的内容会很好。
我已经svn-multi
在我的论文中使用了版本控制包,但这只是一个“线性”过程,其中我保存了一个“快照”并且没有并行的不同版本。
=> 那么在以下条件下,SVN 处理这些文档的适当工作流程是什么:
- 在 .tex 源文件中应该明确指出哪个文档/版本被用作实际文件的“模板”,但这应该不是在 pdf 中可见
(以避免潜在雇主看到“啊,这是申请编号 323a...”) - 我将在我的 svn 存储库之外的“某处”为每个应用程序创建一个目录,
-> 我认为这将由现有版本完成export
- 对吗?
(该目录还将包含有关公司、工作等信息的其他文档,这些信息不会由 svn 管理) - 如果文档完成了,通过‘更新’将它们保存在存储库中是否正确?
- 我如何创建不同的“主要版本”
(例如,一个版本专注于 IT 业务中的工作,更强调我的计算机技能,另一个版本专注于更“技术性”的工作,而这些计算机技能不会详细显示) - 如果我在每个应用程序的自定义目录中将 的名称更改
LetterOfMotivation.tex
为 ,这会给 SVN 带来问题LetterOfMotivation_CompanyXY.tex
吗?
我想当我这样做然后将其发送回存储库时,SVN
会感到困惑并且不会将新文档识别为 的更改版本LetterOfMotivation.tex
?
抱歉,这听起来像是愚蠢的问题,但到目前为止,我还没有“真正”使用 svn 的经验。:-(
答案1
有很多问题!
大多数问题已经在 TeX-SE 上得到解答,
我不认为有 TeX 解决方案可以解决这个问题,但你可以编写自己的提交后 SVN 钩子来修改所有源文件,并在每个文件的开头添加版本字符串、提交日期和其他内容作为注释。请参阅这关于如何创建存储库挂钩。诚然,这不适合胆小的人,您需要编写一两个脚本。
另一种解决方案是将 SVN 信息保存为 PDF 元数据,然后将其发送给雇主时删除。编写元数据很容易 - 请参阅这个问题,例如。你可能需要类似
pdftk
(权威的 PDF 操作工具)来完成这项工作,同样使用一个小脚本。是的,
svn export
如果您不想在导出的树中包含 SVN 元数据,那么这就是方法(当我将东西发送给其他人,或者想要进行不会返回到同一分支/存储库的更改时,我会这样做)。如果您愿意,您可以随时提交更改,但有关先前修订的所有信息都会在导出的树中丢失。不!您发出
svn commit
将更改写入存储库的请求。svn update
将更新您的本地树从存储库,这将清除您所做的所有更改。对于 SVN 当前未跟踪的新文件和目录,您必须svn add
先执行。这是在存储库中维护不同分支的问题,使用 SVN 会得不偿失——除非你不介意将它们合并回去,在这种情况下没问题。SVN 手册有更多信息关于分支和合并。如果你非常关心分支,SVN 在这方面就很糟糕了——Mercurial 或其他分布式版本控制系统可以以更少的麻烦进行合并。
这是通过 完成的
svn rename
。不要使用操作系统提供的常规文件重命名,否则 SVN 会删除第一个版本,然后添加另一个版本,而这并不是您想要的。但可能有更好的方法来处理这个问题:使用 SVN 标签。标签只是特定修订版本的更具描述性的标签。例如,您的程序版本 1.0 取自修订版本 32167,而 1.1 取自修订版本 33341。您无需记住修订版本号,而是可以使用标签来准确检查用于生成特定版本的代码。您可以根据自己的情况执行相同的操作 - 为发送给公司(例如)的每个修订版本添加一个标签,
Company XYZ-a
然后使用常规 SVN 机制来检索您想要使用的特定版本。
现在,我正在查看这些答案,我越来越确信 SVN 不是适合您的正确版本控制系统。如果您计划进行广泛的分支和合并,并同时维护大量不同的版本,Mercurial 可能git
是更好的选择。这里是 Joel Spolsky 编写的出色的 Mercurial 教程,它将以简单的术语解释您需要了解的有关 Mercurial 的所有信息。