Why should I use version control?

我在一个博客上看到作者这么说

”代码不存在,除非它签入版本控制系统。对所有操作都使用版本控制。任何版本控制,SVN,Git,甚至 CVS,掌握并使用它。”

我从来没有使用过任何类型的版本控制,我觉得它没有那么好。我以前谷歌过它,也看过它,但我只需要把它放到儿童条款里,如果你愿意的话。

根据我现在的理解,像 SVN 这样的东西是用来在线存储代码,以便一组用户或其他开发人员能够访问相同的代码。一旦您更新了一些代码,您就可以提交新版本,SVN 将保留您更新的旧代码和新代码的副本。

这是它的基本思想还是我完全搞错了?

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

  • 不要让其他人处理代码。
  • 不要打算让别人拥有代码。
60257 次浏览

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

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

即使作为一个单一的开发人员源代码控制提供了很大的好处。它允许您存储代码的历史记录,并在任何时候恢复到以前版本的软件。这使您可以无所畏惧地灵活进行试验,因为您总是可以恢复到正在工作的源代码的另一个版本。

It's like having a giant "undo" button all the way back to your first line of code.

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

我个人最喜欢的是 Git。

即使你单独工作,你也可以从源代码控制中获益:

  • You don't lose anything. I never again commented out code. I simply delete it. It doesn't clutter my screen, and it isn't lost. I can recover it by checking out an old commit.

  • 你可以随心所欲地做实验,如果解决不了问题,那就还原它。

  • 您可以查看以前版本的代码,找出引入 bug 的时间和地点。git bisect在这方面是伟大的。

  • More "advanced" features like branching and merging let you have multiple parallel lines of development. You can work in two simultaneous features without interference and switch back and forth without much hassle.

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

试试吧。慢慢地开始学习基本功能,并在学习过程中学习其他功能。你很快就会发现你再也不想回到没有 VCS 的“黑暗时代”了。

If you want a local VCS you can setup your own subversion server (what I did in the past), but today I would recommend using git. Much simpler. Simply cd to your code directory and run:

git init

Welcome to the club.

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

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

此外,如果您采用一个类似 subversion 的系统,并使用一个远程存储库(比如您所拥有的服务器上的存储库) ,那么您将有一个地方来保存所有代码。需要在其他地方复制一份代码吗?没问题,去看看吧。家里硬盘崩溃了?没有问题(至少在源代码中是这样)。

即使你现在不使用版本控制,你也可能在以后的职业生涯中的某个时候使用它,你可以从现在对这些原则更加熟悉中受益。

Version control is almost impossible to live without after you start using it. It is indispensible if more than one developers are working on the same code base...but it also quite useful for a single developer.

它跟踪代码中的更改,并允许您回滚到以前的版本。它让你自由地体验这样的知识: 如果有什么东西坏了,你可以撤销你的改变。

你有没有过:

  • 对代码进行了修改,意识到这是一个错误,然后想要恢复原状?
  • 代码丢失还是备份太旧了?
  • 必须维护一个产品的多个版本?
  • 想查看两个(或更多)代码版本之间的差异吗?
  • 想要证明某个特定的更改破坏或修复了一段代码?
  • 想回顾一下代码的历史吗?
  • Wanted to submit a change to someone else's code?
  • 想要共享您的代码,还是让其他人处理您的代码?
  • 想看看有多少工作正在进行,在哪里,什么时候,由谁来完成?
  • 想在不干扰工作代码的情况下尝试新特性?

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

误引一位朋友的话: 文明时代的文明工具。

You'll probably want something like subversion even if you're working by yourself so that you have a history of all your changes. You might want to see what a piece of code looked like once upon a time to remember why you made a change.

当您经常签入时,拥有源代码管理也很有用。如果你经常检查,你也会经常处于一种需要回退的状态。很多时候,你可能开始走上一条解决问题的道路,然后意识到这是一条错误的道路。很多时候,你可能会一直沿着错误的道路狂吠,最终得到一个糟糕的解决方案——只是因为你不想失去所有的工作。通过经常登记,“幸福”的最后一点就在不远处,所以即使你走上了错误的道路,你总是可以回头再试一次,制定一个更优雅、更简单的解决方案。这总是一件好事,这样你就可以理解和维护你在未来写的东西。

您可能会发现您的程序有一个工作版本。

您决定在一段时间内添加一些新特性,然后发布它们。

您开始收到影响某些您认为没有触及的代码的 bug 报告。

例如,通过使用 SVN,您可以回到旧版本,并检查是否存在新的 bug。一旦你找到了一个引入 bug 的版本,修复它就会更容易,因为你可以比较哪个版本有效,哪个版本没有效,看看哪个版本发生了变化,然后它就会缩小搜索范围。

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

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

你可以是唯一的开发者,但仍然可以从中受益:

  • 你所有变化的历史轨迹
  • 回顾和展望那段历史的能力
  • 能够对源代码进行实验,并且仍然有一个工作版本(分支)
  • 备份副本(特别是如果使用不同的机器作为源代码管理服务器,如果定期备份该机器,则备份副本更多)

现在,如果您有一个在相同代码基础上开发的组,那么版本控制仍然是非常必要的

  • 人们可以在同一时间编辑同一个文件(取决于特定的系统,但是大多数理智的系统允许您这样做)
  • you can tell who did what to the code when

When there is more people involved it is more relevant which version control tool you pick, depending on the style of development.

听起来你想要更轻的东西。检查 Mercurial (很棒的参考书)。我什么都用它,从源代码到私人信件。

