-
1. 起步
-
2. Git 基础
-
3. Git 分支
-
4. 服务器上的 Git
- 4.1 协议
- 4.2 在服务器上部署 Git
- 4.3 生成 SSH 公钥
- 4.4 架设服务器
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第三方托管服务
- 4.10 小结
-
5. 分布式 Git
-
A1. 附录 A: Git 在其他环境
- A1.1 图形界面
- A1.2 Visual Studio 中的 Git
- A1.3 Visual Studio Code 中的 Git
- A1.4 IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 中的 Git
- A1.5 Sublime Text 中的 Git
- A1.6 Bash 中的 Git
- A1.7 Zsh 中的 Git
- A1.8 PowerShell 中的 Git
- A1.9 小结
-
A2. 附录 B: 在应用程序中嵌入 Git
-
A3. 附录 C: Git 命令
2.1 Git 基础 - 获取 Git 仓库
如果你只想阅读一章来入门 Git,那么就是这一章。本章涵盖了你需要做的绝大多数事情的基本命令。读完本章,你应该能够配置和初始化一个仓库,开始和停止跟踪文件,以及暂存和提交更改。我们还会告诉你如何设置 Git 来忽略某些文件和文件模式,如何快速轻松地撤销错误,如何浏览项目的历史记录并查看提交之间的差异,以及如何从远程仓库推送和拉取。
获取 Git 仓库
你通常通过以下两种方式之一来获取 Git 仓库:
-
你可以将一个当前未进行版本控制的本地目录,变成一个 Git 仓库,或者
-
你可以从别处 克隆 一个已有的 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 仓库的选项以及它们的优缺点。