我在CS部门教授第三个必修课程.我的一项家庭作业要求学生加快他们为以前的作业编写的代码.十倍的加速是常规的; 因素100或1000并非闻所未闻.(对于1000倍的加速,你必须使用malloc()犯下新手错误.)
程序是通过序列改进的小改进.我要求学生记录并描述每个变化以及由此产生的改进.
当你正在改进程序时,也可以打破它.退出不是很好吗?
你可以看到我的目标:我的学生将从版本控制中受益匪浅.但有一些警告:
我们的计算环境被锁定.任何依赖于中央存储库的东西都是可疑的.
我们的学生非常超载.不只是课程,还有工作,体育,音乐等等.对于他们使用新工具,它必须非常简单并且具有明显的好处.
我们的学生大多数成对工作.在帐户之间来回获取位是有问题的.这个问题也可以通过分布式版本控制来解决吗?
复杂性是敌人.我知道建立一个CVS存储库太令人困惑了 - 我自己仍然遇到麻烦,因为我每年只做一次.我被告知SVN更难.
以下是我对现有系统的评论:
我认为中央版本控制(CVS或SVN)已被排除,因为我们的学生没有制作可与其他学生共享的存储库所需的管理权限.(我们坚持使用Unix文件权限.)另外,在CVS或SVN上设置太难了.
darcs很容易设置,但你分享的方式并不明显.darcs发送(通过电子邮件发送补丁)似乎很有希望,但目前尚不清楚如何设置它.
git的介绍性文档不适合初学者.就像CVS设置一样,这是我自己遇到的麻烦.
我正在征求关于与初学者一起使用什么源代码控制的建议.我怀疑我们可以找到资源在现有系统上放置薄薄的贴面并简化现有文档.我们可能没有资源来编写新文档.
那么,与合作伙伴一起设置,提交,还原和共享更改真的很容易,但是不必很容易合并或大规模工作?
一个关键的限制是编程对必须能够彼此共享工作,并且只能彼此共享工作,并且每周都会更改对.我们的基础架构是Linux,Solaris和带有netapp文件管理器的Windows.我怀疑我的IT人员想为每对学生创建一个Unix组.我忽略了一个更简单的解决方案吗?
(感谢您接受的答案,由于其对Git Magic的出色参考以及有用的评论而击败了其他人.)
我会说像Git这样的东西可能适合这个法案:
由于它是一个分布式系统,因此您不需要拥有中央存储库,存储库与源目录一起存在
可以轻松创建可以邮寄和应用的补丁文件.
虽然看起来git很难使用,但提交,合并,添加和删除文件的基本思想并不难理解.
看看这个网站Git Magic ,甚至是这个提示网站GitReady
二是Mercurial的选择
好处
优秀的文档.
用于显示分支的图形视图命令.
跨平台.
附带适用于所有平台的GUI(TortoiseHG或thg).
用于查看项目的内置Web服务器.
可以将您的项目保留在您的拇指驱动器上.
即使只有一个成员记住他们的笔记本电脑,也可以保存工作.这不会发生.
缺点
必须安装Python(如果尚未安装).
容易做,但这是另一个步骤.
理解推/拉与更新/提交之间的区别.
(这对所有分布式VCS都是通用的).
头部和提示之间的区别.
有些命令不能立即使用; 必须明确启用它们.
(这通常被社区认为有利,因为它使事情变得简单;但其他一些人则不同意).
Subversion易于安装,在windows,linux和mac os x上.我不知道他们正在编程什么程序,但是Eclipse的subclipse插件很容易安装并且隐藏了一些存储库的复杂性.
和存储库复杂性?无论如何,这只是在每个项目中都有一个trunk,tags和branches文件夹.他们可能没有太多时间,但他们应该有时间学习SVN(或类似的),因为这是一种在他们的简历上看起来很好的技能.
我建议查看Fossil - 它是一个没有依赖关系的单个可执行文件,通过HTTP操作所有流量,将所有存储库数据保存在一个可以命名的文件中,并包含版本控制的wiki,错误跟踪和Web - 服务器开箱即用.哦,它完全是分布式的.
我会推荐Mercurial(也称为'hg').它是一个分布式开源VCS,不需要中央存储库.每天使用它很容易.官方网站上有足够的文档.例如,查看QuickStart.
对我而言,决定点是Windows的一个很好的GUI - TortoiseHg.它似乎也支持Linux(没试过自己).当然,大多数Linux版本都有命令行发行版.
当然从围栏这边看起来很容易,也许对于忙碌的学生来说,概念,优点和日常操作都不会那么容易习惯.但最终,即时提交,恢复到任何修订的能力以及从那里自动创建新分支,以及智能差异/合并都是不可替代的.
希望这可以帮助!
为了让您的学生真正轻松使用,您可以安装一个SVN服务器,该服务器已启用自动提交,使用webdav共享.这样他们就可以使用WebDAV安装他们的目录,每次他们点击保存时都会自动提交 - 使用TortoiseSVN,Eclipse/Visual Studio插件或ViewVC等一些Web访问解决方案可以轻松访问历史记录.对于您的访问限制需求,您可以使用集成的subversion身份验证(在此处查看) - 它使用简单的配置文件进行细粒度访问控制.
配置变得更加容易(现在有更好的文档 - 看看SVN书籍),但如果您需要多个具有访问限制和Web界面的独立存储库,可能会有点复制.
Autocommit更像是"我的办公室工作人员/老板"的解决方案,他不知道计算机内部是否需要对word文档进行版本控制.参加编程课程的学生也许应该学习如何使用体面的SCM.
Git and Mercurial would be nice because of their distributed nature, which makes sharing easy - but both tools lack GUI interfaces which are really easy to use (TortoiseHg looks promising, and gitk is a very good Repository browser, but your students would still have to wrap their heads around the command line tools to make full use of the tools). Also the concept of distributed SCM's is a little more complex to grasp.
在专业方面,您可以使用GitHub等公共托管解决方案,而不必担心服务器设置.这也使得共享解决方案变得非常容易,但会破坏您的"只有彼此"的要求.但我想你无论如何都无法阻止他们交换代码,根据我的课程工作经验,我发现查看代码并验证它是唯一的防止复制的方法.
你也可以使用PlasticSCM,它为很多IDE提供了非常好的界面,并且(至少是网站声称)为教育机构提供免费许可.
我认为没有理由处理设置源控制系统.查看使用谷歌代码和潜水的条款.
一位CS同学和我去年使用它并且效果很好,唯一的前提是互联网连接:-)
Bazaar,Mercurial和Git听起来很适合您的情况 - 创建存储库很简单,所有学生需要共享的是文件系统对彼此存储库的读访问权限.
Darcs是一个优秀的DVCS,特别适用于小型项目,如CS类课程.我希望我在大学时被介绍给Darcs或Git,我也赞赏你把它介绍给你的学生.
我每天都使用Git.这是一个非常强大的DVCS,但对于较小的项目可能有点过分.
顺便提一下,这些版本控制系统都非常好.
我对Bazaar有一些很好的经验.像Git/Mercurial一样,它是分发的.它是无服务器的 - 您不需要在托管存储库的服务器上安装守护程序,即使您远程访问它(即,它可以像FTP/SFTP共享一样工作).
分布式VCS最灵活.您可以从更传统的"中央"存储库中查看分支,并获得能够将您自己的小开发分离到中央服务器等的所有好处,然后,或许,可以将您的更改推回原处.
有其他VCS的导入工具,如Subversion,虽然我还没有尝试过.
darcs send
设置很简单 - 当你运行时darcs send
,它会查看_darcs/prefs/email
远程仓库以确定将电子邮件发送到的位置.如果那里什么也没有,那么它会提示用户.
补丁的接收者只保存文件并darcs apply
在适当的仓库中运行.
因此,每个学生都可以使用自己的电子邮件地址拥有自己的回购,_darcs/prefs/email
并通过电子邮件交换补丁.