Git教程

时间:2020-01-09 10:34:30  来源:igfitidea点击:

Git是一个分布式版本控制系统,通常用于对软件源代码进行版本控制。版本控制系统跟踪存储库中源文件的不同版本。分布式版本控制系统可跟踪多个存储库中的源。因此,John和Mary可以各自拥有自己的资源库,其中包含同一项目的源代码,然后从彼此的资源库中提取更新。如果听起来很复杂,请不要担心。所有这些都将在本Git教程中进行解释。

Git最初由Linus Torvalds开发,Linus Torvalds是为我们带来了Linux的聪明人。 Linus对现有的版本控制系统不满意,因此着手开发一些不同的版本。满足了非常分散的Linux内核开发人员团队的需求。

如今,Git非常流行,许多开源代码托管在GitHub,BitBucket和Google代码的Git存储库中。这些都是为开发人员托管版本控制存储库的服务。

安装Git

官方的Git实现是一个命令行工具。为了使用Git,我们必须先安装它。我们可以通过多种方式在计算机上安装Git。如果我们喜欢命令行界面,请访问Git官方网站并下载并安装Git:

http://git-scm.com

Atlassian SourceTree

如果我们喜欢图形用户界面,那么我建议使用Atlassian的SourceTree。这是一个易于使用的图形化Git客户端,可以连接到本地和远程(托管)Git存储库,包括GitHub和BitBucket。 SourceTree也很受欢迎。在本教程中,我将演示如何与SourceTree一起使用Git。我们可以在此处获取Atlassian SourceTree:

http://www.sourcetreeapp.com

本教程使用SourceTree 1.6.12.0版。如果我们使用不同版本的SourceTree,则GUI可能看起来与此处显示的屏幕截图有些不同,但是基本原理是相同的。

Git核心概念

在向我们展示如何使用Git之前,我将首先解释Git的核心概念,以及我们最常使用Git的方式。了解了这一点之后,我们将可以更轻松地研究许多可用的Git命令。

Git存储库

Git围绕存储库的概念。存储库是一种数据库,可跟踪添加到其中的源代码的所有版本。存储库存储在本地磁盘上,但也可以存储在远程服务器上。这是一个Git存储库的图示:

Git存储库通常包含单个项目的源代码。但是,我们可以将多个项目保留在单个Git存储库中,或者将大型项目拆分为多个Git存储库。究竟如何将代码组织到存储库中完全取决于我们。首先,每个项目仅从一个Git存储库开始,如果项目增长,则将独立的子项目拆分为自己的存储库。

所有从事同一项目的开发人员都在本地磁盘上拥有该项目的自己的Git存储库。这意味着每个开发人员在其Git存储库中都有项目代码的副本。当开发人员处理项目的不同部分时,这些Git存储库甚至可能包含不同版本的项目文件(在一定程度上)。这是这种情况的说明。一个开发人员更改了文件B,而另一个开发人员更改了文件A,两者都在他们自己的项目副本中(在他们自己的存储库中)。

从其他存储库中提取更改

一旦开发人员完成了一项功能,其他开发人员便可以将该功能拉到自己的Git存储库中,从而创建整个软件项目的最新版本。这是Git拉动操作的图示。开发人员1(左侧)从开发人员2(右侧)的存储库中提取更改。

拉取之后,进行拉取的开发人员将从他或者她从中提取的存储库中获得最新的更改。在以前的情况下,开发人员1从开发人员2的存储库中拉出之后,开发人员1的存储库将如下所示:

如我们所见,开发人员1现在拥有文件A的最新版本,该版本已由开发人员2更改。

拉操作是单向的。在上述情况下,开发人员1从开发人员2的存储库中提取了更改,但是开发人员2没有获得开发人员1的任何更改。要将两个存储库更新为所有文件的最新版本,两个开发人员都必须从其他存储库中提取一个信息。

每个开发人员都有自己的存储库,其中包含代码的副本,甚至可能与所有其他开发人员所拥有的代码有所不同,这就是使Git得以分发的原因。该代码不是保存在单个中央"主"存储库中,而是分布在许多存储库中。

使用发布库

对于项目来说,创建一个"发行版本库"并不罕见,在该版本库中,已完成的功能将被推送到该版本,所有开发人员都可以从中获得最新功能的已完成版本。然后,此发行版本存储库用作事实上的主存储库。

拥有发布存储库可以使开发人员更轻松地通过其他开发人员的更改使存储库保持最新。开发人员不必从团队中的所有其他开发人员那里进行更改,而只需从发布存储库中进行更改即可。这样,开发人员可以获得最新的更新,并且仅在它们实际起作用时才获得更新,例如"准备发布"。这是两个开发人员使用发布存储库来协调更新的说明:

创建一个Git仓库

既然我们已经了解了核心概念,那么让我们开始使用Git。要使用Git,我们需要做的第一件事就是创建一个Git存储库。这称为"初始化" Git存储库。我们可以使用Gitinit命令执行此操作。我将向我们展示如何使用Atlassian SourceTree(我最喜欢的Git客户端)来初始化Git。

在SourceTree的左上角,我们将找到"克隆/新建"按钮。单击此按钮创建一个新的Git存储库。这是SourceTree"克隆/新建"按钮的屏幕截图:

当我们单击"克隆/新建"按钮时,将打开以下对话框:

