首页 文章

什么版本控制系统最简单的设置和用于玩具项目?

提问于
浏览
68

我在CS部门教授第三个必修课程 . 我的一项家庭作业要求学生加快他们为以前的作业编写的代码 . 十倍的加速是常规的;因素100或1000并非闻所未闻 . (对于1000倍的加速,你必须使用malloc()犯下新手错误 . )

程序是通过序列改进的小改进 . 我要求学生记录并描述每个变化以及由此产生的改进 .

当你正在改进程序时,也可以打破它 . 退出不是很好吗?

你可以看到我的目标:我的学生将从版本控制中受益匪浅 . 但有一些警告:

  • 我们的计算环境被锁定 . 任何依赖于中央存储库的东西都是可疑的 .

  • 我们的学生非常超载 . 不只是课程,还有工作,体育,音乐等等 . 对于他们使用新工具,它必须非常简单并且具有明显的好处 .

  • 我们的学生大多数成对工作 . 在帐户之间来回获取位是有问题的 . 这个问题也可以通过分布式版本控制来解决吗?

  • 复杂性是敌人 . 我知道 Build 一个CVS存储库太令人困惑了 - 我自己仍然遇到麻烦,因为我每年只做一次 . 我被告知SVN更难 .

以下是我对现有系统的评论:

  • 我认为中央版本控制(CVS或SVN)已被排除,因为我们的学生没有制作可与其他学生共享的存储库所需的管理权限 . (我们坚持使用Unix文件权限 . )另外,在CVS或SVN上设置太难了 .

  • darcs很容易设置,但是's not obvious how you share things. darcs send (to send patches by email) seems promising but it'不清楚如何设置它 .

  • git的介绍性文档不适合初学者 . 就像CVS设置一样,这是我自己遇到的麻烦 .

我正在征求关于与初学者一起使用什么源代码控制的建议 . 我怀疑我们可以找到资源在现有系统上放置薄薄的贴面并简化现有文档 . 我们可能没有资源来编写新文档 .

那么, setupcommitrevertshare changes with a partner 真的很容易,但是不必很容易合并或大规模工作?

一个关键的约束是 programming pairs have to be able to share work with each other and only each otherpairs change every week . 我们的基础架构是Linux,Solaris和带有netapp文件管理器的Windows . 我怀疑我的IT人员想为每对学生创建一个Unix组 . 我忽略了一个更简单的解决方案吗?

(感谢您接受的答案,由于其对Git Magic的出色参考以及有用的评论而击败了其他人 . )

