我在CS部门教授第三个必修课程。我的一项家庭作业要求学生加快他们为以前的作业编写的代码。十倍的加速是常规的;因素100或1000并非闻所未闻。 (对于1000倍的加速,你必须使用malloc()犯下新手错误。)
程序是通过序列改进的小改进。我要求学生记录并描述每个变化以及由此产生的改进。
在改进程序的同时,也可以打破它。退出不是很好吗?
你可以看到我的目标:我的学生将从版本控制中受益匪浅。但有一些警告:
以下是我对现有系统的评论:
我正在征求关于与初学者一起使用什么源代码控制的建议。我怀疑我们可以找到资源在现有系统上放置薄薄的贴面并简化现有文档。我们可能没有资源来编写新文档。
那么,设置,提交,还原和与合作伙伴共享更改真的很容易但是合并或大规模工作不一定非常容易吗?
一个关键的限制是编程对必须能够彼此共享工作,而且只能彼此分享,而对每周都会更改。我们的基础架构是Linux,Solaris和带有netapp文件管理器的Windows。我怀疑我的IT人员想为每对学生创建一个Unix组。我忽略了一个更简单的解决方案吗?
(感谢您接受的答案,因其对Git Magic的出色参考以及有用的评论而击败了其他人。)
答案 0 :(得分:84)
我会说像Git这样的东西可能适合这个账单:
答案 1 :(得分:48)
第二个选择Mercurial
优点
缺点
答案 2 :(得分:16)
Subversion易于安装,在windows,linux和mac os x上。我不知道他们正在编程什么程序,但是Eclipse的subclipse插件很容易安装并且隐藏了一些存储库的复杂性。
存储库的复杂性?无论如何,这只是在每个项目中都有一个trunk,tags和branches文件夹。而且他们可能没有太多时间,但他们应该有时间学习SVN(或类似的),因为这是一种在他们的简历上看起来很好的技能。
答案 3 :(得分:14)
我建议查看Fossil - 这是一个没有依赖关系的单个可执行文件,通过HTTP操作所有流量,将所有存储库数据保存在一个文件中,可以命名为任何内容,并包含版本控制维基,错误跟踪和开箱即用的网络服务器。哦,它完全是分布式的。
答案 4 :(得分:11)
我会推荐Mercurial(也称为'hg')。它是一个分布式开源VCS,不需要中央存储库。每天使用它很容易。官方网站上有足够的文档。例如,请查看QuickStart。
对我而言,决定点是一个很棒的Windows用户界面 - TortoiseHg。它似乎也支持Linux(没试过自己)。当然,大多数Linux版本都有命令行发行版。
当然从围栏这边看起来很容易,也许对于忙碌的学生来说,概念,优点和日常操作都不会那么容易习惯。但最终,即时提交,恢复到任何修订的能力以及从那里自动创建新分支,以及智能差异/合并都是不可替代的。
希望这有帮助!
答案 5 :(得分:8)
为了让您的学生真正轻松使用,您可以安装SVN服务器并启用自动提交,使用webdav共享。这样他们就可以使用WebDAV安装他们的目录,并且每次他们点击保存时都会自动提交 - 使用TortoiseSVN,Eclipse / Visual Studio插件或某些Web访问解决方案(如ViewVC)可以轻松访问历史记录。对于您的访问限制需求,您可以使用集成的subversion身份验证(外观here) - 它使用简单的配置文件进行细粒度访问控制。
配置变得更加容易(现在有更好的文档 - 请查看the SVN Book),但如果您需要多个具有访问限制和Web界面的独立存储库,可能会有点复制。
Autocommit更像是“我办公室工作人员/老板”的解决方案,他不知道计算机内部是否需要对word文档进行版本控制。参加编程课程的学生也许也应该学习如何使用体面的SCM。
Git和Mercurial会很好,因为它们具有分布式特性,这使得共享变得简单 - 但是这两种工具都缺乏易于使用的GUI界面(TortoiseHg看起来很有前途,而且gitk是一个非常好的Repository浏览器,但是你的学生会仍然必须围绕命令行工具包围,以充分利用这些工具)。此外,分布式SCM的概念要掌握得有点复杂。
在专业方面,您可以使用GitHub等公共托管解决方案,而不必担心服务器设置。这也使得共享解决方案变得非常容易,但会破坏您的“只有彼此”的要求。但我想你无论如何都无法阻止他们交换代码,根据我的课程工作经验,我发现查看代码并验证它是唯一的防止复制的方法。
您还可以使用PlasticSCM,它为许多IDE提供了非常好的界面,并且(至少是网站声称)为教育机构提供免费许可。
答案 6 :(得分:7)
我认为没有理由处理设置源控制系统。查看使用例如的条款google code并潜入。
一位CS同学和我去年使用它并且效果很好,唯一的前提是互联网连接: - )
答案 7 :(得分:7)
答案 8 :(得分:7)
Darcs是一款优秀的DVCS,尤其适用于CS类等小型项目。我希望我在大学时被介绍给Darcs或Git,我也赞赏你把它介绍给你的学生。
我每天都使用Git。这是一个非常强大的DVCS,但对于较小的项目可能有点过分。
选择,这些版本控制系统都非常好。
答案 9 :(得分:5)
我在 Bazaar 方面有过非常好的经验。像Git / Mercurial一样,它是分发的。它是无服务器的 - 您不需要在托管存储库的服务器上安装守护程序,即使您正在远程访问它(即,它可以像FTP / SFTP共享一样工作)。
分布式VCS最灵活。您可以从更传统的“中央”存储库中查看分支,并获得能够将您自己的小开发分离到中央服务器等的所有好处,然后,或许可以将您的更改推回。
有其他VCS的导入工具,例如Subversion,虽然我还没有尝试过。
答案 10 :(得分:5)
darcs send
非常简单 - 当您运行darcs send <remote repo>
时,它会查看远程仓库的_darcs/prefs/email
以确定将电子邮件发送到的位置。如果那里什么也没有,那么它会提示用户。
补丁的接收者只保存文件并在适当的仓库中运行darcs apply <patch file>
。
因此,每个学生都可以在_darcs/prefs/email
使用自己的电子邮件地址拥有自己的回购,并通过电子邮件交换补丁。
答案 11 :(得分:4)
关于权限,外部服务不需要大学IT人员的时间。
例如,Bitbucket(使用Mercurial)现在允许最多5个用户的无限私人回购。我猜每个新的每周一对学生正在一起研究一个新项目,这意味着他们可以初始化存储库,添加其他用户,然后离开他们。
如果他们不是每周都在处理一个新项目,则必须删除并添加权限,并且我鼓励他们在Bitbucket上有多个repos(每个帐户一个),以便每个学生都可以继续访问。 (无论如何这都是一个好主意,但对于长达一周的项目来说,让一个学生账户拥有回购,另一个获得许可可能更简单。)
关于哪个VCS,我相信Mercurial最适合您的平台 - 如果他们不熟悉(并且您没有时间让他们学习)命令行界面,TortoiseHg特别适合新用户探索
具体到您的情况,DVCS的优势在于他们在大学服务器上的副本(如果有的话)是一个完全成熟的回购。您可能会觉得方便您或助教可以访问,这应该更容易设置,并且可以持续所有学期而不是每周更改。
答案 12 :(得分:3)
设置subversion存储库是微不足道的;我经常为小项目设置一个一次性的东西(例如在Stack Overflow上开发代码以获得答案!),我怀疑任何能够学习SCM系统的人都会遇到任何问题。
$ svnadmin create /home/cjs/repo
$ mkdir my-project
$ cd my-project
$ vi hello.c
[...hack hack hack...]
$ svn import -m 'Initial project import.' file:///home/cjs/repo
Adding hello.c
Committed revision 1.
那就是说,分享肯定是个问题。如果学生在他们同时工作的时候总是一起工作,他们可以使用USB驱动器,因为他们可以拔掉它并在需要进行调试时来回传递,而以后单独编程的人可以直接使用它。但这并不完全方便。
另一种选择,因为它们似乎都在共享的Unix系统上工作,就是创建一个目录,其中包含为该组的其余部分(或所有用户)设置的执行但不是读取位,并使用s3cr3t名称根据那个回复,只有两个学生知道。将该秘密名称传递给教授将允许他随时检查学生的回购。 (“所以你按时提交了作业,但是电子邮件系统丢失了吗?让我看看那次提交的时间......”)一个脚本可以帮助你设置它。
事实上,我越是想到这一点,我就越开始喜欢它。在某些方面,它比git解决方案更简单,因为学生不必处理传递补丁(或忘记这样做)并且学生将在被提交之前被迫处理合并,而不是一旦事情进入存储库(随后有能力无限期地延迟处理)。
答案 13 :(得分:3)
更新:六年后,我永远不会考虑再次使用颠覆。 Git是要走的路。所以,虽然我仍然认为SVN有点“简单”,但它再也不值得教学了。
我已经使用过CVS,SVN,Bazaar和Git(按顺序介绍),我不得不对学生们说SVN是要走的路。事实上,虽然我是领导TA,但我们实施了SVN作为旧的“提交脚本”的替代品,这是一个tar和电子邮件脚本。 Labstaff设置了基于Apache SVN-DAV的存储库,并使用authz文件,TA和教师可以控制每个学生目录的权限,并在非常细粒度的水平上对项目进行分组,使学生可以通过非常简单的路径进行第一次提交。请参阅my tutorial(由最新的TA撕掉的凭据..嗯......)
关于在没有sys管理员干预的情况下使用subversion,我在组项目环境中也做到了这一点,我的组成员之前都没有使用过subversion,而且大多数人都提出了很少的混淆(所有但是一个)。我还编写了一个教程,用于设置只有基本SSH访问here的安全共享存储库。
我绝对不同意 git是初学者在提到任何VCS系统时经历过空白外观的最佳VCS,更不用说Mac-daddy-by-Linus-their VCS了国王,吉特。 git并不比svn复杂,并且仅仅缺乏成熟的 n00b 工具就足以成为不在这种情况下使用它的理由。我刚开始使用git来开发一个我在Netbeans中开发的新项目,并且已经遇到了Netbeans集成的严重限制。在一个学期中,你不会使用svn没有提供的任何功能,因此git是过度的。
答案 14 :(得分:2)
Windows上的Subversion可以像设置TortoiseSVN一样简单。使用它有一点学习曲线(特别是如果你之前从未使用过版本控制),但是你可以通过专门教一半课程并提供一些powerpoint幻灯片来帮助他们下载。
至于集中化 - 我听说过提供免费SVN项目托管的网站。一个快速的谷歌搜索出现了this页面,但肯定有更多。
答案 15 :(得分:2)
如果您正在寻找真正需要设置的东西,那么为什么不去免费的SVN托管选项,您不需要设置一个东西!
可悲的是,每个人都会指出你是Assembla,Unfuddle的两个旧版本已经放弃了对他们免费托管的支持(或者至少如果你想让他们私有),但你仍然可以使用Origo这个给你开放和封闭的托管。
这样做的好处是,您可以拥有所有项目并全部关注,并轻松控制有权访问的人员,而且您不必担心创建回购权。
如果你选择这条路线,并且想要消除复杂性,那么你必须使用GUI svn应用程序来使学习变得微不足道(因为我怀疑会有很多合并)。我建议tortoisesvn,直接进入Windows资源管理器上下文菜单。
答案 16 :(得分:1)
RCS for linux。
我发现没有什么比RCS对Widows更简单,但并非所有RCS端口都能正常工作,所以你必须尝试它们才能使它变得非常简单。 Windows对开发人员来说并不简单。 来自http://www.cs.purdue.edu/homes/trinkle/RCS/的Windows端口非常好。
答案 17 :(得分:1)
我认为最好的办法是尝试与您的IT部门合作,为您的学生设置一个系统/方法,以便轻松创建新的SVN / CVS存储库。
可能您可以让IT部门为您提供为学生创建存储库所需的特权,即使他们不会向学生自己提供授权。您可以非常轻松地编写一些脚本,以便在学期开始时从学生列表中批量创建存储库。