在对话框的"目标路径"字段中,键入本地磁盘上Git存储库所在的路径。我们也可以单击" ..."按钮浏览到要其中创建Git存储库的目录。

输入Git存储库的目标路径后,单击"创建"按钮。 SourceTree现在将为我们创建Git存储库。创建Git存储库后,SourceTree将在屏幕左侧显示新的Git存储库,如下面的SourceTree屏幕截图所示:

Git存储库工作区

一个Git仓库有一个工作区。工作区是项目中文件的工作版本的存储位置。工作空间位于创建Git存储库的同一目录中。也就是说,在包含.git子目录的同一目录中。

当我们将文件"提交"到存储库时,工作版本的副本将插入到Git存储库(.git子目录)中。存储库将跟踪我们提交的文件的许多不同版本。工作区将始终仅包含文件的最新版本,但是存储库(" .git"目录)也将包含所有先前提交的版本。

工作空间可以包含子目录,但是不能将任何文件或者目录放入.git目录中。该目录是为Git保留的。通常,除非我们确切知道自己在做什么,否则不要在.git目录中四处乱逛。我们可能会破坏Git存储库。

将文件提交到Git存储库

一旦创建了Git存储库,下一步就是将文件提交到存储库。通常,我们将:提交新文件,或者提交现有文件的新版本,或者将文件删除提交到存储库。

  • 将新文件提交到存储库。
  • 将已经添加的文件的新版本提交到存储库。
  • 承诺将文件删除到存储库。

以下各节将介绍这些操作中的每一个。

将新文件提交到Git存储库

首先,我们需要在存储库工作区中创建一个文件。在后面显示的示例中,我已经向工作区创建了一个名为file-1.txt的文件,其中包含文本" This is version 1"。

我们在工作空间中创建的文件分为两组:

  • 未暂存的文件
  • 暂存文件

当我们第一次在存储库工作空间中创建文件时,该文件是未暂存的。将工作空间提交到存储库时,提交中仅包含暂存文件。要提交文件,我们必须首先将其添加到暂存文件集中。在SourceTree中,我们可以在GUI的右侧进行操作。这是一个截图,显示了SourceTree GUI的未暂存文件区域中的未暂存文件file-1.txt

通过单击文件名左侧的复选框,可以将文件添加到SourceTree中的暂存文件组中。将file-1.txt添加到暂存文件组后,SourceTree GUI的外观如下:

现在,我们可以通过单击SourceTree GUI左上方的"提交"按钮将" file-1.txt"提交到存储库。这是显示"提交"按钮的屏幕截图:

当我们单击"提交"按钮时,将在SourceTree GUI的右下方打开一个小对话框。在此对话框中,我们可以输入文本来描述对提交的文件所做的更改。稍后在查看提交历史记录以查看对文件进行了哪些更改时,此描述可能会很有用。

在这种情况下,我只需在提交对话框中输入"添加的第一个版本",然后单击对话框下方的"提交"按钮(而不是单击打开提交对话框的GUI左上角的"提交"按钮)。此屏幕快照显示了我单击"提交"按钮之前的SourceTree GUI:

下面的屏幕快照显示了SourceTree在提交后的外观。现在SourceTree表示不再需要提交任何内容。这是因为所有暂存文件都已提交,并且不存在未暂存文件。

将新版本的文件提交到Git存储库

在将文件首次添加到Git存储库后,我们通常会对其进行更改。一旦有了文件的新的稳定版本,我们可能想要将该版本提交到Git存储库。

在SourceTree中,此过程与第一次添加文件的过程非常相似。为了演示添加文件的新版本,我将file-1.txt中的文本更改为" This is version 2"。将更改保存到file-1.txt之后,SourceTree应用程序需要一点时间来更新GUI。更新后,SourceTree GUI的右侧现在看起来像这样:

如我们所见," file-1.txt"再次位于未暂存的文件区域中。

要提交新版本的file-1.txt,请在未暂存区域中单击文件名旁边的复选框。这会将文件添加到暂存文件集中。将文件添加到暂存文件集中后,我们将以与首次添加文件时提交文件的方式相同的方式提交。

一次提交多个文件

理想情况下,对存储库的每次提交都应代表项目中所有文件的完全一致的功能版本。想象一下,如果我们提交的文件包含编译错误,因为它取决于我们尚未提交的另一个文件的新版本。这将阻止从存储库中获取已提交文件的开发人员执行其工作,因为现在该项目无法编译。我们要避免这种情况。

为确保提交使项目保持一致,正常的状态,有时我们可能必须在同一提交操作中提交多个文件。这样做很容易。简单地将所有要提交的文件从未暂存的文件集中添加到暂存的文件集中,然后提交文件。该过程与仅提交单个文件的过程相同。

从Git存储库中删除文件

有时我们可能还需要从项目中删除文件。然后,还需要从项目的Git存储库中删除这些文件。

要从项目中删除文件,只需从存储库工作区中删除文件。从工作空间中删除文件后,SourceTree将扫描工作空间并检测到文件已被删除。然后,该文件将在未暂存的文件区域中显示为已删除。这是它的外观的屏幕截图:

要从存储库中删除文件,也可以将已删除的文件添加到暂存文件集中,然后单击"提交"。提交删除文件的其余过程与提交新文件或者文件的新版本相似。输入有关对存储库提交哪些更改的描述,然后单击提交对话框下的"提交"按钮。该文件现在已删除。