阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      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
      目录
      目录