精通 Git

🌙
手机阅读
本文目录结构

精通 Git

编辑推荐

高效的版本控制是成功开发软件项目的关键。自 2005 年诞生以来,Git 以其分布式特点和对非线性开发的强有力支持,成为了许多软件项目的版本控制系统。本书不仅是 Git 日常操作指南,而且深入剖析了 Git 的内部原理,能有效帮助程序员提升软技能。

如果你刚刚启程探索 Git,本书对于 Git 的用法、基本命令和分支机制的讲解将助你轻松入门、不走弯路。

如果你在 Git 之路上已经走了一些时日,本书关于 Git 服务器、配置文件和钩子系统的内容将为你补充继续前行所需的能量。

如果你不得不同时使用 Git 和其他版本控制系统,本书会教你如何将 Git 作为客户端来轻松应对此种情景。 内容简介 Git 仅用了几年时间就一跃成为了几乎一统商业及开源领域的版本控制系统。本书全面介绍 Git 进行版本管理的基础和进阶知识。全书共 10 章,内容由浅入深,展现了普通程序员和项目经理如何有效利用 Git 提高工作效率,掌握分支概念,灵活地将 Git 用于服务器和分布式工作流,如何将开发项目迁移到 Git,以及如何高效利用 GitHub。

作者简介

Scott Chacon GitHub 联合创始人,曾任 GitHub 首 xi 信息官,现任在线教育创业公司 Chatterbug 的首 xi 执行官。在 GitHub 工作的 7 年里,他负责维护 Git 主页 git-scm.com,并在许多技术大会上发表过演讲,以此传播 Git 文化和开源精神。GitHub ID:schacon。

Ben Straub 软件开发者,曾就职于 GitHub,参与开发了 Libgit2 开发包以及 GitHub for Windows 客户端,另著有《GitHub 实践》。GitHub ID:ben。

译者简介

门佳 GNU/Linux 深度用户,喜欢溯本求源,挖掘技术背后的来龙去脉,对程序语言设计理论、编译技术、操作系统设计与实现、Web 开发等领域均有涉猎,译著包括《Linux Shell 脚本攻略》《TCP Sockets 编程》《精通 JavaScript(第 2 版)》《Linux 命令行与 shell 脚本编程大全(第 3 版)》等。

刘梓懿 ThoughtWorks 高级软件工程师,***AWS 认证架构师,曾为多个世界知名客户提供软件交付和咨询服务,在大型组织的云架构应用、持续交付、分层自动化测试体系建设和 DevOps 转型等方面拥有丰富的实践经验。GitHub ID:richardzone。

目录

第 1 章 入门 1

  • 1.1 关于版本控制 1
  • 1.1.1 本地版本控制系统 1
  • 1.1.2 集中式版本控制系统 2
  • 1.1.3 分布式版本控制系统 3
  • 1.2 Git 简史 4
  • 1.3 Git 基础 4
  • 1.3.1 快照,而非差异 4
  • 1.3.2 几乎所有操作都在本地执行 5
  • 1.3.3 Git 的完整性 6
  • 1.3.4 Git 通常只增加数据 6
  • 1.3.5 三种状态 7
  • 1.4 命令行 8
  • 1.5 安装 Git 8
  • 1.5.1 Linux 上的安装方法 8
  • 1.5.2 Mac 上的安装方法 8
  • 1.5.3 Windows 上的安装方法 9
  • 1.5.4 从源码安装 9
  • 1.6 Git 的首次配置 10
  • 1.6.1 用户身份 11
  • 1.6.2 个人编辑器 11
  • 1.6.3 检查个人设置 12
  • 1.7 获取帮助 12
  • 1.8 小结 12

第 2 章 Git 基础 13

  • 2.1 获取 Git 仓库 13
  • 2.1.1 在现有目录中初始化 Git 仓库 13
  • 2.1.2 克隆现有仓库 14
  • 2.2 在 Git 仓库中记录变更 14
  • 2.2.1 查看当前文件状态 15
  • 2.2.2 跟踪新文件 16
  • 2.2.3 暂存已修改的文件 16
  • 2.2.4 显示更简洁的状态信息 18
  • 2.2.5 忽略文件 18
  • 2.2.6 查看已暂存和未暂存的变更 19
  • 2.2.7 提交变更 21
  • 2.2.8 跳过暂存区 22
  • 2.2.9 移除文件 23
  • 2.2.10 移动文件 24
  • 2.3 查看提交历史 25
  • 2.4 撤销操作 30
  • 2.4.1 撤销已暂存的文件 30
  • 2.4.2 撤销对文件的修改 31
  • 2.5 远程仓库的使用 32
  • 2.5.1 显示远程仓库 32
  • 2.5.2 添加远程仓库 33
  • 2.5.3 从远程仓库获取和拉取数据 34
  • 2.5.4 将数据推送到远程仓库 34
  • 2.5.5 检查远程仓库 35
  • 2.5.6 删除和重命名远程仓库 36
  • 2.6 标记 36
  • 2.6.1 列举标签 36
  • 2.6.2 创建标签 37
  • 2.6.3 注释标签 37
  • 2.6.4 轻量标签 38
  • 2.6.5 补加标签 38
  • 2.6.6 共享标签 39
  • 2.6.7 检出标签 39
  • 2.7 Git 别名 40
  • 2.8 小结 41

