Git 版本控制管理

🌙
手机阅读
本文目录结构

Git 版本控制管理

容简介

Git 是一款免费、开源的分布式版本控制系统,早由 LinilusTorvalds 创建,用于管理 Linux 内核开发,现已成为分布式版本控制的主流工具。

《Git 版本控制管理(第 2 版)》是学习掌握 Git 的上佳教程,总共分为 21 章,其内容涵盖了如何在多种真实开发环境中使用 Git;洞察 Git 的常用案例、初始任务和基本功能;如何在集中和分布式版本控制中使用 Git;使用 Git 管理合并、冲突、补丁和差异;获得诸如重新定义变基(rebasing)、钩子(hook)以及处理子模块(子项目)等的高级技巧;Git 如何与 SVN 版本库交互(包括 SVN 向 Git 的转换);通过 GitHub 导航、使用开源项目,并对开源项目做贡献。

《Git 版本控制管理(第 2 版)》适合需要进行版本控制的开发团队成员阅读,对 Git 感兴趣的开发人员也可以从中获益。

作者简介

Jon Loeliger,是一位自由的软件开发工程师,对 Linux、U-Boot 和 Git 等开源项目颇有贡献。他在许多会议上(比如 Linux World)发表过 Git 教程相关的演讲,并为 Linux Magazine 撰写了多篇 Git 相关的稿件。在成为自由的软件开发工程师之前,他花费了多年的时间来开发高度优化的编译器、路由器协议、Linux 移植,还偶尔编写过游戏软件。Jon 持有普度大学计算机科学学位。在闲暇之余,他还会在家里自行酿酒。

Matthew McCullough,Github.com 的培训副总裁,在企业软件开发领域有 15 年的从业经历,还是一名经常往返于世界各地的开源教育家,以及一家美国咨询公司的联合创始人。这所有的经历使得他可以与大家分享利用 Git 和 GitHub 来取得成功的相关故事。Matthew 是 Gradle and Jenkins O’Reilly 图书的特约作者,以及 O’Reilly Git Master Class 系列图书的创作者。Matthew 经常在 No Fluff Just Stuff 巡回会议上发表演讲,还是 DZone Git RefCard 的作者,同时还是 Denver Open Source Users Groups 的主席。

目录

第 1 章 介绍 1

  • 1.1 背景 1
  • 1.2 Git 的诞生 2
  • 1.3 先例 4
  • 1.4 时间线 5
  • 1.5 名字有何含义 6

第 2 章 安装 Git 7

  • 2.1 使用 Linux 上的二进制发行版 7
  • 2.1.1 Debian/Ubuntu 7
  • 2.1.2 其他发行版 8
  • 2.2 获取源代码 9
  • 2.3 构建和安装 10
  • 2.4 在 Windows 上安装 Git 11
  • 2.4.1 安装 Cygwin 版本的 Git 12
  • 2.4.2 安装独立的 Git(msysGit) 13

第 3 章 起步 16

  • 3.1 Git 命令行 16
  • 3.2 Git 使用快速入门 18
  • 3.2.1 创建初始版本库 18
  • 3.2.2 将文件添加到版本库中 19
  • 3.2.3 配置提交作者 21
  • 3.2.4 再次提交 21
  • 3.2.5 查看提交 21
  • 3.2.6 查看提交差异 23
  • 3.2.7 版本库内文件的删除和重命名 23
  • 3.2.8 创建版本库副本 24
  • 3.3 配置文件 25
  • 3.4 疑问 27

第 4 章 基本的 Git 概念 28

  • 4.1 基本概念 28
  • 4.1.1 版本库 28
  • 4.1.2 Git 对象类型 29
  • 4.1.3 索引 30
  • 4.1.4 可寻址内容名称 30
  • 4.1.5 Git 追踪内容 31
  • 4.1.6 路径名与内容 31
  • 4.1.7 打包文件 32
  • 4.2 对象库图示 33
  • 4.3 Git 在工作时的概念 35
  • 4.3.1 进入.git 目录 35
  • 4.3.2 对象、散列和 blob 36
  • 4.3.3 文件和树 37
  • 4.3.4 对 Git 使用 SHA1 的一点说明 38
  • 4.3.5 树层次结构 40
  • 4.3.6 提交 40
  • 4.3.7 标签 41

