Git应该用于文档和项目管理吗?代码应该放在单独的存储库中吗?


68

我正在为一个小组项目启动一个Git存储库。将文档与代码存储在同一Git存储库中是否有意义-似乎这与git修订流程的本质冲突。

这是我的问题的摘要:

  • 如果将代码和文档都检入同一个存储库,Git修订样式会不会引起混淆?有经验吗?

  • Git非常适合文档版本控制吗?

  • 不是在问总体上是否应该将修订控制系统用于文档编制,而是应该使用。

感谢您到目前为止的反馈!


嗯,好的。谢谢您的澄清。我不明白为什么会出现问题,但是我对GIT并没有任何个人经验(只是理论上的理解),所以我会让具有更直接经验的人来回答这个问题。
Flimzy 2011年

1
我不太了解这个话题。您正在谈论软件文档并提交DVCS
Tim Post

可能取决于文档和您的需求。您是否需要差异文件,它是否可以处理差异格式?如果git确实提供了所需的服务。Beats有一个单独的文档管理系统...
钻机2012年

如果您的文档为纯文本格式-很好。如果是二进制格式,则本质上您需要一个了解二进制格式的版本控制系统-这是供应商以其最纯粹的形式锁定的格式。

Answers:


53

我们始终将文档存储在SVN中。实际上,我们的整个用户手册都是用LaTeX编写的,并存储在SVN中。我们之所以选择LaTeX,是因为它是基于文本的语言,并且易于显示逐行差异。

必要时,我们还会存储一些非文本格式的文件,例如Microsoft Office .doc文件,电子表格,.zip文件等...,但是当您看不到增量文件时,RCS的某些好处就会丢失差异

关键确实是要确保您的文档井井有条,以便人们在需要时可以找到(和更新)文档(和源代码)。


11
如果您是Microsoft商店,TortoiseSVN支持MS Office逐行差异。
菲尔(Phil)

2
放弃二进制doc格式将使世界变得更美好。o鉴于文档是纯文本格式,因此DVCS也不应该有任何实际问题。
Kai Inkinen 2011年

哦,这是我第一次听说TortoiseSVN和doc文件,因此+1。不知道将来是否会在Tortoise [AnyDVCS]上使用。
Kai Inkinen 2011年

@Phil:TortoiseSVN如何做到这一点?doc-diff查看器是否与SVN客户端集成在一起,或者可以单独使用?
Flimzy 2011年

1
一个不错的选择是使用Pandoc,以便您的大多数文档都位于Markdown中,但关键部分仍然可以使用TeX。由于它将Markdown编译为LaTeX,因此结果看起来相同。但是,这也会使您将其导出为不同的格式,并使源代码更易于阅读。
迪洪·杰维斯

22

好吧,这取决于您使用哪种格式的文档。如果它是基于文本的东西,那一切都很好。

Git还可以存储二进制内容,并且您可以跟踪修订,但是diff输出没有意义。

也可以将文档存储在代码本身中,例如perldoc pod,java也为此提供了一些格式/注释。


我同意,虽然可以存储非文本文档,但是如果您存储文本,则git会做得更好。有人说过差异驱动程序知道如何对单词(或类似文件)进行差异化,但是我不确定它是否已实现
Sverre Rabbelier11年

尽管Word将其格式从二进制移到了XML。
cledoux 2011年

3
@ karategeek6 Word的“ XML”格式不易阅读。甚至近似地,一行文本也不对应于Word XML的一行。因此,它也可能是二进制的。

您可以指示Word将输出保存为未压缩的XML。选择Save As,然后选择Word XML Document (*.xml)而不是默认值Word Document (*.docx)。XML非常复杂,因此不能保证更改将易于阅读,但至少不会是二进制的。
Kyralessa

>,但diff输出将没有意义。如果有差异,我们可以并排打开文档的2个修订版本,然后用眼睛比较:)
路加福音

14

我无法想象为什么您认为使用git或任何其他版本控制系统进行文档编制可能会出现问题。就像源代码一样,文档应具有完整的历史记录,并能够在必要时恢复为较早版本。版本控制系统是完美的选择。


6
仅当文档为文本形式时。二进制Blob无法完全受益于版本控制。

2
@ThorbjørnRavnAndersen:即便如此,除非您具有二进制特定的版本控制系统,否则甚至最好将二进制文件保存在Git中,而不是单独保存。
迪洪·杰维斯

@TikhonJelvis我不怀疑将二进制文件放在git中是否是一个好主意-如果它们是原始工件,那就是。但是,请尝试在Word文档上运行“ git diff”。

