68

我在 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的出色参考以及有用的评论而击败了其他人。)

4

18 回答 18

82

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

  • 由于它是一个分布式系统,您不需要有一个中央存储库,存储库与源目录一起存在
  • 创建可以邮寄和应用的补丁文件很容易。
  • 尽管 git 看起来很难使用,但提交、合并、添加和删除文件的基本思想并不难学。

看看这个网站Git Magic 或者,甚至这个技巧网站GitReady

于 2008-11-28T19:11:11.167 回答
48

二、Mercurial的选择

好处

  • 优秀的文档。
  • 显示分支的图形视图命令。
  • 跨平台。
  • 带有适用于所有平台(TortoiseHG 或 thg)的 GUI。
  • 用于查看项目的内置 Web 服务器。
  • 可以将您的项目保存在您的拇指驱动器上。
    • 即使这对中只有一个成员记得他们的笔记本电脑,也可以节省工作。并不是说那会发生。

缺点

  • 如果尚未安装 Python,则必须安装。
    • 很容易做到,但这是另一个步骤。
  • 了解推/拉与更新/提交之间的区别。
    • (这对所有分布式 VCS 都是通用的)。
  • 头和尖的区别。
  • 有些命令不能立即使用;必须明确启用它们。
    • (这通常被社区认为是有利的,因为它使事情变得简单;但其他一些人不同意)。
于 2008-11-28T20:40:44.497 回答
16

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

和存储库复杂性?无论如何,这只是在每个项目中都有一个主干、标签和分支文件夹。他们可能没有太多时间,但他们应该有时间学习 SVN(或类似的),因为这是一项在他们的简历上看起来不错的技能。

于 2008-11-28T18:57:54.907 回答
15

我建议查看Fossil - 它是一个没有依赖关系的单一可执行文件,通过 HTTP 操作所有流量,将其所有存储库数据保存在一个可以命名的文件中,并包括版本控制的 wiki、错误跟踪和网络-服务器开箱即用。哦,它是完全分布式的。

于 2009-10-20T10:09:32.350 回答
11

我会推荐Mercurial(也称为“hg”)。它是一个分布式开源 VCS,不需要中央存储库。日常使用它很容易。官方网站上有足够的文档。例如查看QuickStart

对我来说,决定点是一个很棒的 Windows 图形用户界面 - TortoiseHg。Linux 上似乎也支持它(我自己没试过)。当然,大多数 Linux 版本都有命令行发行版。

当然,从这方面来看似乎很容易,也许对于忙碌的学生来说,概念、优势和日常操作不会那么容易习惯。但最终,即时提交、恢复到任何版本并自动从那里创建新分支的能力以及智能 diff/merge 都是不可替代的。

希望这可以帮助!

于 2008-11-28T20:13:37.157 回答
8

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

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

对于不知道计算机内部发生了什么的“我的办公室工作人员/老板”来说,自动提交更多的是一种解决方案,需要对 Word 文档进行版本控制。学习编程课程的学生也许还应该学习如何使用像样的 SCM。

Git 和 Mercurial 会很好,因为它们是分布式的,这使得共享变得容易 - 但是这两种工具都缺乏真正易于使用的 GUI 界面(TortoiseHg 看起来很有前途,而且 gitk 是一个非常好的存储库浏览器,但你的学生仍然需要将他们的头脑围绕在命令行工具上以充分利用这些工具)。此外,分布式 SCM 的概念更难掌握。

在专业方面,您可以使用GitHub等公共托管解决方案,而不必担心服务器设置。这也使共享解决方案变得非常容易,但会打破您“仅彼此”的要求。但我想你无论如何都无法阻止他们交换代码,根据我的课程工作经验,我发现查看代码并验证它的唯一性是防止复制的唯一方法。

您还可以使用PlasticSCM,它为许多 IDE 提供了非常好的接口,并且(至少该网站声称)为教育机构提供免费许可证。

于 2008-11-28T19:31:31.640 回答
7

我认为没有理由设置源代码控制系统。查看使用例如谷歌代码的条款并深入研究。

我和一个 CS 同学去年用过它,效果很好,唯一的先决条件是互联网连接 :-)

于 2008-11-28T19:20:37.497 回答
7

BazaarMercurialGit听起来适合您的案例 - 创建存储库很简单,所有学生需要共享的是文件系统上对彼此存储库的读取访问权限。

于 2008-11-29T03:51:43.363 回答
7

Darcs 是一款出色的 DVCS,尤其适用于小型项目,例如 CS 类项目。我希望我在大学时被介绍给 Darcs 或 Git,我也赞扬你把它介绍给你的学生。

我每天都使用 Git。这是一个非常强大的 DVCS,但对于较小的项目来说可能有点矫枉过正。

任你选,这些版本控制系统中的任何一个都非常好。

于 2010-03-16T00:08:21.000 回答
5

我在Bazaar有过一些非常好的经验。与 Git/Mercurial 一样,它是分布式的。它是无服务器的——您不需要在托管存储库的服务器上安装守护程序,即使您正在远程访问它(即,它可以像 FTP/SFTP 共享一样工作)。

分布式 VCS 是最灵活的。您可以从更传统的“中央”存储库中签出一个分支,并获得能够将您自己的小开发独立于中央服务器等的所有好处,然后也许将您的更改推回。

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