一些好处:

  • 巨大的撤销按钮,所以你可以返回那些平静的日子,上周的代码 actually ran
  • 扔掉代码。不知道这是不是最好的办法?做一根树枝,做实验。只有你自己知道如果你使用 DVCS 就像水银一样。
  • 同步发展。我在四台不同的电脑上开发。我在它们之间推拉来保持电流,所以不管我在哪里,我都有最新的版本。

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

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

如果您将代码置于版本控制之下,那么就很容易看到您更改了哪些文件(或者忘记添加到基线)。

Even if you haven't been in a situation yet where you needed an older version of your program, having a source control gives you greater confidence to make major changes.

在使用了源代码控制之后,我发现自己做的重构更加积极,因为我总是知道可以很容易地恢复一个正常工作的版本。

这取决于项目的规模以及你对其中一部分改变主意的频率。对于那些只是以线性方式完成某些工作的小型项目,版本控制可能帮不上什么忙(尽管如果您意外地删除或损坏了一个没有版本控制的文件,您可能会哭)。

但是几个星期前,我遇到了一个朋友,他正在自己写一个庞大的业余爱好项目。他有十到二十份代码,后缀有“ X1”、“ X2”、“ test”、“ Speed”等等。

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

我也是最近才开始对版本控制感兴趣的。在版本控制系统中,代码有 储存库的概念。学习大量新的 shell 命令非常快,因此您可以与这个存储库进行交互。

一旦将代码保存到文件中,就可以将其 承诺到项目的存储库中。当您开发代码并提交更改时,存储库将开发一系列 revisions。您可以通过 退房访问其中的任何一个版本。如果您单独工作,那么除非您丢失了代码文件或者想要在不同的机器上工作,否则不太可能执行太多的检出操作。在这些情况下,您通常会检出所有文件的最新版本。

就我自己而言,当我决定重构某些东西时,我不再保留名为“ project _ old”的文件或文件夹。我所做的任何更改都是以增量的方式存储的,我总是能够向后退一步,回到一个作为一个整体工作的项目。我现在很少使用 FTP 进行部署,因为我只是通过 ssh 签出代码。只有我修改的文件被下载,如果我需要在服务器上重新加载,终端已经在那里。

I found this talk on GIT to be really instructive; http://www.youtube.com/watch?v=4XpnKHJAok8

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

其他人似乎没有明确提到的东西是发布的标签或标签。如果您有一个使用您的软件版本1的客户端,并且您正忙于处理版本2,那么当客户端报告错误并且您需要构建版本1.1时,您该怎么办?

源代码控制系统将允许您标记您发布的每一个版本,这样您可以在以后返回到它,进行修复(并将修复合并到新的版本2代码中) ,然后发布一个新的版本,而不用担心您可能意外地交付一些还没有准备好的东西。

Source control is a core part of modern software development. If you're not using it (even for personal projects as the more experience you have the better) you're doing something wrong.

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

即使是单独行动,这种事情发生过吗?你运行你的应用程序,某些东西不工作,你说“昨天工作,我发誓我没有触及该类/方法。”如果您定期检入代码,那么一个快速的版本差异会准确地显示最后一天发生了什么变化。

Here's a scenario that may illustrate the usefulness of source control even if you work alone.

你的客户要求你对网站进行一次雄心勃勃的修改。这将花费你几个星期的时间,并涉及到许多页面的编辑。你去工作。

当客户打电话告诉你放下手头的工作,对网站进行一个紧急但较小的更改时,你已经完成了50% 的任务。您还没有完成更大的任务,所以它还没有准备好上线,客户机也不能等待更小的更改。但是他也希望小的变化能够合并到您的工作中,以实现更大的变化。

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

现在,您必须将其合并到正在进行的工作中,以便进行重大更改。你为紧急工作换了什么衣服?你工作太快了,没法做笔记。现在,您不能简单地区分这两个目录,因为它们都相对于开始时的基线进行了更改。

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

  • 您可以使用分支处理较长期的任务,然后在完成后将分支合并回主线。
  • You can compare whole sets of files to other branches or to past revisions to see what's different.
  • 您可以跟踪工作随时间的变化(顺便说一下,这对于报告和开发票非常有用)。
  • 您可以根据定义的日期或里程碑恢复任何文件的任何修订。

对于单独工作,Subversion 或 Git 是推荐的。任何人都可以自由选择其中一种,但是无论哪种都比不使用任何版本控制要好。好书是迈克 · 梅森的《 使用 Subversion 的实用版本控制,第2版》或特拉维斯 · 斯威斯古德的《 使用 Git 的实用版本控制》。


原作者: Bill Karwin

现在是2019年。在这个相对较晚的时候,我遇到了对使用 Git 的反对意见; 在这里我看到了一些提出的反对意见。这个讨论极大地澄清了使用源代码管理而不是简单地制作命名备份副本的必要性。一个关键点是源代码控制的使用,即使我们有单一的开发人员项目。人无完人。你会犯错。如果你特别优秀,特别聪明,你将会开发更复杂的应用程序; 但是你仍然会犯一些错误,这个可以解决它。天啊,皮特!我从未使用过 Linux,但我认为我们都尊重 Linus Torvalds 伟大的技术智慧。他认识到源代码管理的重要性,并为 Git 的创建做出了重要贡献。对于这里给出的所有理由,这是一个总结点。Torvalds 明白: 源代码控制非常重要: 使用源代码控制。感谢所有对这个长期存在的话题发表评论的人。