我为什么要使用版本控制?

时间:2009-09-11 00:35:26

标签: svn git version-control cvs

我正在阅读一篇博客作者说这个

  

“代码不存在,除非它被检入版本控制系统。对你所做的一切使用版本控制。任何版本控制,SVN,Git,甚至CVS,掌握它并使用它。”

我从未使用过任何版本控制,但我觉得它并不那么棒。我之前用Google搜索并查看过它,但如果你愿意的话,我只需要将它用于孩子们的条款。

据我所知,SVN之类的东西用于在线存储您的代码,以便一组用户或其他开发人员可以访问相同的代码。更新一些代码后,您可以提交新版本,SVN将保留旧代码的副本以及您更新的新代码。

这是它的基本概念还是我完全错了?

如果我是对的,那么如果我:

可能没用多少
  • 没有其他人在处理代码。
  • 不要打算让其他人拥有代码。

20 个答案:

答案 0 :(得分:252)

你有没有:

  • 对代码进行了更改,意识到这是一个错误并希望恢复原状?
  • 丢失代码或者备份太旧了?
  • 是否要维护产品的多个版本?
  • 想要查看代码的两个(或更多)版本之间的区别吗?
  • 想要证明特定的更改破坏或修复了一段代码?
  • 想要查看一些代码的历史记录?
  • 想要改变别人的代码吗?
  • 想要分享您的代码,还是让其他人处理您的代码?
  • 想看看做了多少工作,在哪里,何时以及由谁做?
  • 想要在不干扰工作代码的情况下尝试新功能吗?

在这些情况下,毫无疑问是其他人,版本控制系统应该让您的生活更轻松。

误导朋友:文明时代的文明工具。

答案 1 :(得分:55)

即使您单独工作,您也可以从源代码管理中受益。其中,出于以下原因:

  • 你不会失去任何东西。我再也没有注释过代码。我只是删除它。它不会弄乱我的屏幕,也不会丢失。我可以通过查看旧提交来恢复它。

  • 您可以随意进行实验。如果它没有解决问题,请将其还原。

  • 您可以查看以前版本的代码,以了解引入错误的时间和位置。 git bisect在这方面很棒。

  • 更多“高级”功能(如分支和合并)可让您拥有多条平行的开发线。您可以在不受干扰的情况下同时使用两个功能,并且可以毫不费力地来回切换。

  • 你可以看到“改变了什么”。这可能听起来很基本,但这是我发现自己经常检查的东西。我经常开始我的单人工作流程:我昨天做了什么?

继续尝试吧。从基本功能开始慢慢开始,随时学习其他功能。你很快就会发现你不会想要回到没有VCS的“黑暗时代”。

如果你想要一个本地VCS,你可以设置自己的subversion服务器(我过去做过的),但今天我建议使用git。更简单。只需cd到您的代码目录并运行:

git init

欢迎来到俱乐部。

答案 2 :(得分:18)

版本控制是一种罕见的工具,我认为是绝对必需的,即使您只是将它作为独立开发人员使用。有些人说这是你生活和死亡的工具,我同意这个主张。

您现在可能正在使用版本控制,即使您不知道它。你有任何文件夹内容,例如“XXX Php Code(December)”或“XXX.php.bak.2”吗?这些已经是版本控制形式。一个好的版本控制系统会自动为您解决这个问题。您将能够回滚到任何时间点(您已签入数据)并能够查看该数据的精确副本。

此外,如果您采用类似subversion的系统,并使用远程存储库(例如您拥有的服务器上的存储库),您将有一个地方可以保留所有代码。需要在其他地方复制您的代码吗?没问题,请检查一下。硬盘在家里崩溃了?不是问题(至少使用您的源代码)。

即使您现在不使用版本控制,您也可能会在职业生涯后期的某个时间点使用它,您现在可以从更加熟悉原则中受益。

答案 3 :(得分:14)

即使是独自工作,这件事发生过吗?你运行你的应用程序,有些东西不起作用你说“昨天工作,我发誓我没有触及那个类/方法。”如果您定期检查代码,快速版本差异将显示最后一天发生了哪些变化。

答案 4 :(得分:12)

这是一个场景,可以说明源控制的有用性,即使你单独工作。

  

您的客户要求您对网站实施雄心勃勃的修改。它将花费您几周时间,并涉及对许多页面的编辑。你上班了。

     

当客户致电并告诉您放弃正在进行的操作以对网站进行紧急但更微小的更改时,您已完成此任务的50%。你没有完成更大的任务,所以它还没有准备好上线,客户端不能等待较小的更改。但是他也希望将微小的改变合并到你的工作中以进行更大的改变。

     

也许您正在一个包含该网站副本的单独文件夹中处理大型任务。现在,您必须弄清楚如何以可以快速部署的方式进行微小更改。你疯狂地工作并完成它。客户端回调进一步的细化请求。你也这样做并部署它。一切都很好。

     

