对于玩具项目,最容易建立和使用哪种版本控制系统?


68

我在计算机科学系教授第三门必修的入门课程。我的一项家庭作业要求学生加快为先前作业编写的代码。十分之一的提速是例行的;100或1000的系数并非闻所未闻。(要使速度提高1000倍,您必须使用malloc()犯了菜鸟错误。)

程序被改进的顺序是很小的变化。我要求学生记录并描述每项更改及其带来的改进。

在改进程序时,也有可能破坏它。退出不是很好吗?

您可以看到我要做什么:我的学生将从版本控制中受益匪浅。但是有一些警告:

  • 我们的计算环境已锁定。任何依赖中央存储库的东西都是可疑的。
  • 我们的学生超负荷工作。您不仅可以命名课程,还可以找到工作,运动,音乐。对于他们来说,使用新工具必须非常简单,并且必须拥有明显的好处。
  • 我们的学生成双完成大部分工作。在帐户之间来回交换比特是有问题的。分布式版本控制也可以解决此问题吗?
  • 复杂性是敌人。我知道建立CVS信息库太令人困惑了-我自己仍然遇到麻烦,因为我每年只这样做一次。有人告诉我SVN更加困难。

这是我对现有系统的评论:

  • 我认为排除了中央版本控制(CVS或SVN)是因为我们的学生没有创建可以与其他学生共享的存储库所需的管理特权。(我们受制于Unix文件权限。)而且,在CVS或SVN上进行设置也太困难了。
  • darcs设置起来很容易,但是共享方式却并不明显。darcs send(通过电子邮件发送补丁)似乎很有前途,但尚不清楚如何设置它。
  • git的入门文档不适合初学者。像CVS设置一样,我自己也遇到了麻烦。

我正在为初学者使用哪种源代码控制提出建议。我怀疑我们可以找到资源在现有系统上放置薄薄的饰面并简化现有文档。我们可能没有资源来编写新文档。

那么,什么是真正易于与合作伙伴进行设置提交还原共享更改的,但是不必很容易合并或大规模地进行呢?

一个关键的制约因素是,编程对必须能够共享工作彼此,只有彼此,并且对每个星期换一次。我们的基础架构是具有netapp文件管理器的Linux,Solaris和Windows。我怀疑我的IT员工是否想为每对学生创建一个Unix组。有没有我忽略的更简单的解决方案?

(感谢大家接受的答案,因为它对Git Magic的出色引用以及有用的评论使它胜过其他人。)


43
我必须赞扬您向学生介绍了版本控制。我不能告诉你我见过多少学生从未使用过它。在“现实世界”中,这是生活发展的事实,因此学生必须最终学习它。
TM。

1
作为拉姆西教授系的一名前研究生(尽管在他在那里任职之前),我将排名第二。
pjmorse 2010年

我很惊讶这个问题没有被删除。新的SO警察在哪里?
诺曼·拉姆齐

Answers:


83

我会说像Git这样的事情可能很合适:

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

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


Git Magic网站很棒。我没有足够的代表来支持你的答案,但是当代表到达时会。现在,Git Magic上没有提到的一件事是通过电子邮件将补丁发送给编程合作伙伴。建议在哪里看?
诺曼·拉姆齐

1
Git format-patch准备提交电子邮件,而git am应用这些补丁。
阿比森

1
我不喜欢关于“现实世界”的争论。他们几乎永无止境。我不必在“真实世界”中使用svn(只需cvs,p4,hg和git)。我不希望svn约束任何人。
达斯汀

4
彼得(Peter):您的评论暗示知道git但不了解subversion的人将难以快速掌握subversion。您真的认为是这样吗?鉴于基本操作是如此相似,所以我不同意。根据我的实际经验,最大的“不知道VC”问题是从未使用过它的人,不了解为什么有人会使用它,因此完全反对使用它。
cjs

5
@Peter Coulton:我从未使用过SVN,我从未使用过CVS,现在却使用了Mercurial ...不要根据您自己的经验进行假设。同样,命令并不重要,重要的是原理。
Matthieu M.

48

其次选择水银

优点

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

