对我而言,在开源项目中开始使用版本控制的最佳方法是什么?


10

有人建议,由于项目的规模和缺乏技能,我将其开源,因此我签出了Google Code,开始制作一个项目,现在问我是否要让该项目具有Git,Mercurial或Subversion?代码托管。

我什至不知道什么是代码托管,而搜索只是让所有这些问题之间的争论让我更加困惑,而且由于Google Code询问我想要哪种类型的许可证,这种情况甚至变得更糟。

我想我不太了解开放源代码的真正含义,有人能大致解释一下这是什么吗?非常感激。

编辑在这三个版本的代码托管上,已经收到了很多不错的答复,但是我认为我无法传达一个真正的问题:基本上我不知道这个开源的东西是如何工作的,为什么还要在这样的地方托管代码? ?这是否意味着我必须从当前托管中删除该站点,或者这是一种完全不同的托管类型?当我使网站开源时会发生什么,我拥有什么权利,我放弃了什么权利。它是如何工作的,人们只是来免费向我扔代码吗?也许这些是愚蠢的问题,如果是这样的话,那么我想我需要愚蠢的答案,除了共享代码的概念外,我真的不知道什么是开源。



那是一个很棒的幻灯片放映,我认为它帮助我掌握了感谢分享的基本知识,现在它的更详细内容让我毫无头绪。

1
这实际上是两个问题,而且都可能是重复的。stackoverflow.com/questions/2303136/...stackoverflow.com/questions/3859/...
希尔瓦纳

2
“缺乏技能”听起来像使开源成为可怕的理由。如果您有一个伟大的想法,但缺乏技术技能,那么也许。在找到一个技术娴熟的合作伙伴后,我将开始开源,该合作伙伴准备致力于编写第一批代码,并且愿意开源。
2011年

Tripleee您能否建议一个网络或某种性质的东西,以便我可能找到可以与之合作的人?
内森

Answers:


7

我为什么要在这样的地方托管代码?

开源软件开发的关键是共享源代码。有几种方法可以做到这一点,例如将tar / zip文件放在Web或ftp服务器上。诸如Google代码(或sourceforge.net,gitorious.org,bitbucket.org等)之类的服务消除了为此目的运行自己的服务器的需要。

这是否意味着我必须从当前托管中删除该站点,或者这是一种完全不同的托管类型?

这些服务不是通用的Web主机,而是运行非常专业的服务。它们并不是要成为产品的主页,而应该是开发人员仪表板。

用谷歌代码你得到

  • 维基
  • 错误跟踪器
  • 常规文件下载空间
  • 版本控制服务器

当然,您可以在常规的Web服务器上设置这些软件(版本控制的东西可能很棘手,但这在很大程度上取决于细节),但是使用开发托管服务商的主要好处是您无需保重这些系统供您自己使用。主要缺点是您无法控制服务器上使用的软件,而必须使用该主机上的可用软件。您还需要考虑如果服务中断(好吧,谷歌永远不会失败),以及是否可以将数据从当前主机转移到另一台或您自己的服务器(考虑备份),会发生什么情况。

当我将网站开源时会发生什么,我拥有什么权利,

这是一个棘手的问题,因为它取决于您所居住国家的法律。

我赋予什么权利。

这取决于您授予产品的许可。它可以来自专有的开放源代码(例如PGP),用户基本上不能对代码做任何事情,而另一方面是公共领域,每个人都可以做他想做的事。

它是如何工作的,人们只是来免费向我扔代码吗?

因为您的产品需要足够的普及度才能吸引其他开发人员,所以这种情况极不可能发生。

[...]现在它问我是否要让该项目具有Git,Mercurial或Subversion代码托管。

这是三种不同的版本控制系统,其中Subversion是集中式版本控制系统,而Git和Mercurial是分布式的。

有宗教战争要使用哪一种,但要点是要使用一种。有关更多详细信息,请参见http://martinfowler.com/bliki/VersionControlTools.html

何时选择Subversion:

  • 您有二进制文件,这些文件不易合并,并且需要lock-> modify-> commit-> unlock工作流,该版本支持subversion¹
  • 您只需要检出目录结构的一部分。

¹有一个用于水银的锁扩展名,但是我没有使用它的经验,因此无法确定它是否可用。

