我在计算机科学系教授第三门必修的入门课程。我的一项家庭作业要求学生加快为先前作业编写的代码。十分之一的提速是例行的;100或1000的系数并非闻所未闻。(要使速度提高1000倍,您必须使用malloc()犯了菜鸟错误。)
程序被改进的顺序是很小的变化。我要求学生记录并描述每项更改及其带来的改进。
在改进程序时,也有可能破坏它。退出不是很好吗?
您可以看到我要做什么:我的学生将从版本控制中受益匪浅。但是有一些警告:
- 我们的计算环境已锁定。任何依赖中央存储库的东西都是可疑的。
- 我们的学生超负荷工作。您不仅可以命名课程,还可以找到工作,运动,音乐。对于他们来说,使用新工具必须非常简单,并且必须拥有明显的好处。
- 我们的学生成双完成大部分工作。在帐户之间来回交换比特是有问题的。分布式版本控制也可以解决此问题吗?
- 复杂性是敌人。我知道建立CVS信息库太令人困惑了-我自己仍然遇到麻烦,因为我每年只这样做一次。有人告诉我SVN更加困难。
这是我对现有系统的评论:
- 我认为排除了中央版本控制(CVS或SVN)是因为我们的学生没有创建可以与其他学生共享的存储库所需的管理特权。(我们受制于Unix文件权限。)而且,在CVS或SVN上进行设置也太困难了。
- darcs设置起来很容易,但是共享方式却并不明显。darcs send(通过电子邮件发送补丁)似乎很有前途,但尚不清楚如何设置它。
- git的入门文档不适合初学者。像CVS设置一样,我自己也遇到了麻烦。
我正在为初学者使用哪种源代码控制提出建议。我怀疑我们可以找到资源在现有系统上放置薄薄的饰面并简化现有文档。我们可能没有资源来编写新文档。
那么,什么是真正易于与合作伙伴进行设置,提交,还原和共享更改的,但是不必很容易合并或大规模地进行呢?
一个关键的制约因素是,编程对必须能够共享工作彼此,只有彼此,并且对每个星期换一次。我们的基础架构是具有netapp文件管理器的Linux,Solaris和Windows。我怀疑我的IT员工是否想为每对学生创建一个Unix组。有没有我忽略的更简单的解决方案?
(感谢大家接受的答案,因为它对Git Magic的出色引用以及有用的评论使它胜过其他人。)