18 回答

  • 7

    darcs send 设置非常简单 - 当您运行 darcs send <remote repo> 时,它会查看远程仓库的 _darcs/prefs/email 以确定将电子邮件发送到的位置 . 如果那里什么也没有,那么它会提示用户 .

    补丁的接收者只保存文件并在相应的仓库中运行 darcs apply <patch file> .

    因此,每个学生都可以在 _darcs/prefs/email 中使用自己的电子邮件地址拥有自己的回购,并通过电子邮件交换补丁 .

  • 14

    我会说像Git这样的东西可能适合这个法案:

    • 由于's a distributed system, you don'需要有一个中央存储库,因此存储库与源目录一起存在

    • 可以轻松创建可以邮寄和应用的补丁文件 .

    • 虽然看起来git很难使用,但提交,合并,添加和删除文件的基本思想并不难理解 .

    看看这个网站Git Magic或者,甚至这个提示网站GitReady

  • 3

    第二个选择Mercurial

    好处

    • 优秀的文档 .

    • 用于显示分支的图形视图命令 .

    • 跨平台 .

    • 附带适用于所有平台的GUI(TortoiseHG或thg) .

    • 用于查看项目的内置Web服务器 .

    • 可以将项目保留在拇指驱动器上 .

    • 即使只有一个成员记住他们的笔记本电脑,也可以保存工作 . 这不会发生 .

    缺点

    • 必须安装Python(如果尚未安装) .

    • 容易做,但这是另一个步骤 .

    • 理解推/拉与更新/提交之间的区别 .

    • (这对所有分布式VCS都是通用的) .

    • 头部和提示之间的区别 .

    • 某些命令无法立即使用;必须明确启用它们 .

    • (这通常被社区认为有利,因为它使事情变得简单;但其他一些人则不同意) .

  • 5

    Subversion易于安装,在windows,linux和mac os x上 . 我不知道他们正在编程什么程序,但是Eclipse的subclipse插件很容易安装并且隐藏了一些存储库的复杂性 .

    和存储库复杂性?这只是在每个项目中都有一个trunk,tags和branches文件夹无论如何 . 他们可能没有太多时间,但他们应该有时间学习SVN(或类似的),因为这是一种在他们的简历上看起来很好的技能 .

  • 1

    我建议看Fossil - 它完全分发了's a single executable with no dependencies to run, operates all traffic over HTTP, keeps its all repository data in a single file which can be named anything, and includes version controlled wiki, bug tracking and a web-server out of the box. Oh, and it' .

  • 7

    我建议Mercurial(也称为'hg') . 它是一个分布式开源VCS,不需要中央存储库 . 每天使用它很容易 . 官方网站上有足够的文档 . 例如,请查看QuickStart .

    对我而言,决定点是一个很棒的GUI - TortoiseHg . 它似乎也支持Linux(没试过自己) . 当然,大多数Linux版本都有命令行发行版 .

    当然从围栏这边看起来很容易,也许对于忙碌的学生来说,概念,优点和日常操作都不会那么容易习惯 . 但最终,即时提交,恢复到任何修订的能力以及从那里自动创建新分支,以及智能差异/合并都是不可替代的 .

    希望这可以帮助!

  • 16

    为了让您的学生真正轻松使用,您可以安装一个SVN服务器,该服务器已启用自动提交,使用webdav共享 . 这样他们就可以使用WebDAV安装他们的目录,每次他们点击保存时都会自动提交 - 使用TortoiseSVN,Eclipse / Visual Studio插件或ViewVC等一些Web访问解决方案可以轻松访问历史记录 . 对于您的访问限制需求,您可以使用集成的subversion身份验证(查看here) - 它使用简单的配置文件进行细粒度访问控制 .

    配置变得更加容易(现在有更好的文档 - 看看the SVN Book),但如果您需要多个具有访问限制和Web界面的独立存储库,可能会有点复制 .

    Autocommit更像是“我的办公室工作人员/老板”的解决方案,他不知道计算机内部是否需要对word文档进行版本控制 . 参加编程课程的学生也许应该学习如何使用体面的SCM .

    Git和Mercurial会很好,因为它们具有分布式特性,这使得共享变得简单 - 但是这两种工具都缺少易于使用的GUI界面(TortoiseHg看起来很有前途,而且gitk是一个非常好的Repository浏览器,但是你的学生仍然需要围绕命令行工具包围他们以充分利用这些工具 . 此外,分布式SCM的概念要掌握得更复杂一些 .

    在专业方面,您可以使用公共托管解决方案,如GitHub,并且无论如何都能阻止他们交换代码,根据我的课程工作经验,我发现查看代码并验证它是唯一的防止复制的方法 .

    您也可以使用PlasticSCM,它为许多IDE提供了非常好的界面,并且(至少是网站声称)为教育机构提供免费许可 .

  • 1

    我认为没有理由处理设置源控制系统 . 查看使用例如的条款google code并潜入 .

    一位CS同学和我去年使用它并且效果很好,唯一的前提是互联网连接:-)

  • 2

    BazaarMercurialGit听起来适合您的情况 - 创建存储库非常简单,所有学生需要共享的是文件系统对彼此存储库的读访问权限 .

  • 83

    Darcs是一个优秀的DVCS,特别适用于小型项目,如CS类课程 . 我希望我在大学时被介绍给Darcs或Git,我也赞赏你把它介绍给你的学生 .

    我每天都使用Git . 这是一个非常强大的DVCS,但对于较小的项目可能有点过分 .

    顺便提一下,这些版本控制系统都非常好 .

  • 8

    我对 Bazaar 有一些很好的经验 . 像Git / Mercurial一样,它是分发的 . 它是无服务器的 - 您不需要在托管存储库的服务器上安装守护程序,即使您远程访问它(即,它可以像FTP / SFTP共享一样工作) .

    一个分布式VCS最灵活 . 您可以从更传统的“中央”存储库中查看分支,并获得能够将您自己的小开发分离到中央服务器等的所有好处,然后,或许,可以将您的更改推回原处 .

    有其他VCS的导入工具,如Subversion,虽然我还没有尝试过 .

  • 2

    关于权限,外部服务不需要您大学的IT人员的时间 .

    例如,Bitbucket(使用Mercurial)现在允许最多5个用户的无限私人回购 . 我猜每个新的每周一对学生正在一起研究一个新项目,这意味着他们可以只是初始化存储库,添加其他用户,然后就可以了 .

    如果他们不是每周都在处理一个新项目,则必须删除并添加权限,并且我鼓励他们在Bitbucket上有多个repos(每个帐户一个),以便每个学生都可以继续访问 . (无论如何这都是个好主意,但对于长达一周的项目来说,让一个学生账户拥有回购,另一个获得许可可能更简单 . )

    关于哪个VCS,我相信Mercurial最适合你的平台 - 如果他们不熟悉(并且你没有时间让他们学习)命令行界面,TortoiseHg特别适合新用户探索 .

    根据您的具体情况,DVCS的优势在于他们在大学服务器上的副本(如果有的话)是一个完全成熟的回购 . 您可能会发现方便您或TA进行访问,这应该更容易设置,并且可以持续所有学期而不是每周更改 .

  • 11

    设置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名称作为repo . ,只有两个学生知道的 . 将该秘密名称传递给教授将允许他随时检查学生的回购 . (“所以你按时提交了作业,但是电子邮件系统失去了它?让我看看那个提交的时间......”)一个脚本可以帮助设置它 .

    事实上,我越是想到这一点,我就越开始喜欢它 . 在某些方面,它比git解决方案更简单,因为学生不必处理传递补丁(或忘记这样做)并且学生将在被提交之前被迫处理合并,而不是一旦事情进入存储库(随后有能力无限期地延迟处理) .

  • 48

    更新:六年后,我永远不会考虑再次使用颠覆 . Git是要走的路 . 所以,虽然我仍然认为SVN有点“简单”,但它甚至不值得教学了 .

    我不得不对学生说SVN是要走的路 . 事实上,当我担任主要TA时,我们实施了SVN作为旧的"submit script"的替代品,这是一个tar和电子邮件脚本 . Labstaff设置了基于Apache SVN-DAV的存储库,并使用authz文件,TA和教师可以控制每个学生目录的权限,并在非常细粒度的水平上对项目进行分组,使学生可以通过非常简单的路径进行第一次提交 . 请参阅my tutorial(由最新的TA撕掉的凭据..嗯..)

    关于在没有sys管理员干预的情况下使用subversion,我在组项目环境中也做到了这一点,我的组成员之前都没有使用过subversion,而且大多数人都提出了很少的混淆(除了一个之外) . 我还写了一个教程,用于设置这样一个只有基本SSH访问权限的安全共享存储库here .

    我肯定 disagree git对于初学者来说是最好的VCS,在提到任何VCS系统时都经历了空白的外观,更不用说Mac-daddy-by-Linus自己写的VCS之王,git . 毫无疑问,git并不比svn复杂,仅仅缺乏成熟的n00b工具就足以成为不在这种情况下使用它的理由 . 我刚开始使用git来开发一个我在Netbeans中开发的新项目,并且已经遇到了Netbeans集成的严重限制 . 在一个学期中,你不会使用svn没有提供的任何功能,所以git是矫枉过正的 .

  • 7

    Windows上的Subversion可以像设置TortoiseSVN一样简单 . 使用它有一点学习曲线(特别是如果你以前从未使用过版本控制),但是你可以通过专门教一半课程并提供一些powerpoint幻灯片来帮助他们下载 .

    至于集中化 - 我听说过提供免费SVN项目托管的网站 . 一个快速的谷歌搜索出现了this页面,但肯定有更多 .

  • 4

    如果你正在寻找真正需要设置的东西,那么为什么不去免费的SVN托管选项,你不需要设置一个东西!

    可悲的是,每个人都会指出你是Assembla,Unfuddle的两个旧版本已经放弃了对他们免费托管的支持(或者至少如果你想让他们私有),但你仍然可以使用Origo这给你开放和封闭托管 .

    这样做的好处是,您可以拥有所有项目并全部跟踪它们,并轻松控制有权访问的人员,而您无需担心创建回购的权利 .

    如果你选择这条路线,并且想要消除复杂性,那么你必须使用GUI svn应用程序来使学习变得微不足道(因为我怀疑会有很多合并) . 我建议tortoisesvn,直接进入Windows资源管理器上下文菜单 .

  • 5

    我想说最好的办法是尝试与您的IT部门合作,为学生设置一个系统/方法,以便轻松创建新的SVN / CVS存储库 .

    也许你可以让IT部门为你提供创建存储库所需的特权,即使他们不会给学生自己提供资源 . 您可以非常轻松地编写一些脚本,以便在学期开始时从学生列表中批量创建存储库 .

  • 3

    RCS for linux .

    我对开发人员来说很简单 . 来自http://www.cs.purdue.edu/homes/trinkle/RCS/的Windows端口非常好 .

相关问题