我在 CS 系教授第三门必修的入门课程。我的一项家庭作业要求学生加快他们为之前的作业编写的代码。十倍的加速是常规的;100 或 1000 的因数并非闻所未闻。(对于 1000 倍的加速,你必须在 malloc() 中犯过新手错误。)
程序由一个序列改进是小的变化。我要求学生记录和描述每一个变化和由此产生的改进。
当你在改进一个程序时,也有可能破坏它。退出不是很好吗?
您可以看到我的意图:我的学生将从版本控制中受益匪浅。但有一些警告:
- 我们的计算环境被锁定。任何依赖于中央存储库的东西都是可疑的。
- 我们的学生超负荷工作。不仅是课程,还有工作、运动、音乐,应有尽有。对于他们来说,使用新工具必须非常简单并且有明显的好处。
- 我们的学生大部分工作都是成对完成的。在帐户之间来回获取位是有问题的。分布式版本控制也能解决这个问题吗?
- 复杂性是敌人。我知道建立一个 CVS 存储库太令人费解了——我自己仍然有麻烦,因为我每年只做一次。我听说SVN更难。
以下是我对现有系统的评论:
- 我认为中央版本控制(CVS 或 SVN)被排除在外,因为我们的学生没有创建可以与其他学生共享的存储库所需的管理权限。(我们被 Unix 文件权限困住了。)另外,在 CVS 或 SVN 上的设置太难了。
- darcs 很容易设置,但你如何分享东西并不明显。darcs send(通过电子邮件发送补丁)似乎很有希望,但不清楚如何设置它。
- git 的介绍性文档不适合初学者。就像 CVS 设置一样,我自己也遇到了麻烦。
我正在征求有关初学者使用什么源代码控制的建议。我怀疑我们可以找到资源来在现有系统上加上一层薄薄的外衣并简化现有文档。我们可能没有资源来编写新文档。
那么,什么是真正易于设置、提交、恢复和与合作伙伴共享更改,但不一定要易于合并或大规模工作?
一个关键的限制是编程配对必须能够彼此共享工作并且只能彼此共享,并且配对每周都在变化。我们的基础架构是带有 netapp 文件管理器的 Linux、Solaris 和 Windows。我怀疑我的 IT 员工想要为每对学生创建一个 Unix 小组。有没有我忽略的更简单的解决方案?
(感谢接受的答案,由于它对Git Magic的出色参考以及有用的评论而击败了其他人。)