缺点

  • 如果尚未安装,则必须安装Python。
    • 容易做到,但这是又一步。
  • 了解推/拉与更新/提交之间的区别。
    • (这对于所有分布式VCS都是通用的)。
  • 提示和提示之间的区别。
  • 有些命令不是立即可用的。必须显式启用它们。
    • (这通常被社区认为是有利的,因为它使事情变得简单;尽管其他人不同意)。

3
Joel Spolsky在hginit.com/top上对Mercurial有很好的介绍。它快速且易于阅读,并且图片可以很好地说明情况。为了在两对之间进行合作,有一些站点提供免费存储库,例如,针对Mercurial的bitbucket.com。
鲍里斯(Boris)2010年

1
也HG-git的允许使用1个工具,任何工作:)
卢卡斯格鲁纳

16

Subversion易于在Windows,Linux和Mac OS X上安装。我不知道他们正在使用什么程序进行编程,但是Eclipse的subclipse插件非常容易安装,并且隐藏了某些存储库复杂性。

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


我在使用SVN和其他人建立的存储库方面有丰富的经验。有人告诉我回购交易很难建立。也许该信息已过时?关键问题是权限:每学生都需要一个回购协议,只有该对成员可以阅读和书写。每周更换一次。Unix文件。怎么样?
诺曼·拉姆齐

建立一个svn的不难,但更改权限你描述会是这样。
pjmorse 2010年

1
我曾经使用svn,但是后来我有了git,再也没有回头了:)
riviera

git / hg具有svn的所有功能,并且更易于设置。
卡勒姆·罗杰斯

15

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


2
也要提到化石。它可能不比其他系统DVCS系统“更好”(更快,更灵活等),但它显然似乎非常接近于易于使用的目标。集成的Wiki和错误跟踪系统甚至可以很方便地记录学生在其项目中的进度。
克里斯·约翰森

11

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

对我而言,决定性的点是Windows- TortoiseHg的出色GUI 。似乎Linux也支持它(请不要尝试一下)。当然,大多数Linux版本都有命令行发行版。

当然,从栅栏的这一侧看似乎很容易,也许对于忙碌的学生而言,概念,优势和日常操作都不会那么容易习惯。但是最后,即时提交,还原到任何修订并从那里自动创建新分支的能力以及智能化的diff / merge都是不可替代的。

希望这可以帮助!


8

为了让您的学生真正易于使用,您可以安装启用了自动提交的SVN服务器,并使用webdav进行共享。这样,他们就可以使用WebDAV挂载目录,并在每次单击保存时自动提交-使用TortoiseSVN,Eclipse / Visual Studio插件或某些Web访问解决方案(如ViewVC)可以轻松访问历史记录。出于访问限制的需要,您可以使用集成的Subversion身份验证(请参阅此处),该身份验证使用简单的配置文件进行细粒度的访问控制。

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

对于“我的上班族/老板”谁不知道计算机内部发生什么情况,自动提交是一种解决方案,它需要对Word文档进行版本控制。参加编程课程的学生也许还应该学习如何使用体面的SCM。

Git和Mercurial的优点在于它们的分布式特性,这使共享变得容易-但两个工具都缺少真正易于使用的GUI界面(TortoiseHg看起来很有前途,而gitk是一个非常好的Repository浏览器,但是您的学生仍然必须充分利用命令行工具以充分利用这些工具)。而且,分布式SCM的概念要掌握起来有些复杂。

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

您还可以使用PlasticSCM,它具有许多IDE的非常好的界面,以及(至少是网站声称的)教育机构的免费许可证。


的确,您说对了:“参加编程课程的学生也许还应该学习如何使用体面的SCM。” 但是,即使是办公室工作人员或老板,通常也可以理解Subversion。我教过的人甚至不能以最原始的方式使用Excel来使用Subversion!
cjs

实际上,Plastic SCM是免费的,用于教育!
pablo 2012年

7

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

我是CS的一名同学,去年我用过它,效果很好,唯一的前提是要有互联网连接:-)


在我的班级中,有些学生可以在一个班级使用10个项目中的5个。我有点不安 记住:每对一个项目;对改变。
诺曼·拉姆齐

7

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