第 5 章 文件管理和索引 43

  • 5.1 关于索引的一切 44
  • 5.2 Git 中的文件分类 44
  • 5.3 使用 git add 46
  • 5.4 使用 git commit 的一些注意事项 48
  • 5.4.1 使用 git commit –all 48
  • 5.4.2 编写提交日志消息 50
  • 5.5 使用 git rm 50
  • 5.6 使用 git mv 52
  • 5.7 追踪重命名注解 54
  • 5.8 .gitignore 文件 55
  • 5.9 Git 中对象模型和文件的详细视图 56

第 6 章 提交 61

  • 6.1 原子变更集 62
  • 6.2 识别提交 62
  • 6.2.1 绝对提交名 63
  • 6.2.2 引用和符号引用 64
  • 6.2.3 相对提交名 65
  • 6.3 提交历史记录 67
  • 6.3.1 查看旧提交 67
  • 6.3.2 提交图 70
  • 6.3.3 提交范围 73
  • 6.4 查找提交 77
  • 6.4.1 使用 git bisect 78
  • 6.4.2 使用 git blame 82
  • 6.4.3 使用 Pickaxe 83

第 7 章 分支 84

  • 7.1 使用分支的原因 84
  • 7.2 分支名 85
  • 7.3 使用分支 86
  • 7.4 创建分支 88
  • 7.5 列出分支名 89
  • 7.6 查看分支 89
  • 7.7 检出分支 91
  • 7.7.1 检出分支的一个简单例子 91
  • 7.7.2 有未提交的更改时进行检出 92
  • 7.7.3 合并变更到不同分支 94
  • 7.7.4 创建并检出新分支 95
  • 7.7.5 分离 HEAD 分支 96
  • 7.8 删除分支 97

第 8 章 diff 100

  • 8.1 git diff 命令的格式 101
  • 8.2 简单的 git diff 例子 104
  • 8.3 git diff 和提交范围 108
  • 8.4 路径限制的 git diff 110
  • 8.5 比较 SVN 和 Git 如何产生 diff 112

第 9 章 合并 114

  • 9.1 合并的例子 114
  • 9.1.1 为合并做准备 115
  • 9.1.2 合并两个分支 115
  • 9.1.3 有冲突的合并 117
  • 9.2 处理合并冲突 121
  • 9.2.1 定位冲突的文件 122
  • 9.2.2 检查冲突 122
  • 9.2.3 Git 是如何追踪冲突的 126
  • 9.2.4 结束解决冲突 128
  • 9.2.5 中止或重新启动合并 129
  • 9.3 合并策略 130
  • 9.3.1 退化合并 132
  • 9.3.2 常规合并 134
  • 9.3.3 特殊提交 135
  • 9.3.4 应用合并策略 136
  • 9.3.5 合并驱动程序 137
  • 9.4 Git 怎么看待合并 138
  • 9.4.1 合并和 Git 的对象模型 138
  • 9.4.2 压制合并 139
  • 9.4.3 为什么不一个接一个地合并每个变更 140

第 10 章 更改提交 142

  • 10.1 关于修改历史记录的注意事项 143
  • 10.2 使用 git reset 144
  • 10.3 使用 git cherry-pick 152
  • 10.4 使用 git revert 154
  • 10.5 reset、revert 和 checkout 154
  • 10.6 修改最新提交 155
  • 10.7 变基提交 158
  • 10.7.1 使用 git rebase -i 160
  • 10.7.2 变基与合并 164

第 11 章 储藏和引用日志 170

  • 11.1 储藏 170
  • 11.2 引用日志 178