于 2009-02-24T16:04:14.357 回答
5

darcs send设置起来很简单——当你运行时darcs send <remote repo>,它会查看_darcs/prefs/email远程仓库来决定将电子邮件发送到哪里。如果那里什么都没有,那么它会提示用户。

补丁的接收者只是保存文件并darcs apply <patch file>在适当的 repo 中运行。

因此,每个学生都可以使用自己的电子邮件地址拥有自己的存储库,_darcs/prefs/email并通过电子邮件交换补丁。

于 2010-01-07T09:52:04.377 回答
4

关于权限,外部服务不需要贵校 IT 人员的时间。

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

如果他们不是每周都在处理一个新项目,则必须删除和添加权限,我鼓励他们在 Bitbucket 上拥有多个存储库(每个帐户一个),以便每个学生都可以继续访问。(无论如何,这将是一个好主意,但对于仅为期一周的项目,让一个学生帐户拥有该存储库而另一个拥有许可可能更简单。)

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

具体到您的情况,DVCS 的优势是他们在大学服务器上的副本(如果有的话)是一个成熟的 repo。您可能会发现方便您或助教访问,这应该更易于设置并且可以持续整个学期,而不是每周更换一次。

于 2010-10-04T08:05:05.870 回答
3

建立一个颠覆存储库是微不足道的;我经常为小型项目设置一个一次性的东西(例如为 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.

也就是说,共享当然是一个问题。如果学生们在同时工作的时候总是一起工作,他们可以使用 U 盘,因为他们可以在需要时将它拔下并来回传递,以后一个人编程的人可以挂着它。不过,这并不完全方便。

另一种选择,因为他们似乎都在共享的 Unix 系统上工作,是创建一个目录,为组的其余部分(或所有用户)设置执行但未读取位,并在该目录下为 repo 使用 s3cr3t 名称,只有两个学生知道。将这个秘密名称传递给教授也可以让他随时检查学生的存储库。(“所以你按时提交了作业,但电子邮件系统丢失了它?让我看看提交的时间......”)脚本可以帮助设置它。

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

于 2009-05-20T01:23:38.267 回答
3

更新:六年后,我再也不会考虑将颠覆用于任何事情。Git是要走的路。所以,虽然我仍然认为 SVN 有点“简单”,但它甚至不值得再教了。

我使用过 CVS、SVN、Bazaar 和 Git(按介绍顺序),我不得不对学生说 SVN 是要走的路。事实上,当我担任首席 TA 时,我们实施了 SVN 来替代旧的“提交脚本”,它是一个 tar 和电子邮件脚本。Labstaff 设置了一个基于 Apache SVN-DAV 的存储库,并使用 authz 文件,助教和讲师可以在非常细粒度的级别控制每个学生目录和组项目的权限,从而为学生提供非常简单的首次提交路径。看我的教程(最近的助教撕掉的凭证..嗯..)

关于在没有系统管理员干预的情况下使用 subversion,我在一个小组项目设置中也这样做过,我的小组成员以前都没有使用过 subversion,而且他们中的大多数人都在提交时几乎没有混淆(除了一个) . 我还写了一个教程来设置这样一个安全的共享存储库,这里只有基本的 SSH 访问。

我绝对不同意git 对于初学者来说是最好的 VCS,因为在提到任何 VCS 系统时都经历了足够的空白,更不用说 mac-daddy-written-by-Linus-himself VCS 之王 git。git 并不比 svn 复杂,这根本不正确,仅缺乏成熟的n00b工具就足以成为在这种情况下不使用它的理由。我刚刚开始将 git 用于我在 Netbeans 中开发的一个新项目,并且已经遇到了与 Netbeans 集成的严重限制。在一个学期中,您不会使用 svn 不提供的任何功能,因此 git 是多余的。

于 2009-11-18T05:33:39.600 回答
2

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

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

于 2008-11-28T19:04:38.730 回答
2

如果您正在寻找真正易于设置的东西,那么为什么不选择免费的 SVN 托管选项,您无需设置任何东西!

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

这样做的好处是您可以拥有所有项目并全部关注它们,并且可以轻松控制有权访问的人,并且您不必担心创建repos的权限。

如果您确实走这条路,并且想要消除复杂性,那么您必须使用 GUI svn 应用程序来使学习变得微不足道(因为我怀疑会有很多合并发生)。我会推荐tortoisesvn,直接滑入您的 Windows 资源管理器上下文菜单。

于 2008-11-28T19:36:17.077 回答
1

我想说你最好的选择是尝试与你的 IT 部门合作,为你的学生建立一个系统/方法来轻松创建新的 SVN/CVS 存储库。

也许您可以让 IT 部门授予您为学生创建存储库所需的权限,即使他们不会将权限授予学生自己。在学期开始时,您可能很容易编写一些脚本来从学生列表中大规模创建存储库。

于 2008-11-28T19:01:01.110 回答
1

用于 Linux 的 RCS。

我发现没有什么比 RCS for Widows 更简单的了,但并不是所有的 RCS 端口都能正常工作,所以你必须尝试它们,这使得它变得不简单。Windows 对开发人员来说并不简单。来自http://www.cs.purdue.edu/homes/trinkle/RCS/的 Windows 端口非常好。

于 2013-11-28T14:23:49.310 回答