章节 ▾ 第二版

2.1 Git 基础 - 获取 Git 仓库

如果你只想阅读一章来入门 Git,那么就是这一章。本章涵盖了你需要做的绝大多数事情的基本命令。读完本章,你应该能够配置和初始化一个仓库,开始和停止跟踪文件,以及暂存和提交更改。我们还会告诉你如何设置 Git 来忽略某些文件和文件模式,如何快速轻松地撤销错误,如何浏览项目的历史记录并查看提交之间的差异,以及如何从远程仓库推送和拉取。

获取 Git 仓库

你通常通过以下两种方式之一来获取 Git 仓库:

  1. 你可以将一个当前未进行版本控制的本地目录,变成一个 Git 仓库,或者

  2. 你可以从别处 克隆 一个已有的 Git 仓库。

无论哪种方式,你最终都会在本地机器上得到一个 Git 仓库,并准备好进行工作。

在现有目录中初始化仓库

如果你有一个目前未进行版本控制的项目目录,并且想开始用 Git 来控制它,你首先需要进入该项目的目录。如果你之前从未做过,这取决于你运行的系统,操作方式会略有不同:

对于 Linux

$ cd /home/user/my_project

对于 macOS

$ cd /Users/user/my_project

对于 Windows

$ cd C:/Users/user/my_project

然后输入

$ git init

这会创建一个名为 .git 的新子目录,其中包含你所有必需的仓库文件——一个 Git 仓库的骨架。此时,你的项目中的任何内容都还没有被跟踪。有关你刚刚创建的 .git 目录中具体包含哪些文件的更多信息,请参阅 Git 内部原理

如果你想开始版本控制已有的文件(而不是一个空目录),你应该先跟踪这些文件并进行一次初始提交。你可以通过几个 git add 命令来指定要跟踪的文件,然后执行 git commit 来完成:

$ git add *.c
$ git add LICENSE
$ git commit -m 'Initial project version'

我们稍后会详细介绍这些命令的作用。此时,你就拥有了一个包含已跟踪文件和一次初始提交的 Git 仓库。

克隆现有仓库

如果你想获取一个已有的 Git 仓库的副本——例如,一个你想贡献其代码的项目——你需要使用的命令是 git clone。如果你熟悉其他版本控制系统(如 Subversion),你会注意到这个命令是“clone”而不是“checkout”。这是一个重要的区别——Git 不仅获取一个工作副本,而是接收服务器上几乎所有数据的完整副本。当你运行 git clone 时,默认会拉取项目历史中每个文件的每个版本。事实上,如果你的服务器磁盘损坏了,你几乎可以用任何一个客户端的克隆来恢复服务器到克隆时的状态(你可能会丢失一些服务器端的钩子等,但所有版本化的数据都会在那里——更多细节请参阅 在服务器上设置 Git)。

你可以通过 git clone <url> 来克隆一个仓库。例如,如果你想克隆一个名为 libgit2 的 Git 可链接库,你可以这样做:

$ git clone https://github.com/libgit2/libgit2

这会创建一个名为 libgit2 的目录,在其内部初始化一个 .git 目录,拉取该仓库的所有数据,并检出最新版本的可工作副本。如果你进入刚刚创建的 libgit2 目录,你会在里面看到项目文件,准备好进行开发或使用。

如果你想将仓库克隆到一个名为 libgit2 以外的目录,你可以将新目录名作为附加参数指定:

$ git clone https://github.com/libgit2/libgit2 mylibgit

这个命令与前一个命令作用相同,但目标目录名为 mylibgit

Git 支持多种传输协议。前面的例子使用了 https:// 协议,但你也可能看到 git://user@server:path/to/repo.git,它使用 SSH 传输协议。在服务器上设置 Git 将介绍服务器可以设置的所有访问你 Git 仓库的选项以及它们的优缺点。