第 12 章 远程版本库 183

  • 12.1 版本库概念 184
  • 12.1.1 裸版本库和开发版本库 184
  • 12.1.2 版本库克隆 185
  • 12.1.3 远程版本库 186
  • 12.1.4 追踪分支 186
  • 12.2 引用其他版本库 187
  • 12.2.1 引用远程版本库 188
  • 12.2.2 refspec 189
  • 12.3 使用远程版本库的示例 191
  • 12.3.1 创建权威版本库 192
  • 12.3.2 制作你自己的 origin 远程版本库 193
  • 12.3.3 在版本库中进行开发 195
  • 12.3.4 推送变更 196
  • 12.3.5 添加新开发人员 197
  • 12.3.6 获取版本库更新 199
  • 12.4 图解远程版本库开发周期 203
  • 12.4.1 克隆版本库 204
  • 12.4.2 交替的历史记录 205
  • 12.4.3 非快进推送 205
  • 12.4.4 获取交替历史记录 207
  • 12.4.5 合并历史记录 208
  • 12.4.6 合并冲突 208
  • 12.4.7 推送合并后的历史记录 209
  • 12.5 远程版本库配置 209
  • 12.5.1 使用 git remote 210
  • 12.5.2 使用 git config 211
  • 12.5.3 使用手动编辑 212
  • 12.6 使用追踪分支 212
  • 12.6.1 创建追踪分支 212
  • 12.6.2 领先和落后 215
  • 12.7 添加和删除远程分支 216
  • 12.8 裸版本库和 git 推送 217

第 13 章 版本库管理 219

  • 13.1 谈谈服务器 219
  • 13.2 发布版本库 220
  • 13.2.1 带访问控制的版本库 220
  • 13.2.2 允许匿名读取访问的版本库 221
  • 13.2.3 允许匿名写入权限的版本库 225
  • 13.2.4 在 GitHub 上发布版本库 225
  • 13.3 有关发布版本库的建议 227
  • 13.4 版本库结构 228
  • 13.4.1 共享的版本库结构 228
  • 13.4.2 分布式版本库结构 228
  • 13.4.3 版本库结构示例 229
  • 13.5 分布式开发指南 231
  • 13.5.1 修改公共历史记录 231
  • 13.5.2 分离提交和发布的步骤 232
  • 13.5.3 没有唯一正确的历史记录 232
  • 13.6 清楚你的位置 233
  • 13.6.1 上下游工作流 233
  • 13.6.2 维护者和开发人员的角色 234
  • 13.6.3 维护者 - 开发人员的交互 234
  • 13.6.4 角色的两面性 235
  • 13.7 多版本库协作 236
  • 13.7.1 属于你自己的工作区 236
  • 13.7.2 从哪里开始你的版本库 237
  • 13.7.3 转换到不同的上游版本库 238
  • 13.7.4 使用多个上游版本库 239
  • 13.7.5 复刻项目 241

第 14 章 补丁 244

  • 14.1 为什么要使用补丁 245
  • 14.2 生成补丁 246
  • 14.3 邮递补丁 254
  • 14.4 应用补丁 256
  • 14.5 坏补丁 264
  • 14.6 补丁与合并 264

第 15 章 钩子 265

  • 15.1 安装钩子 267
  • 15.1.1 钩子示例 267
  • 15.1.2 创建第一个钩子 268
  • 15.2 可用的钩子 270
  • 15.2.1 与提交相关的钩子 270
  • 15.2.2 与补丁相关的钩子 271
  • 15.2.3 与推送相关的钩子 272
  • 15.2.4 其他本地版本库的钩子 273

第 16 章 合并项目 274

  • 16.1 旧解决方案:部分检出 275
  • 16.2 显而易见的解决方案:将代码导入项目 276
  • 16.2.1 手动复制导入子项目 277
  • 16.2.2 通过 gi

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

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

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

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

关注我: Github / 知乎

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

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

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

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

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