Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git、github、fork&;的核心概念是什么;分支机构。git与SVN相比如何?_Git_Svn_Github_Branch_Fork - Fatal编程技术网

git、github、fork&;的核心概念是什么;分支机构。git与SVN相比如何?

git、github、fork&;的核心概念是什么;分支机构。git与SVN相比如何?,git,svn,github,branch,fork,Git,Svn,Github,Branch,Fork,我已经使用Github有一段时间了,但是我对Git背后的一些关键概念感到有些困惑 我的VCS背景从源代码安全开始,然后过渡到SVN和TFS。我想我被困在CVS系统的旧思维方式中,比如SVN和TFS Git中的服务器端和客户端。据我所知,它们之间没有明确的区别 从技术上讲,叉子是什么意思。它是一种“类型”的分支吗 在git中,分支是什么意思?与SVN中的相同吗 此外,我一直在寻找Git核心概念的良好可视化,但还没有找到适合我的 Git是一个DVCS(分布式版本控制系统) Git(本地)在您提交文件

我已经使用Github有一段时间了,但是我对Git背后的一些关键概念感到有些困惑

我的VCS背景从源代码安全开始,然后过渡到SVN和TFS。我想我被困在CVS系统的旧思维方式中,比如SVN和TFS


Git中的服务器端和客户端。据我所知,它们之间没有明确的区别

从技术上讲,叉子是什么意思。它是一种“类型”的分支吗

在git中,分支是什么意思?与SVN中的相同吗

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

Git是一个DVCS(分布式版本控制系统) Git(本地)在您提交文件的项目根目录中有一个目录(.Git/)。

Git是一种DVCS(分布式版本控制系统),使您能够频繁保存文件副本(“版本”),能够合并多人完成的工作,还可以脱机工作

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

Git通过保存整个文件来存储对文件的每个更改。在这方面,它与svn不同,您可以访问任何单个版本,而无需通过增量更改“重新创建”它

Git不“锁定”文件,编辑时需要独占锁定(想到pvcs等较旧的系统)。在拉取过程中,它将文件更改(在同一个文件中!)合并在一起,这真是一项了不起的工作。如果两次更改涉及同一行代码,则只需手动更改


分支机构 此时,您需要保留主代码,创建一个副本(分支),然后在该分支内工作。完成后,将分支合并回主存储库。其中一个例子可能是,您正在升级到新版本。
一些商店和个人在单独的分支机构中完成所有工作,无论是功能、bug修复还是杂务,都有单独的流程和/或指定人员将这些分支机构合并到master中。
因此,对于一个分支,您是在管理该分支,而对于一个分支,其他人则控制接受返回的代码。这是标准用法

github github(远程)是一个远程源,如果您有(或被添加到)这样的存储库,您通常会将这些提交的更改推送到或拉到它。
所以本地和远程实际上是完全不同的

当您“fork”时,即单击-,比如说在github上,您将在github帐户中创建代码的副本。第一次这样做可能会有点微妙,所以请确保查看代码库列在谁的存储库下-原始所有者或“派生自”以及您,例如

拥有本地副本后,可以根据需要进行更改(通过将其拉入并推送到本地计算机)。完成后,您将在原始存储库所有者/管理员的顶部提交一个“拉入请求”(听起来很奇怪,但实际上您只需单击此:-),然后他们将其“拉入”

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

形象化 我没有一个核心概念的可视化,但是如果你想看看这些变化是如何运作的,你不能打败可视化工具gitg(gitx for mac),它有一个我称之为“地铁地图”(特别是伦敦地铁)的gui,非常适合显示谁做了什么,事情是如何变化、分化和合并的,等等。您还可以使用它提交和管理您的本地更改


与基于文件的CVS和SVN不同,Git是基于提交的。提交以提交树的形式存在于存储库中。git存储库有三个主要部分:工作目录、阶段和存储库目录

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

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

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


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

下面是一篇关于Git内部的精彩演讲

带画外音的幻灯片:
再次播放幻灯片:

演讲现场录音:

以下是如何理解Git:

  • 忘记你所知道的关于其他VCS的一切(暂时!)
  • 阅读真的读一读,如果你略读,你会错过一些东西,只是试着用你现有的SCM知识来填补空白,这正是让你扫兴的地方。事实上,如果你真的想理解,就去读那篇博文吧