12

我正在做一些初步工作,以调查 DVCS(如 Git、Hg、Bazar 之类)如何在科学编程过程中提供帮助,尤其是对研究生而言。我认为我在这方面处于非常有利的位置,因为我已经编程了好几年,目前正在开始一个自然科学的硕士课程。目标是在一两个月内对此进行简短的介绍。

在我看来,除了源代码控制的明显优势外,DVCS 目前还为研究生的日常生活提供了以下改进:

  1. 分枝:

    这是最大的。从观察 DVCS 实践可以清楚地看出,廉价分支主要鼓励新功能的实验。科学编程就是实验。可以创建不同的分支来调整参数或算法。这一点尤其重要,因为大多数科学代码在他们的一生中都没有看到过一次重构(大多数研究生甚至不知道它是什么),所以去不同分支的能力会给典型的疯狂带来一些方法。快速提交也可能意味着使用提交评论作为实验室笔记本的替代品。计算结果可以标记为特定的提交哈希码,以进行可重复的研究。

  2. 推送到服务器:

    由于现在大多数科学代码都在某种集群上运行,因此 DVCS 可以用作某种更高级的 Rsync,许多人已经在使用它来将“生产”代码推送到 HPC 集群。这与分支相结合,无需离开即可轻松运行多个版本的代码

  3. 论文合作:

    需要我多说?拥有多个作者的论文的运行方式与小型开源项目完全一样。当作者都用 LaTex 写作时,论文上的协作应该是自然而然的,如果写作是用 Word 之类的东西完成的,则会带来额外的复杂性。这是提交评论可能发挥更大作用的地方。

我的问题是,您认为 DVCS 可以为科学程序员做出什么贡献?我在社区中看到很多关于转向源代码控制的讨论,但大多数人仍在研究 Subversion。从我粗略的笔记来看,听起来 DVCS 应该是新研究生的完美工作流程范例。我的想法有问题吗?或者科学编码只是落后太多,甚至没有听说过DVCS 工具?


有关的:

4

3 回答 3

4

培训是一个真正的问题。我认识不少粒子物理学家(拥有大型编程项目的大科学),他们对源代码控制的总知识是如何运行cvs checkoutcvs updatecvs commit.

是的,CVS。我认识一位软件组负责人,因为这些人,他推迟了向 Subversion 的迁移。

在下一级技能中,他们还知道diffandstat命令以及如何指定分支或标签,但可能会避免创建或合并分支。

如果您计划引入 DVCS,请计划一个强化的、持续的培训和支持计划。科学家(或至少物理学家)通常很少接受计算机科学方面的正式培训,并且可能只有最模糊的软件过程概念。

于 2009-04-27T14:58:52.000 回答
2

关于你的主要观点:

  • “DVCS 的明显优势”:值得重申的是,特别是在学术环境中,可能有严格的 IT 规则不允许外部连接,DVCS 允许使用本地存储库。这意味着您不必“连接”到一个中央存储库即可访问项目的完整历史记录,这可能是 DVCS 对科学程序员的主要贡献。

但这也意味着您必须制定某种政策,以允许任何给定的工作“聚集在一起”并合并到一个存储库中,这并不意味着只有一个“中央”库:可以想象几个中央存储库对于几个大项目。尽管如此,这仍需要管理(不可低估)。

由于您的主要第一点,“整合”过程可能非常困难:

  • 分支:学生需要仔细分支(因为它很容易)。我看到了名为“toto”、“Monday”、“myName”、...的分支的份额:一旦发布到另一个(更中心的)repo,我们应该如何处理这些?如果要合并 20 多个分支以最终确定一个通用代码,那么该过程可能会很快变得容易出错。

对您的其他观点的快速评论:

  • 部署(您称之为“推送到服务器”):是的 DVCS 可用于某种部署,但这意味着您已经组织了您的存储库以包含某种“发布组件”(您要推送的文件集)服务器)并且您已经对它们进行了版本控制。发布管理包括许多其他无法在 DVCS 中全部记住的步骤,例如去变量化过程,在该过程中,您将配置文件中的变量替换为适合目标服务器的实际值(端口号、本地路径……) . 您可以尝试通过分支直接管理那些配置文件,但根据我的经验,它很快就会变得太复杂而无法遵循。

  • 协作:这不是 DVCS 保留的。(VCS 也提供它们)。请注意,对于某些格式(Word 文档),它们的内部修订系统可能更有效。

于 2009-04-27T05:56:09.977 回答
1

用于科学编程的 DVCS 的一个大问题是二进制数据。通常情况下,科学编程需要输入/输出巨大的文件,并且在我所知道的每个 DVCS(bzr、hg、git)上都会很快扼杀性能。这是目前 svn 更好的一个领域。

我认为 DVCS 对论文也很有用,但这意味着你的合作者也知道 DVCS。

于 2009-04-27T04:49:20.577 回答