当您不需要以前的功能时,最好使用Mercurial或Git。与Subversion相比,它们都具有以下优点:

  • 快(我真的是指
  • 易于分支和合并(由于Subversion> = 1.5,这会更好,但是并不相同)
  • 提交和发布是分离的,因此您可以在不干扰功能的情况下进行工作,并在完成后发布工作
  • 他们跟踪整个产品目录的状态
  • 克隆远程存储库时,将获得完整版本历史记录的完整副本
  • 密码保护的修订版本号,这意味着即使有人在服务器中发生故障,他也无法在不更改修订历史记录的情况下放置代码

    • 但由于没有人检查这些修订,因此此功能实际上无效

9

代码托管正是这样-在某个地方托管(或保留)您的代码。

Git,Mercurial和Subversion都是用于管理代码历史记录的源代码控制工具。Git和Mercurial是分布式系统,而Subversion是更传统的基于服务器的设置。

看一下Wikipedia或类似的东西,看看哪个对您最有吸引力。就个人而言,我们使用Mercurial,它对我们来说非常有效。


6

Joel Spolsky 写了一篇有关汞(Mercurial)的出色教程,我相信入门部分涵盖了Subversion,包括您升级到Mercurial的原因。阅读一下,它确实帮助我大致了解了Mercurial和DVCS。

哦,当您准备好托管时,可以使用Google Code,BitBucketGithub(在此出色的扩展程序的帮助下)或其他工具。


Mercurial是一个出色的系统,仅用了几分钟就使我从颠覆中获得了成功。
Jim in Texas

3

我使用git,由于分布式控制,我发现它更易于管理。汞对这个特定目的也有好处,但是我从来没有使用过,对此我不能给你建议。SVN是一个集中式系统,因此不太实用,但可能会稍微简单一些。

开源基本上意味着您赋予任何人使用和构建您作品的能力。您可以设置使用的界限:例如,GPL意味着用户必须将其添加的作品公开化,LGPL则意味着他不需要这样做。


2

Subversion是最简单的选择,因为它是VCS。Git和Mercurial是DVCS系统。它们更现代,功能更强大,但难以理解。使用诸如TortoiseSVN或TortoiseHG(适用于Mercurial aka HG)的前端也确实有帮助。

如果您的软件是独立程序,则可以使用GPL或使用BSD许可证来真正打开它。如果您的项目是一个库,其他人将使用LGPL或BSD进行链接;但不要使用GPL。

[编辑]

至于您开源软件的最初动机:不幸的是,仅使软件开源并不意味着您会获得大量有才华的自由劳力。有成千上万个开源项目。他们中只有一小部分具有活跃的贡献成员。这些项目成功与否的原因与企业成功与失败的原因一样多。如果您想成为一名优秀的程序员并生产出好的软件,则必须花费大量时间学习,编写代码并在诸如StackOverflow之类的网站上与其他人进行交流。


1
为什么说svn最简单?请说明这一说法。

1
@Richard:我认为他的意思是说,将其设置和用于基本用法要容易一些,至少我同意这种接受。我不同意您的图书馆不应该使用GPL的观点,这确实是一种政治立场。
Kheldar 2011年

如果要对库的使用施加某些限制,请对库使用GPL。如果要施加较少的限制,请使用LGPL。
基思·汤普森

0

在我看来,虽然大多数人都在回答问题的方式,但没有人真正回答您问题中的原因

我经历过的第一个开源项目之一就是神话般的Fractint项目,该项目是由Stone Soup Group开发的,该项目的灵感来自古老的Stone汤民间故事

对我而言,这比任何Stallman rant甚至原始GNU Manifesto都更好地封装了开源精神。在那个特定的烹饪锅点燃篝火23年后,Fractint 仍在发展,这证明了该社区的实力。


0

开源意味着任何人都可以阅读,复制,修改和分发您的代码。在继续之前,您应该对此有深刻的了解。也许您应该读一本书,或者至少浏览有关该主题的Wikipedia文章和/或http://opensource.org/,直到您对概念有所了解。

(O'Reilly的书Open Sources http://oreilly.com/openbook/opensources/book/index.html很有帮助,但可能并不完全符合您的需求。)

使用什么源代码控制系统完全是次要的。您可以将代码复制/粘贴到网页上并完成。话虽如此,版本控制很重要,并且是降低开发人员贡献标准的良好工具。Google Code提供的任何选项都可以;选择您喜欢的人,或者推迟问题,直到您可以向贡献者询问他们要使用哪一个。


0

使您的代码或项目开源,意味着每个人都可以按照自己的意愿进行修改。这取决于您选择使用哪种许可证,但是一般而言,开源意味着任何人都可以使用源代码来下载,修改和随意使用它们。

无论如何,此代码需要其他人可以访问才能获得。

将您的代码带到GitHub等公共在线存储库是最好的方法。首先,您的代码现在可供公众使用。然后,由于此类服务还提供了版本控制,因此您的代码是按项目组织的。您可以跟踪您和其他人所做的更改。由于它还允许将项目分支(分离)到其他不同的项目,因此您可以跟踪其他人使用您的代码编写的所有不同版本。

这也可以确保您的代码存储在安全的地方,例如,您不必担心由于PC上的故障硬盘而丢失代码。而且,当您要使用它时,由于您的代码在线,因此可以在任何地方工作,您可以在任何地方找到它。

然后,如果您决定是时候向全世界展示代码,则只需将链接发送到在线项目存储库即可。这是人们逐渐习惯的技术,因此,由于每个人都知道,因此更容易了解如何下载,发布消息,创建不同的版本等。

这就像做事的通用标准,惯例。

您可能会发现一些有助于进一步解释开源的链接:


-6

关于版本控制系统,我要说的是您应该坚持使用最新的替代方法:即“ Git”。Mercurial不太流行,而SVN又旧又慢且集中。使用GIT,您将受益于现代且流行的版本控制系统。几乎没有损失。

来源(随着DVCS的普及):

/programming/tagged/git〜10k个问题 /programming/tagged/mercurial〜3k个问题

http://www.googlefight.com/index.php?lang=zh_CN&word1=git&word2=mercurial

11700000个结果

1580000结果

关于许可证:也许您应该查看最常见的许可证:GLP,MIT,LGPL,BSD,然后选择更适合您的项目的许可证。


7
Mercurial不是专有的...它完全像Git一样是开源的!
Christian Specht

4
Fanboy的回答带有部分错误的论点。
Oben Sonne

1
“最常用”-请提供您该信息来源的参考。
sylvanaar 2011年

抱歉,..这只是我对事情的看法:我猜想Git比Mercurial更加有用,而且我知道SVN古老,缓慢且集中...我想知道您的评论是否比我所谓的评论少fanboy-answer。来吧,git hub使用git,Linux内核使用git,我系中的每个项目都使用git ...
Pedro Rolo

2
也许有关Git的大量问题也说明它更难使用?一些人在调查哪些Web开发框架在提出相同观点时最“流行”时使用了相似的数据(对不准确性进行评论)。
Tim Post
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.