第 3 章 Git 分支机制 42

  • 3.1 分支机制简述 42
  • 3.1.1 创建新分支 44
  • 3.1.2 切换分支 45
  • 3.2 基本的分支与合并操作 48
  • 3.2.1 基本的分支操作 48
  • 3.2.2 基本的合并操作 52
  • 3.2.3 基本的合并冲突处理 53
  • 3.3 分支管理 55
  • 3.4 与分支有关的工作流 56
  • 3.4.1 长期分支 57
  • 3.4.2 主题分支 58
  • 3.5 远程分支 59
  • 3.5.1 推送 63
  • 3.5.2 跟踪分支 64
  • 3.5.3 拉取 66
  • 3.5.4 删除远程分支 66
  • 3.6 变基 66
  • 3.6.1 基本的变基操作 66
  • 3.6.2 更有趣的变基操作 69
  • 3.6.3 变基操作的潜在危害 71
  • 3.6.4 只在需要的时候执行变基操作 74
  • 3.6.5 变基操作与合并操作的对比 75
  • 3.7 小结 75

第 4 章 Git 服务器 76

  • 4.1 协议 76
  • 4.1.1 本地协议 76
  • 4.1.2 HTTP 协议 78
  • 4.1.3 SSH 协议 79
  • 4.1.4 Git 协议 80
  • 4.2 在服务器上搭建 Git 80
  • 4.2.1 将裸仓库放置在服务器上 81
  • 4.2.2 小型团队配置 82
  • 4.3 生成个人的 SSH 公钥 83
  • 4.4 设置服务器 84
  • 4.5 Git 守护进程 85
  • 4.6 智能 HTTP 87
  • 4.7 GitWeb 88
  • 4.8 GitLab 90
  • 4.8.1 安装 90
  • 4.8.2 管理 91
  • 4.8.3 基本用法 93
  • 4.8.4 协作 93
  • 4.9 第三方托管选择 94
  • 4.10 小结 94

第 5 章 分布式 Git 95

  • 5.1 分布式工作流 95
  • 5.1.1 集中式工作流 95
  • 5.1.2 集成管理者工作流 96
  • 5.1.3 司令官与副官工作流 97
  • 5.1.4 工作流小结 97
  • 5.2 为项目做贡献 98
  • 5.2.1 提交准则 98
  • 5.2.2 私有小型团队 100
  • 5.2.3 私有管理团队 105
  • 5.2.4 派生的公开项目 110
  • 5.2.5 通过电子邮件接受补丁的公开项目 113
  • 5.2.6 小结 115
  • 5.3 维护项目 115
  • 5.3.1 使用主题分支 115
  • 5.3.2 应用来自电子邮件的补丁 116
  • 5.3.3 检出远程分支 118
  • 5.3.4 确定引入内容 119
  • 5.3.5 整合所贡献的工作结果 120
  • 5.3.6 为发布版打标签 125
  • 5.3.7 生成构建编号 126
  • 5.3.8 准备发布 126
  • 5.3.9 简报 127
  • 5.4 小结 127

第 6 章 GitHub 128

  • 6.1 账号设置与配置 128
  • 6.1.1 SSH 访问 129
  • 6.1.2 头像 130
  • 6.1.3 电子邮件地址 131
  • 6.1.4 双因素身份验证 132
  • 6.2 为项目做贡献 132
  • 6.2.1 派生项目 132
  • 6.2.2 GitHub 流程 133
  • 6.2.3 拉取请求的高级用法 140
  • 6.2.4 Markdown 144
  • 6.3 项目维护 148
  • 6.3.1 创建新仓库 148
  • 6.3.2 添加协作人员 150
  • 6.3.3 管理拉取请求 150
  • 6.3.4 提醒和通知 155
  • 6.3.5 特殊文件 158
  • 6.3.6 项目管理 159
  • 6.4 组织管理 160
  • 6.4.1 组织的基本操作 160
  • 6.4.2 团队 160
  • 6.4.3 审计日志 162
  • 6.5 GitHub 脚本化 162
  • 6.5.1 钩子系统 162
  • 6.5.2 GitHub API 166
  • 6.6 小结 170

