...我不想分成几个问题帖子,因为我猜,它们是基本的,这里的大多数人都知道如何回答.
我已经开发了好几年了,我从来没有时间去学习版本控制.重命名具有不同版本名称的目录似乎总是足够的.现在,我终于决定学习它,但是一些基本的术语和工作原理仍然让我感到困惑.
我的项目相对较小,最多10个文件(虽然文件相对较大),并且以非OO方式完成.我经常采取一种方法,在某种程度上做到这一点,然后决定那样做,然后(重用旧代码)用完全不同的文件组织和内部代码组织完全重写整个项目.文件消失和出现在这些"版本"之间的新文件并不罕见.
所以这是我的"困惑":
1)例如,如上所述,我已将第一个版本推入vc.然后我删除所有文件,并重新重写它们.如果我理解得很好,那将是一个新的"分支",对吧?
2)如果我继续开发该版本,我会继续致力于那个"分支"吗?
3)vc保存,在分支中保存保存点时,所有文件都在,或者只是保存它们之间的差异?
4)我可以轻松地从分支中的某个保存点获取所有(整个项目)文件,还是我必须通过差异来跟踪它直到开始?(我只想说,"这里,这是保存点 - 复制你需要的所有文件,所以它看起来像这样")
5)用非常简单的术语来表示"推"和"拉".我不明白"推"/"拉"和"提交"之间的区别.
如果重要的话,我正在使用VS 2008,并且正在考虑使用git-extensions,因为我听说过很好的东西.它是一个很好的组合,考虑到上述情况,使用SVN(例如VisualSvn或Ankh)对我来说是更好的选择吗?
- 关心,彼得
您的部分困惑可能来自不同版本控制系统(VCS),它们使用不同的术语.
我通常会想到"行"中的代码.我从文件的原始版本开始,并将其保存到我的版本控制系统.将其放入VCS称为"签到".版本控制系统用一些数字标记它,例如1.0版.现在我编译我的软件.它坏了,所以我必须编辑它.为此,我"检查"版本控制系统并进行编辑.现在它已修复,我将其重新检入并且版本控制系统将其存储为修订版1.1.我的老板想要一个新功能,所以我检查出来,编辑它,然后再次检查它,它被存储为修订版1.2.
这是代码的"主线"或"主干".
通过指定版本号,版本控制系统将允许您获取文件的任何旧版本.假设我从基于修订版1.1的软件获得错误报告.我可以使用"diff"或任何比较工具来比较1.1和1.0,看看有什么变化.版本控制系统如何在内部存储它并不重要,我只是通过修订号询问它,我得到整个文件.
接下来要理解的是,一组文件构成了您的项目或解决方案.当您要编译软件以将其发布到全世界时,您希望将"标签"与所有这些文件相关联,这样您就可以将它们全部视为一个组.大多数人使用数字标签,如Windows 3.0,Windows 3.51等,但这只是惯例.如果你愿意,你可以标记一个版本"hardy heron"或"gutsy gibbon".
现在,如果你是一个随时随地不断更新的人,这一切都很好.但是,假设您继续使用您的软件,然后发布版本7,然后是8版本,然后是9版本,现在您正在使用版本10.但是今天您将收到有关版本7的严重错误报告,您只需要修复它.因此,您转到VCS并请求标签为"版本7"的所有源文件.您可以将它们放入磁盘上的单独文件夹中,并修复该错误.但是当你去检查那些文件时,你需要它们成为版本7的一部分,因为你已经在版本8和9中添加了功能.这就是你创建一个"分支".
一个例子可能更清楚.假设你检查了包的"版本7",要修复的文件是修订版1.23.在版本10(您正在另一个文件夹中工作),您正在使用版本1.40.您不希望版本7的更改进入1.41,因为这会覆盖并破坏您在修订版1.24至1.40中添加的所有简洁功能.因此,您创建一个分支,并将更改的文件签入为修订版1.23.0.1.你编译它,现在修复了错误.现在您必须将其发布给您的客户.发布时,您将创建一个新标签.我将这个标记为"版本7.1",这样我就能分辨出破碎的软件和固定软件之间的区别.而且我知道它没有版本8+的所有功能.
如果你在一条线上绘制这些软件版本,你会想到一条直线从1到10的数字线.7.1适合这条线?它伸出一边,就像树枝从树干伸出一样.这就是我们得到"分支"和"主干"的名称.