@ user1249:您可以将2版修订“导出”到桌面,例如my_docs_rev15.docx和my_docs_rev14.docx,然后并排打开它,并通过您的眼睛和大脑进行比较,这并不难:)
路加福音

14

显然,使用某种版本控制系统来存储文档是不费吹灰之力的。问题中更有趣的部分是将文档存储在SAME位置作为源代码是否是个好主意?这里可能的问题是,在这种情况下,可能很难为代码和文档设置不同的访问权限。而且在许多业务案例中,人们将需要访问文档而不是源代码,例如市场营销或BA部门。


3
是的,“相同位置”是该问题的关键部分之一!

如果可以管理,则相同的位置会很好,因为它避免了拥有部落知识(知道要看的地方)或需要去搜索东西的位置的需求。
quick_now 2011年

他们可能不需要访问代码,但是对他们来说访问该权限应该不会受到伤害。他们不必看它。无论如何,机密通常不应该在版本控制中。
bdsl

9

在我工作的公司中,我们将文档放入SVN中。但是,在发生了几次冲突并需要共享后,我们决定将其移至Mediawiki。

起初是追踪,之后转移到Mediawiki,因为它更易于使用...

SVN的主要问题是我们拥有SVN授权系统的共享原因。


2
您不是说MediaWiki,即Wikipedia使用的Wiki引擎吗?

@Martijn,我会承担如此
张栋梁KlestrupRöijezon

@Martijn:是的,编辑
2011年

我宁愿坚持使用Wiki,也不愿发送很多不是SCM所需的文件,但这更多与个人喜好有关。您可以做更多的事情。我特别喜欢Foswiki及其基于网站/基于项目的模板。很高兴有人指出由于问题而决定使用Wiki :) +1。
Oeufcoque Penteano 2012年

9
  • 在存储库中不仅仅是源代码是一件好事。

    它将所有资源组合在一起,并将项目变成一个凝聚的,集中的实体,而不是分散的文件集合。贡献者/员工知道在哪里找到所有内容,而不是发送“我在哪里更改功能x的文档?” 电子邮件。

    您将需要使事情井井有条。对分离系统srcimagesdocs。您始终可以将a添加.gitignore到目录中以保持存储库和历史记录的清洁。由于Git提交基于文件,*您可以根据需要将源代码更改与文档更改脱钩。

  • 正如其他人所说,Git只要基于文本,就非常适合文档版本控制。

  • 我完全同意; 文档应与代码一起进行版本控制。

我的信誉来自于成为GitHub用户并致力于一个项目并探索许多其他项目。以我的经验,一个完整,统一的项目很容易从一个半失误的项目中分辨出来。我尽可能将所有项目都包含在单个目录中。


*这不是很准确,因为有多种方法可以指定要提交的文件部分这是一个示例)。


4

我来到这里时遇到了类似的问题。我们来自SVN环境,在这里,将与项目相关的所有材料都保存在同一存储库中基本上是一件容易的事。由于SVN的性质,您可以轻松检出存储库的某些部分,因此,如果您只需要源代码(例如,网站部署),那就没问题了。

使用Git,情况就不同了。签出始终在根级别,因此,如果要将所有内容放入同一存储库,则最终将始终具有相同的目录结构。我遇到的一种方法是将所有内容放在单独的分支中,即,您具有代码分支(通常是您的常规master,develop等分支)和doc分支,其具有自己的单独目录结构。我不确定这是否是最好的主意,但这是一个建议,可以绕开我认为是您的问题基础的问题。


具有根本不同的目录结构的不同分支对我来说具有非常不好的代码味道。我将所有内容都放在一个存储库中,以使贡献者可以更轻松地添加代码和文档的组合。实际上,有文化的编程(谷歌!)就需要它。
tbc0

分发软件包时,我偏爱.deb样式,该样式使我可以将可执行文件下载到所有服务器,而我的开发箱也包含文档软件包。
tbc0

1

我使用内部文档的Wiki ...获取修订版以及突出的访问权限/易于编辑。如果文档不同步,请立即进行更新。对于最终用户文档,请考虑使用Madcap Flare之类的专业工具。他们使用XML方言来共享,编写和转换文档。


-1

在代码中,思想通常是逐行分开的。我倾向于用换行符写文档。当我提交这些文件时,行长为整段。读起来不是很有用git diff。这就是我在Google搜索并找到此页面时试图解决的问题。感谢Arne Hartherz向我介绍了git diff --word-diff。您可能会更喜欢git diff --color-words

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.