第 7 章 Git 工具 171

  • 7.1 选择修订版本 171
  • 7.1.1 单个修订版本 171
  • 7.1.2 提交范围 175
  • 7.2 交互式暂存 177
  • 7.2.1 暂存和取消暂存文件 178
  • 7.2.2 暂存补丁 180
  • 7.3 储藏与清理 181
  • 7.3.1 储藏工作成果 181
  • 7.3.2 灵活运用储藏 183
  • 7.3.3 从储藏中创建分支 184
  • 7.3.4 清理工作目录 184
  • 7.4 签署工作 186
  • 7.4.1 GPG 简介 186
  • 7.4.2 签署标签 186
  • 7.4.3 验证标签 187
  • 7.4.4 签署提交 187
  • 7.4.5 所有人都得签署 189
  • 7.5 搜索 189
  • 7.5.1 git grep 189
  • 7.5.2 Git 日志搜索 190
  • 7.6 重写历史 192
  • 7.6.1 修改最近一次提交 192
  • 7.6.2 修改多个提交消息 192
  • 7.6.3 重排提交 194
  • 7.6.4 压缩提交 195
  • 7.6.5 拆分提交 195
  • 7.6.6 超强命令:filter-branch 196
  • 7.7 重置揭秘 197
  • 7.7.1 三棵树 198
  • 7.7.2 工作流 199
  • 7.7.3 重置的作用 203
  • 7.7.4 利用路径进行重置 205
  • 7.7.5 压缩 207
  • 7.7.6 检出 209
  • 7.7.7 小结 210
  • 7.8 合并的高级用法 211
  • 7.8.1 合并冲突 211
  • 7.8.2 撤销合并 220
  • 7.8.3 其他类型的合并 222
  • 7.9 rerere 225
  • 7.10 使用 Git 调试 230
  • 7.10.1 文件标注 230
  • 7.10.2 二分查找 232
  • 7.11 子模块 233
  • 7.11.1 开始使用子模块 233
  • 7.11.2 克隆含有子模块的项目 235
  • 7.11.3 开发含有子模块的项目 236
  • 7.11.4 子模块技巧 245
  • 7.11.5 子模块的问题 246
  • 7.12 打包 248
  • 7.13 替换 251
  • 7.14 凭据存储 257
  • 7.14.1 底层实现 258
  • 7.14.2 自定义凭据缓存 259
  • 7.15 小结 261

第 8 章 自定义 Git 262

  • 8.1 配置 Git 262
  • 8.1.1 客户端基本配置 262
  • 8.1.2 Git 中的配色 265
  • 8.1.3 外部的合并与 diff 工具 265
  • 8.1.4 格式化与空白字符 268
  • 8.1.5 服务器配置 270
  • 8.2 Git 属性 270
  • 8.2.1 二进制文件 271
  • 8.2.2 关键字扩展 273
  • 8.2.3 导出仓库 276
  • 8.2.4 合并策略 277
  • 8.3 Git 钩子 277
  • 8.3.1 安装钩子 277
  • 8.3.2 客户端钩子 278
  • 8.3.3 服务器端钩子 279
  • 8.4 Git 强制策略示例 280
  • 8.4.1 服务器端钩子 280
  • 8.4.2 客户端钩子 285
  • 8.5 小结 288

第 9 章 Git 与其他系统 289

  • 9.1 作为客户端的 Git 289
  • 9.1.1 Git 与 Subversion 289
  • 9.1.2 Git 与 Mercurial 298
  • 9.1.3 Git 与 Perforce 305
  • 9.1.4 Git 与 TFS 317
  • 9.2 迁移到 Git 325
  • 9.2.1 Subversion 325
  • 9.2.2 Mercurial 327
  • 9.2.3 Perforce 329
  • 9.2.4 TFS 330
  • 9.2.5 自定义导入工具 331
  • 9.3 小结 337

第 10 章 Git 内幕 338

  • 10.1 底层命令和高层命令 338
  • 10.2 Git 对象 339
  • 10.2.1 树对象 341
  • 10.2.2 提交对象 343
  • 10.2.3 对象存储 345
  • 10.3 Git 引用 346
  • 10.3.1 HEAD 348
  • 10.3.2 标签对象 348
  • 10.3.3 远程引用 349
  • 10.4 包文件 350
  • 10.5 引用规格 352
  • 10.5.1 推送引用规格 354
  • 10.5.2 删除引用 354
  • 10.6 传输协议 354
  • 10.6.1 哑协议 355
  • 10.6.2 智能协议 356
  • 10.6.3 协议小结 359
  • 10.7 维护与数据恢复 359
  • 10.7.1 维护 359
  • 10.7.2 数据恢复 360
  • 10.7.3 移除对象 362
  • 10.8 环境变量 365
  • 10.8.1 全局行为 365
  • 10.8.2 仓库位置 365
  • 10.8.3 路径规格 366
  • 10.8.4 提交 366
  • 10.8.5 网络 366
  • 10.8.6 差异与合并 367
  • 10.8.7 调试 367
  • 10.8.8 杂项 369
  • 10.9 小结 369
  • 附录 A 其他环境中的 Git 370
  • 附录 B 在应用程序中嵌入 Git 381
  • 附录 C Git 命令 390

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了