我正在研究DVCS(像Git,Hg,Bazar这样的人)如何在科学编程过程中提供帮助,特别是研究生。我认为自从我编程了几年以来,我已经处于相当有利的位置,目前正在开始自然科学硕士课程。目标是在一两个月内对此进行简短介绍。
据我所知,除了源控制的明显优势外,DVCS目前还为研究生的日常生活提供了以下改进:
分支:
这是最重要的一个。从观察DVCS实践可以看出,廉价分支主要是鼓励对新功能进行实验。科学编程完全是关于实验的。可以创建不同的分支来调整参数或算法。这一点尤其重要,因为大多数科学代码在他们的一生中都没有看到过一次重构(大多数研究生甚至都不知道它是什么),所以去不同分支的能力会给典型的疯狂带来一些方法。快速提交也可能意味着使用提交注释作为实验室笔记本的替代品。计算结果可以标记为特定的提交哈希码,以便进行可重复的研究。
推送到服务器:
由于现在大多数科学代码都是在某种集群上运行,因此DVCS可以用作某种更高级的Rsync,许多人已经将其用于将“生产”代码推送到HPC集群。这与分支相结合,可轻松运行多个版本的代码,而无需离开
论文合作:
需要我说更多吗?具有多个作者的论文与小型开源项目完全相同。当作者都在LaTex中写作时,论文上的协作应该是一个自然的选择,如果用像Word这样的写作来完成写作会带来额外的复杂性。这是提交评论可能发挥更大作用的地方。
我的问题是,您认为DVCS能为科学程序员做出什么贡献?我看到很多关于转向社区源代码控制的讨论,但大多数人仍在研究Subversion。从我粗略的笔记来看,听起来DVCS应该是新毕业生的完美工作流程范例。我的想法有缺陷吗?或者科学编码是否仅仅落后于甚至听说 DVCS工具?
相关:
答案 0 :(得分:4)
培训是一个真正的问题。我认识很多粒子物理学家(大型编程项目的大科学),他们对源代码控制的全面了解是如何运行cvs checkout
,cvs update
和cvs commit
的幼稚版本。
是的,CVS。我认识一位软件组负责人因为这些人而推迟了Subversion。
在下一级技能中,他们也知道diff
和stat
命令以及如何指定分支或标记,但可能会避免创建或合并分支。
如果您计划推出DVCS,请计划密集的持续培训和支持计划。科学家(或至少是物理学家)通常几乎没有接受过计算机科学的正规培训,并且可能只有最模糊的软件过程概念。
答案 1 :(得分:2)
关于你的要点:
但这也意味着你必须有某种政策才能让任何特定的工作“聚集”并合并到一个存储库中,这并不意味着只有一个“中心”基础:人们可以想象几个大项目的几个中央回购。不过,这需要管理(不要低估)。
由于您的主要第一点,“整合”过程可能非常困难:
快速评论您的其他观点:
部署(你称之为“推送到服务器”):是的DVCS可以用于某种部署,但这意味着你已经组织了你的repo以包含某种 "release component" (您要在服务器上推送的文件集)并且您已将其版本化。并且发布管理包括许多其他步骤,这些步骤不能全部记录在DVCS中,例如,在变量化过程中,您将配置文件中的变量替换为适合目标服务器的实际值(端口号,本地路径,......) 。您可以尝试管理直接通过分支机构评估的配置文件,但根据我的经验,它很快就变得太复杂了。
协作:这不是DVCS保留的。 (VCS也提供它们)。请注意,对于某种格式(Word文档),其内部修订系统可能更有效。
答案 2 :(得分:1)
DVCS用于科学编程的一个大问题是二进制数据。通常情况下,科学编程需要巨大文件的输入/输出,并且在我知道的每个DVCS(bzr,hg,git)上非常快速地杀死性能。这是svn目前要好得多的一个领域。
我认为DVCS对论文也很有用,但这意味着你的合作者也知道DVCS。