读取文件系统对彼此存储库的访问权限需要系统管理员的干预,并且在unix上每对一组。该解决方案将无法实现。
诺曼·拉姆齐

如果您不介意每个人都对每个人的存储库具有读取访问权限,则不会。关于这些的好处是,读取访问足以在它们的存储库之间合并。
Orip

7

Darcs是出色的DVCS,特别是对于CS项目等较小的项目而言。希望我在大学时被介绍给Darcs或Git,并也向您推荐给您的学生。

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

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


5

darcs send设置很简单-运行时darcs send <remote repo>,它会查看_darcs/prefs/email远程存储库以确定将电子邮件发送到的位置。如果没有任何内容,则会提示用户。

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

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


1
我同意这darcs很容易建立,但是由于成为darcs FAIL的受害者,从字面上损失了数周的工作,我绝不会把它强加给学生。
诺曼·拉姆齐

3
发生了什么?darcs的大多数缺点都来自复杂的合并或大型的源代码树,因此对于学生项目来说应该是相当安全的。
GS-向Monica

5

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

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

尽管我还没有尝试过,但也有用于其他VCS(例如Subversion)的导入工具。


4

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

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

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

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

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


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驱动器,因为他们可以拔出USB驱动器,并在需要承认的时候来回传递,而以后打算独自编程的人可以继续使用。它。不过,这并不完全方便。

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

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


3

更新:六年后,我再也不会考虑将subversion再次用于任何用途。Git是必经之路。因此,尽管我仍然认为SVN有点“简单”,但甚至不值得再教。

我用过CVS,SVN,Bazaar和Git(按介绍的顺序),我不得不对学生说SVN是必经之路。实际上,当我担任TA领导时,我们实现了SVN,以替代旧的“提交脚本”(tar和电子邮件脚本)。Labstaff设置了一个基于Apache SVN-DAV的存储库,TA和讲师可以使用authz文件以非常细粒度的级别控制每个学生目录和组项目的权限,从而为学生提供了一个非常简单的首次提交路径。请参阅我的教程(最新TA撕下的凭据..嗯。)

关于在没有系统管理员干预的情况下使用Subversion,我在小组项目环境中也做到了这一点,我的小组成员以前都没有使用过Subversion,而且大多数人都犯了很少的混乱(除了一个人以外) 。我还编写了一个教程,用于在这里仅通过基本SSH访问建立这样的安全共享存储库。

我绝对不同意git是最适合初学者的VCS,因为初学者在提到任何VCS系统时都显得空白,更不用说由Linus自己写的mac-daddy了,VCS之王git。git并不比svn复杂,这是不正确的,并且仅缺少成熟的n00b工具就足以在这种情况下不使用它。我刚刚开始将git用于我在Netbeans中开发的新项目,并且已经遇到了Netbeans集成的严重限制。在一个学期中,您将不会使用svn无法提供的任何功能,因此git会显得过大。


2

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

至于集中化-我听说过提供免费SVN项目托管的网站。快速的Google搜索打开了页面,但是肯定还有更多。


2

如果您正在寻找真正可以设置的东西,那么为什么不选择免费的SVN托管选项,则不必设置任何东西!

不幸的是,每个人都会指出您是Assembla,Unfuddle的两个老版本,已经放弃了对其免费托管的支持(或者,如果您希望将它们私有化,则可以),但是您仍然可以使用Origo,它可以为您提供开放式和封闭式托管。

这样做的好处是您可以拥有所有项目并全都关注它们,并轻松控制有权访问的人员,而不必担心创建回购协议的权利。

如果您确实走这条路,并且想消除复杂性,那么必须使用GUI svn应用程序使学习变得平凡无奇(因为我怀疑会进行很多合并)。我建议tortoisesvn,直接进入Windows资源管理器上下文菜单。


Origo在2012
。– M4N 2014年

1

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

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


1

适用于Linux的RCS。

我发现没有比RCS for Widows更简单的方法了,但是并非所有RCS端口都能正常工作,因此您必须尝试一下,这会使它变得不简单。Windows对于开发人员而言并不简单。来自http://www.cs.purdue.edu/homes/trinkle/RCS/的Windows端口非常好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.