Git教程

2,927 阅读11分钟

「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

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

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

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

安装Git

官方Git实现是一个命令行工具。要使用Git,您必须首先安装它。您可以通过几种方式在机器上安装Git。如果您更喜欢命令行界面,请前往官方Git网站并下载并安装Git:

git-scm.com

Atlassian SourceTree

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

本教程使用SourceTree v。1.6.12.0。如果您使用不同版本的SourceTree,GUI可能看起来与我在这里显示的屏幕截图略有不同,但基本原则是一样的。

Git Core概念

在向您展示如何使用Git之前,我将首先解释Git的核心概念,以及您最常如何使用Git。一旦您理解了这一点,您将更容易深入研究许多可用的不同Git命令。

Git存储库

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

image.png

Git存储库通常包含单个项目的源代码。但是,您可以将多个项目保存在一个Git存储库中,或将大型项目拆分为多个Git存储库。您如何将代码组织到存储库的确切方式取决于您。首先,只需从每个项目一个Git存储库开始,如果项目增长,请将独立的子项目拆分为自己的存储库。

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

image.png

从其他存储库中提取更改

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

image.png

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

image.png

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

拉动操作是单向的。在上述情况下,开发人员1从开发人员2的存储库中提取了更改,但开发人员2没有收到开发人员1的任何更改。要将两个存储库更新到所有文件的最新版本,两个开发人员都必须从彼此的存储库中提取。

每个开发人员都有自己的存储库和代码副本,这甚至可能与所有其他开发人员的副本略有不同,这一事实是Git分布式的原因。该代码不保存在一个中央“主”存储库中,而是分布在许多存储库中。

使用发布存储库

项目创建一个“发布存储库”并不少见,其中将成品功能推送到,所有开发人员都可以从中获取最新功能的成品版本。然后,此发布存储库作为facto主存储库工作。

拥有发布存储库使开发人员更容易使其存储库与来自其他开发人员的更改保持最新状态。开发人员只需从发布存储库中提取更改,而不必从团队中的所有其他开发人员那里提取更改。这样,开发人员就可以获得最新的更新,并且只有在更新实际运行时才会获得更新,如“准备发布”。以下是两个开发人员使用发布存储库来协调更新的示例:

image.png

创建Git存储库

既然您已经看到了核心概念,让我们开始使用Git。要使用Git,您需要做的第一件事是创建一个Git存储库。这是在调用Git存储库的“初始化”。您使用Git init命令这样做。我将向您展示如何使用我最喜欢的Git客户端Atlassian SourceTree启动Git。

在SourceTree的左上角,您将找到“克隆/新建”按钮。单击此按钮创建新的Git存储库。以下是SourceTree“克隆/新建”按钮的屏幕截图:

image.png

当您单击“克隆/新建”按钮时,将打开以下对话框:

image.png

在对话框的“目标路径”字段中,在本地磁盘上键入Git存储库所在位置的路径。您还可以单击“...”按钮浏览到要创建Git存储库的目录。

当您进入Git存储库的目标路径后,单击“创建”按钮。SourceTree现在将为您创建Git存储库。创建Git存储库时,SourceTree将在屏幕左侧显示新的Git存储库,如以下SourceTree屏幕截图所示:

image.png

Git存储库工作区

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

当您将文件“提交”到存储库时,工作版本的副本将插入Git存储库(.git子目录)。存储库将跟踪您提交的文件的许多不同版本。工作区将始终只包含文件的最新版本,但存储库(.git目录)也将包含所有之前提交的版本。

工作区可以包含子目录,但不要将您的任何文件或目录放入.git目录。此目录保留给Git。一般来说,除非你确切知道自己在做什么,否则你不应该在.git目录中胡闹。您可能会破坏您的Git存储库。

将文件提交到Git存储库

创建Git存储库后,下一步将是将文件提交到存储库。您通常会:提交新文件,或提交现有文件的新版本,或将文件删除到存储库。

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

以下各节将介绍这些行动中的每一项。

将新文件提交到Git存储库

首先,您需要在存储库工作区创建一个文件。在后面显示的示例中,我为工作区创建了一个名为file-1.txt的文件,里面有文本“这是版本1”。

您在工作区创建的文件分为两组:

  • 未阶段的文件
  • 分阶段文件

当您首次在存储库工作区中创建文件时,该文件是非级的。当您将工作区提交到存储库时,提交中仅包含分阶段文件。要提交文件,您必须首先将其添加到分阶段文件集。在SourceTree中,您在GUI的右侧这样做。以下是一张屏幕截图,显示了SourceTree GUI非舞台文件区域中的未舞台文件文件file-1.txt

image.png

您可以通过单击文件名左侧的复选框将文件添加到SourceTree中的分阶段文件组。以下是SourceTree GUI在将file-1.txt添加到分阶段文件组后的样子:

image.png

您现在可以通过单击SourceTree GUI左上角的“提交”按钮将file-1.txt提交到存储库。以下是显示“提交”按钮的屏幕截图:

image.png

当您单击“提交”按钮时,SourceTree GUI右下角将打开一个小对话框。在这个对话框中,您可以键入一个文本,该文本描述了您对所提交文件所做的更改。此描述在稍后查看提交历史记录时非常有用,以查看对文件进行了哪些更改。

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

image.png

下面的屏幕截图显示了SourceTree如何处理提交。现在SourceTree说,没有什么可承诺的了。这是因为所有分阶段文件都已提交,不存在非分阶段文件。

image.png

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

文件首次添加到Git存储库后,您通常会对其进行更改。一旦您拥有了新的、稳定的文件版本,您可能希望将该版本提交到Git存储库。

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

image.png 如您所见,file-1.txt再次位于未分阶段的文件区域。

要提交新版本file-1.txt,请单击未阶段区域文件名旁边的复选框。这将把文件添加到分阶段的文件集中。将文件添加到分阶段文件集后,您将以首次添加文件时提交文件时相同的方式提交文件。

一次提交多个文件

理想情况下,对存储库的每次提交都应代表项目中所有文件的完全连贯、功能化版本。想象一下,如果您提交的文件包含编译错误,因为它取决于您尚未提交的另一个文件的新版本。这将防止将您提交的文件从存储库中取出的开发人员开展工作,因为现在项目不会编译。我们希望避免这种情况。

为了确保您的提交使项目保持在连贯的功能状态,您有时可能需要在同一提交操作中提交多个文件。这样做很容易。只需将所有要从非阶段化文件集提交的文件添加到分阶段文件集,然后提交文件。这个过程就像只提交一个文件一样。

从Git存储库中删除文件

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

要从项目中删除文件,只需从存储库工作区中删除该文件。从工作区中删除文件后,SourceTree将扫描工作区并检测文件已被删除。然后,该文件将在未分阶段的文件区域显示为已删除。以下是它看起来的屏幕截图:

image.png

要从存储库中删除文件,请将已删除的文件添加到分阶段文件集,然后单击“提交”。提交删除文件过程的其余部分类似于提交新文件或新版本的文件。键入提交到存储库的更改的说明,然后单击提交对话框下的“提交”按钮。文件现在被删除。