现在您必须将其合并到正在进行的主要更改工作中。你为紧急工作改变了什么?你工作得太快,无法记笔记。而且你现在不能简单地区分这两个目录,因为两者都有相对于你开始的基线的变化。

上面的场景表明,即使你单独工作,源代码控制也是一个很好的工具。

  • 您可以使用分支处理长期任务,然后在完成后将分支合并回主线。
  • 您可以将整个文件集与其他分支或过去的修订版进行比较,看看有什么不同。
  • 您可以跟踪一段时间内的工作情况(顺便说一句,这非常适合报告和开发票)。
  • 您可以根据日期或您定义的里程碑恢复任何文件的修订。

对于个人作品,建议使用Subversion或Git。任何人都可以自由选择其中一个,但要么明显优于不使用任何版本控制。好的书是Mike Mason的“Pragmatic Version Control using Subversion, 2nd Edition”或Travis Swicegood的“Pragmatic Version Control Using Git”。


原作者:Bill Karwin

答案 5 :(得分:10)

即使单个开发人员源代码控制提供了很大的好处。它允许您存储代码的历史记录,并随时恢复到以前版本的软件。这使您可以无畏地进行实验,因为您可以随时恢复到正在运行的源代码的另一个版本。

就像有一个巨大的“撤消”按钮一直回到你的第一行代码。

答案 6 :(得分:7)

开始使用后,版本控制几乎不可能没有。如果不止一个开发人员在相同的代码库上工作,这是必不可少的......但对于单个开发人员来说它也非常有用。

它跟踪代码中的更改,并允许您回滚到以前的版本。它可以让您自由地尝试一下这样的知识:如果有任何问题,您可以撤消更改。

答案 7 :(得分:5)

您获得安全性(在备份代码的意义上)和代码版本化(假设您养成了经常提交更改的习惯)。即使没有其他人最终与你合作代码,两者都是非常好的东西......

答案 8 :(得分:3)

即使您单独工作,版本控制也非常适合检查以前的版本。例如,如果您不小心删除了代码或文件,则可以将其取回;或者你可以比较以前的版本,看看为什么一个新的bug已经悄悄进入。如果你是一个在多个地方工作的人,这也很好。

我个人最喜欢的是git。

答案 9 :(得分:3)

其他人似乎没有明确提到的是标记或标记版本。如果您的客户端使用的是您的软件的第1版,并且您正在忙于处理第2版,那么当客户端报告错误并且您需要构建版本1.1时,您会做什么?

源代码控制系统会让你标记你发布的每个版本,以便稍后再回到它,进行修复(并将修复程序合并到新版本2代码中)并制作新版本,而不必担心你可能会意外提供尚未准备好的东西。

源代码控制是现代软件开发的核心部分。如果您没有使用它(即使是个人项目,因为您拥有的体验越多越好),您做错了。

通常我在接受某份工作面试时提出的第一个问题是“你用什么来控制源代码?”到目前为止,只有一个地方说“什么都没有”,但他们正计划修复“真的很快......”

答案 10 :(得分:3)

使用版本控制有很多原因,即使您是唯一会触及代码的人。

  • 备份 - 如果您的硬盘崩溃了怎么办?你有地方有副本吗?
  • 修订历史记录 - 您目前是否将代码副本保存在不同的文件夹中?通过版本控制,您可以使用工具随时跟踪更改并轻松区分不同的修订,合并,回滚更改等。
  • 分支 - 能够测试一些更改,仍然跟踪您正在做的事情,然后决定是否要保留它并合并到主项目中或者将其丢弃。

如果您将代码保留在版本控制之下,那么可以很容易地看到您更改了哪些文件(或者忘记添加到基线中)。

答案 11 :(得分:2)

其他开发人员参与与否的事实与版本控制系统的需求完全正交。

您可以成为唯一的开发者,但仍将受益于:

  • 所有更改的历史记录
  • 能够在历史上前后推进
  • 能够尝试使用源并且仍然具有工作版本(分支)
  • 备份副本(特别是如果您使用其他计算机作为源控制服务器,如果定期备份该计算机则更多)

现在,如果你有一个小组在相同的代码库上进行开发,那么版本控制仍然是必要的,所以

  • 人们可以同时编辑同一个文件(取决于特定的系统,但大多数理智的允许你这样做)
  • 你可以告诉谁在
  • 时对代码做了什么

当有更多人参与时,根据开发风格,您选择哪种版本控制工具更为相关。

答案 12 :(得分:1)

它也是关于备份旧文件的原因,它被称为“Subversion”。因此,您可以管理多个版本的工作,您可以在其中返回(还原)并管理它的不同实现(分支)。

答案 13 :(得分:1)

我最近才开始对版本控制产生兴趣。在版本控制系统中,您的代码具有存储库的概念。很快就可以学习大量新的shell命令,以便您可以与此存储库进行交互。

