章节 ▾ 第二版

2.1 Git 基础 - 获取 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:// 或使用 SSH 传输协议的 user@server:path/to/repo.git。关于服务器可以配置哪些访问 Git 仓库的选项,以及每种选项的优缺点,将在 在服务器上搭建 Git 中介绍。