git,github,fork&的核心概念是什么?科。 git与SVN相比如何?

时间:2012-02-09 01:16:33

标签: git svn github branch fork

我一直在使用Github,但我对Git背后的一些关键概念感到有些困惑。

我对VCS的背景始于Source Safe,然后转换为SVN和TFS。我想我已经陷入了对CVS系统的旧思维方式,比如SVN和TFS。

Git中被认为是服务器端和客户端。据我所知,他们之间并没有明显的区别。

从技术意义上讲,Fork意味着什么。它是分支的“类型”吗?

Wat在git中的分支意味着什么?它与SVN中的相同吗?

此外,我一直在寻找Git核心概念的良好可视化,但没有找到任何适合我的。

5 个答案:

答案 0 :(得分:38)

以下是如何理解Git:

  1. 忘记关于其他VCS的所有信息(暂时!)
  2. 阅读The Git Parable真的尽管如此,如果你浏览它,你会错过任何东西,并试着填补你现有的SCM知识的空白,这就是让你失望的原因。事实上,如果你真的想要理解,请阅读大声
  3. 的博客文章。

    Git只是一种保存和恢复快照的方法。每个快照都有一个“ID”(SHA1),并且可能有一个或多个“refs”(指针)。分店?只是特定快照的友好名称。标签?一样。头?这只是当前快照的“代名词”。方便的是,这些快照每个都带有对更改内容的描述 - 此描述是提交消息。

答案 1 :(得分:9)

  

Git是DVCS(分布式版本控制系统)

Git(本地)在您提交文件的项目根目录中有一个目录(.git /)。

Git是一个DVCS(分布式版本控制系统),它使您能够经常保存文件的副本(“版本”),并能够合并超过1人完成的工作,并且您还拥有离线工作的能力。

Git不同于更传统的CVS(代码版本控制系统),如SVN(Subversion)或CVS,它们有分支,但没有“本地和远程”概念(您的提交直接指向远程)。使用git,您首先提交到本地存储库,然后将这些更改推送到远程。这鼓励更频繁的提交和以较小的块完成工作。它还可以更好地支持离线工作,因为您可以在离线时提交,然后在下次在线时同步和拉/推。

Git通过保存整个文件将每个更改存储到文件中。它在这方面与svn不同,你可以在不通过增量变化“重新创建”的情况下访问任何单个版本。

Git没有“锁定”文件并且需要对编辑进行独占锁定(像pvcs这样的旧系统会浮现在脑海中)。它实际上是在拉取或提取期间将文件更改(在同一文件中!)合并在一起的一项了不起的工作。您需要进行手动更改的唯一时间是两次更改涉及相同的代码行。


分行

这是您希望保留主代码,制作副本(分支)然后在该分支内工作的时间。完成后,将分支合并回主存储库。例如,如果您正在升级到新版本,可能就是这样 一些商店和个人在不同的分支机构中完成所有工作,无论是功能,错误修复还是家务,还有一个单独的流程和/或指定人员将这些分支合并到主服务器中。
因此,对于分支机构,您正在管理分支,而使用分支机构,其他人控制接受代码。这仍然是标准用法。

Github上

github(远程)是一个远程源,如果您已经(或被添加到)此类存储库,您通常会将这些已提交的更改推送到该源。 所以本地和远程实际上是截然不同的。

当你'fork'时,即点击 - enter image description here,比如在github上,你在你的 github帐户中创建了一个代码副本。第一次执行此操作时可能会有点微妙,因此请务必确保查看其下方列出的代码库的存储库 - 原始所有者或“分叉”和您,例如enter image description here

获得本地副本后,您可以根据需要进行更改(通过拉动并将其推送到本地计算机)。当你完成后,你在原始存储库所有者/管理员顶部提交一个“拉取请求”(听起来很奇特,但实际上你只需点击它: - enter image description here)并且他们“拉”它。

克隆

对于一起编写代码的团队来说,更常见的是“克隆”存储库(单击存储库主屏幕上的“复制”图标)。然后,本地输入git clone [paste]这将在本地设置你,你可以直接推送到共享的github位置。

可视化

我没有核心概念的可视化,但是如果你想看看这些变化是如何工作的,你就无法用我称之为“地铁”的gui击败可视化工具gitg(gitx for mac)地图'(尤其是伦敦地铁),非常适合展示谁做了什么,事情如何变化,分歧和合并等等。您还可以使用它来提交和管理您的本地更改......

enter image description here

答案 2 :(得分:3)

与基于文件的CVS和SVN不同,Git是基于提交的。提交作为提交树存在于存储库中。 git存储库有3个主要部分,工作目录是stage和repository目录。

Git没有中央存储库的绑定概念。存储库的每个克隆都包含它复制的存储库的提交和提交的完整历史记录。

fork只是另一个存储库的克隆或副本。您在存储库副本上所做的更改不会影响分叉的存储库(克隆)。要在原始存储库上应用更改,您需要“推送”它们或让存储库所有者“拉”您添加的任何新提交。同样,其他人会分叉你的叉子(即复制你的副本)。并且,除非您将这些更改提取出来,否则对其存储库的任何更改都不会影响您的存储库。

Git是一个了不起的工具。它不仅可以作为版本控制工作的一种方式,还可以使协作和实验变得更加容易。它还有更多。

我强烈建议ProGit Book帮助您更好地了解Git的内容和方式。

答案 3 :(得分:1)

通过Scott Chacon对Git内部进行了很好的讨论。

带配音的幻灯片:http://blip.tv/scott-chacon/git-talk-4113729
再次幻灯片:http://www.slideshare.net/chacon/getting-git
演讲的现场录音:http://vimeo.com/1099027

答案 4 :(得分:1)

  

Tinkertoys,定向非循环图节点的完美建模工具

Git For Ages 4 And Up是一个有趣的Git演讲,使用Tinkertoys提供了令人惊讶的有用可视化