通过本章的学习,应该能够配置和初始化一个仓库,开始和停止跟踪文件,暂存和提交更改。我们还将展示如何设置 Git 来忽略特定的文件和文件模式,如何快速轻松地撤销错误,如何浏览项目的历史记录并查看提交之间的更改,以及如何与远程仓库进行推送和拉取。
获取一个git仓库
获取一个 Git 仓库
通常有两种方式可以获取一个 Git 仓库:
- 将一个当前没有进行版本控制的本地目录转换为一个 Git 仓库
- 从其他地方克隆一个现有的 Git 仓库。
无论哪种方式,最终都会在本地机器上获得一个 Git 仓库,准备开始工作。
从现有目录初始化仓库
如果有一个当前尚未进行版本控制的项目目录,而想要用 Git 开始对其进行控制,首先需要进入该项目的目录。一下操作以ubuntu22.04为例:
$ cd git-tech
$ git init
这会创建一个名为 .git 的新子目录,其中包含所有必要的仓库文件 —— 一个 Git 仓库的骨架。此时,项目中尚未跟踪任何内容。有关刚刚创建的 .git 目录中包含哪些文件的详细信息,请参阅 Git 内部原理。
创建新的文件, 并对这些文件进行版本控制。
$ git status
$ git add git-tech.c
$ git commit -m "init a .c file"
clone一个已存在的仓库
如果想获取一个已存在的 Git 仓库的副本 —— 例如,一个我们想要贡献的项目 —— 需要使用的命令是 git clone。
如果熟悉其他版本控制系统,比如 Subversion,就会注意到命令是 "clone" 而不是 "checkout"。这是一个重要的区别 —— Git 不仅仅获取一个工作副本,而是接收了服务器上几乎所有数据的完整副本。当运行 git clone 时,默认情况下会拉取项目历史上每个文件的每个版本。事实上,如果当前服务器磁盘损坏,通常可以使用任何一个客户端上的几乎任何克隆来将服务器恢复到克隆时的状态(可能会丢失一些服务器端的钩子等内容,但所有版本化的数据都会在那里)。
可以通过 git clone <url> 来克隆一个仓库。例如,如果想克隆名为 libgit2 的 Git 可链接库,可以这样做:
$ git clone https://github.com/libgit2/libgit2
这会创建一个名为 libgit2 的目录,在其中初始化一个 .git 目录,拉取该仓库的所有数据,并检出最新版本的工作副本。如果进入刚刚创建的 libgit2 目录,会看到其中的待使用项目文件
如果想要将仓库克隆到一个名为 libgit2 之外的目录中,可以将新目录名指定为一个额外的参数:
$ git clone https://github.com/libgit2/libgit2 mylibgit
Git有多种不同的传输协议可供选择。前面的示例使用了 https:// 协议,但也可能会见到 git:// 或 user@server:path/to/repo.git,它使用 SSH 传输协议。