将代码保存到文件后,您可以提交将其添加到项目的存储库中。在开发代码并提交更改时,存储库会开发一系列修订版。您可以通过签出修订来访问其中任何一项。如果您单独工作,除非您丢失代码文件或想要在不同的计算机上工作,否则您不太可能进行大量检查。在这些情况下,您通常会查看所有文件的最新版本。

就我自己而言,当我决定重构某些内容时,我不再保留名为“project_old”的文件或文件夹。我所做的任何更改都会逐步存储,我将始终可以向后退到一个整体的项目中。我现在很少使用FTP进行部署,因为我只是通过ssh检查我的代码。只下载了我已更改的文件,如果我需要在服务器上重新加载终端已经在那里。

我发现这篇关于GIT的演讲真的很有启发性; http://www.youtube.com/watch?v=4XpnKHJAok8

这是一个谷歌谈话,其中Linus Torvalds提出使用一个版本控制系统而不是另一个版本控制系统的论点。在这样做时,他解释了他们如何使用概念,然后比较实现它们的不同方法。

答案 14 :(得分:1)

即使您尚未处于需要较旧版本程序的情况下,使用源代码控制可以让您更有信心进行重大更改。

我发现自己在使用源代码控制后进行了更积极的重构,因为我总是知道可以轻松恢复正常工作的版本。

答案 15 :(得分:1)

听起来你正在寻找更轻盈的东西。查看Mercurial(awesome reference book)。我将它用于所有事情,从源代码到个人通信。

一些好处:

  • 巨型撤消按钮,因此当代码实际运行
  • 时,您可以返回上周的那些宁静日
  • 丢弃代码。不确定这是否是做某事的最佳方式?做一个分支和实验。如果你正在使用像mercurial这样的DVCS,那么除了你以外,没有人知道它。
  • 同步开发。我在4台不同的计算机上开发。我在它们之间推拉以保持电流,所以无论我在哪一个,我都有最新的版本。

答案 16 :(得分:1)

您可能会发现自己的程序有效。

您决定在一段时间内添加一些新功能,然后释放它。

您开始收到错误报告,这些报告会影响您认为未触及的某些代码。

例如,通过使用SVN,您可以移回旧版本,并检查是否存在新错误。一旦找到引入该bug的版本,就可以更容易地修复它,因为您可以将工作版本与不起作用的版本进行比较并查看更改后的内容,然后缩小搜索范围。

即使您是唯一的开发人员,源代码管理也有很多用途。

答案 17 :(得分:0)

这取决于项目的大小以及您对部分内容的改变。对于刚刚以线性方式完成某些工作的小型项目,版本控制可能不会有太大帮助(尽管如果您在没有版本控制的情况下意外删除或损坏文件,您将会哭泣)。

但是几个星期前,我遇到了一位正在自己写一个巨大爱好项目的朋友。他有十到二十个他的代码副本,后缀有“X1”,“X2”,“测试”,“更快”等等。

如果您已复制了两份以上的代码, 需要版本控制。一个好的版本控制系统可以让你撤消你前一段时间所做的更改,而不会撤消你做出改变后所做的事情。它可以让您查看何时进行了某些更改。它允许您将代码分成两个“路径”(例如,一个用于测试新想法,另一个用于保持“经过尝试和信任”的代码安全,直到您完成测试),然后将它们合并在一起。

答案 18 :(得分:0)

即使你自己工作,你也可能想要像颠覆这样的东西,这样你就有了所有变化的历史。您可能希望看到一段代码看起来像往常一样,以便记住您进行更改的原因。

经常办理登机手续时,拥有源代码管理功能也非常有用。如果您经常办理登机手续,您将始终处于经常退回的状态。很多时候你可以开始走一条路来解决问题,然后意识到这是错误的路径。很多时候你可能只是继续走错路,最终建立一个糟糕的解决方案 - 只是因为你不想失去所有的工作。通过经常办理登机手续,“幸福”的最后一点并不遥远,所以即使你走错了路,你也可以随时回滚再试一次,制作一个更优雅,更简单的解决方案。这总是一件好事,所以你可以理解和维护你将来写的东西。

答案 19 :(得分:-1)

现在是2019年。在这个相对较晚的日期,我遇到反对使用Git的异议。异议我在这里看到一些反对意见。该讨论极大地阐明了使用源代码控制而不是简单地创建命名备份副本的必要性。关键一点是即使在我们只有一个开发人员项目的情况下,也要使用源代码控制。没有人是完美的。你犯错了。如果您非常优秀和聪明,那么您将要开发更复杂的应用程序;但是您仍然会犯一些错误,这可以解决。真是的,皮特!我从不使用Linux,但我认为我们都尊重Linus Torvalds的出色技术。他认识到源代码控制的重要性,并且为Git的诞生做出了重要贡献。出于此处给出的所有原因,这是一个总结点。 Torvalds明白了:源代码管理非常重要:使用源代码管理。感谢所有对这个长期运行的话题发表评论的人。