阿西河

所有教程

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

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Git 学习指南

      Git 学习指南

      编辑推荐

      Git 是当今流行版本控制系统。本书并不偏重理论介绍,也不面面俱到,而是一本学习 Git 的实用指南。本书首先介绍了 Git 的基础知识,然后关注于敏捷开发,并给出工作流展示了解决现实问题所需的命令和选项。

      本书包括以下内容:

      ● 入门教程:重点展示每一条重要 Git 命令的用法。 ● 技术介绍:介绍如何使用 Git 处理一个团队开发中的各项事务,用大量的实例演示那些主要 Git 命令的使用方式,并且解释其中的基本概念,如提交、版本库、分支、合并、重订等,帮助读者了解 Git 的具体工作方式。 ● 工作流:工作流是指在项目中使用 Git 的实用场景,例如创建一个项目的发行版等。对于每个工作流,本书从以下几项来描述其目标场景。 解决的是什么问题; 需要增加什么必要条件; 解决问题的人以及解决的时间。 ● “分步”指令:这是一组常用命令序列。例如,移动某个分支就属于一条既定的“分步”指令。

      本书适合于从事软件开发工作,想要掌握 Git 工具的读者阅读参考。

      内容简介

      Git 是一款免费、开源的分布式版本控制系统,也是当今流行的版本控制系统之一,在众多的项目开发中普遍使用,得到程序员和工程师的欢迎和喜爱。

      本书是一本面向专业开发者的图书。全书内容分为 26 章,从基础概念讲起,陆续向读者介绍了有关 Git 的各种操作和使用技巧,不仅将提交、版本库、分支、合并等命令讲解到位,还介绍了工作流、基于分支的开发、二分法排错、发行版交付、项目的拆分与合并、项目的迁移等内容。

      本书适合从事项目开发的专业人士阅读,想要学习 Git 的读者也可以选用。

      作者简介

      René Prei?el,Bj?rn Stachmann, 德国杰出软件开发人员。

      凌杰,毕业于浙江大学远程教育学院,曾担任多个论坛 C++ 版主。知名技术图书译者。翻译有《Python 算法教程》等。

      目录

      第 1 章 基本概念 1

      • 1.1 分布式版本控制,有何过人之处 1
      • 1.2 版本库,分布式工作的基础所在 3
      • 1.3 分支的创建与合并很简单 5
      • 1.4 本章小结 6

      第 2 章 入门 8

      2.1 准 m

      第 3 章 提交究竟是什么 18

      • 3.1 访问权限与时间戳 18
      • 3.2 add 命令与 commit 命令 19
      • 3.3 再谈提交散列值 19
      • 3.4 提交历史 20
      • 3.5 一种略有不同的提交查看方法 21
      • 3.6 同一项目的多部不同历史 21
      • 3.6.1 部分输出:-n 22
      • 3.6.2 格式化输出:–format、
      • –oneline 23
      • 3.6.3 统计修改信息:–stat、
      • –shortstat 23
      • 3.6.4 日志选项:–graph 23
      • 3.7 本章小结 24

      第 4 章 多次提交 25

      • 4.1 status 命令 25
      • 4.2 存储在暂存区中的快照 28
      • 4.3 怎样的修改不该被提交 28
      • 4.4 用.gitignore 忽略非版本控制文件 30
      • 4.5 储藏 31
      • 4.6 本章小结 31

      第 5 章 版本库 33

      • 5.1 一种简单而高效的存储系统 33
      • 5.2 存储目录:Blob 与 Tree 34
      • 5.3 相同数据只存储一次 35
      • 5.4 压缩相似内容 35
      • 5.5 当不同文件的散列值相同时,
      • 情况会很糟糕吗 35
      • 5.6 提交对象 36
      • 5.7 提交历史中的对象重用 36
      • 5.8 重命名、移动与复制 37
      • 5.9 本章小结 39

      第 6 章 分支 40

      • 6.1 并行式开发 40
      • 6.2 修复旧版本中的 bug 41
      • 6.3 分支 41
      • 6.4 泳道 42
      • 6.5 当前活跃分支 42
      • 6.6 重置分支指针 44
      • 6.7 删除分支 44
      • 6.8 清理提交对象 45
      • 6.9 本章小结 45

      第 7 章 合并分支 46

      • 7.1 合并过程中发生的事 47
      • 7.2 冲突 48
      • 7.3 编辑冲突 48
      • 7.4 冲突标志 49
      • 7.5 解决编辑冲突 50
      • 7.6 内容冲突又是什么呢 51
      • 7.7 快进合并 52
      • 7.8 第一父级提交历史 53
      • 7.9 棘手的合并冲突 54
      • 7.10 无论如何,终会有可行的方式 55
      • 7.11 本章小结 56

      第 8 章 通过变基净化历史 57

      • 8.1 工作原理:复制提交 57
      • 8.2 避免“钻石链” 58
      • 8.3 什么情况下会遇到冲突呢 59
      • 8.4 移植分支 60
      • 8.5 执行变基后原提交的情况 61
      • 8.6 为什么提交的原件与副本存在
      • 于同一版本库中是有问题的 61
      • 8.7 捡取 62
      • 8.8 本章小结 62

      第 9 章 版本库间的交换 64

      • 9.1 克隆版本库 64
      • 9.2 如何告知 Git 其他版本库的位置 65
      • 9.3 给别处的版本库起个名字 65
      • 9.4 获取数据 66
      • 9.5 远程跟踪分支:监控其他分支 67
      • 9.6 利用本地分支操作别处的版本库 68
      • 9.7 Pull = Fetch + Merge 69
      • 9.8 讨厌钻石链的人:请用 –rebase
      • 选项 69
      • 9.9 push:pull 的反面 69
      • 9.10 命名分支 71
      • 9.11 本章小结 72

      第 10 章 版本标签 73

      • 10.1 创建标签 73
      • 10.2 当前究竟存在哪些标签 74
      • 10.3 打印标签的散列值 74
      • 10.4 将标签添加到日志输出中 74
      • 10.5 究竟在哪个版本里呢 75
      • 10.6 如何修改标签呢 75
      • 10.7 当我们需要一个浮动标签时 75
      • 10.8 本章小结 75

      第 11 章 版本库之间的依赖 77

      • 11.1 与子模块之间的依赖 77
      • 11.2 与子树之间的依赖 82
      • 11.3 本章小结 85

      第 12 章 技巧 86

      • 12.1 不要慌,我们有一个引用日志 86
      • 12.2 忽略临时性的本地修改 87
      • 12.3 检查对文本文件的修改 88
      • 12.4 别名—Git 命令的快捷方式 88
      • 12.5 为临时指向的提交创建分支 89
      • 12.6 将提交移动到另一分支 89

      第 13 章 工作流简介 91

      • 13.1 我们会在什么时候使用这些
      • 工作流呢 91
      • 13.1.1 项目开始阶段 91
      • 13.1.2 项目开发阶段 92
      • 13.1.3 项目交付阶段 92
      • 13.1.4 项目重构阶段 92
      • 13.2 工作流的结构 93
      • 13.2.1 条目 93
      • 13.2.2 概述 93
      • 13.2.3 使用要求 93
      • 13.2.4 工作流简述 93
      • 13.2.5 执行过程及其实现 94
      • 13.2.6 何不换一种做法 94

      第 14 章 项目设置 95

      • 14.1 概述 96
      • 14.2 使用要求 96
      • 14.3 工作流简述:设置项目 97
      • 14.4 执行过程及其实现 98
      • 14.4.1 基于项目目录创建一个
      • 新的版本库 98
      • 14.4.2 以文件访问的方式
      • 共享版本库 101
      • 14.4.3 用 Git daemon 来共享
      • 版本库 102
      • 14.4.4 用 HTTP 协议来共享
      • 版本库 103
      • 14.4.5 用 SSH 协议来共享
      • 版本库 106
      • 14.5 何不换一种做法 107
      • 何不放弃推送操作 107
      • 14.6 纯拉取操作 108

      第 15 章 相同分支上的开发 109

      • 15.1 概述 110
      • 15.2 使用要求 111
      • 15.3 工作流简述:相同分支上
      • 的开发 111
      • 15.4 执行过程及其实现 111
      • 在 master 分支上操作 111
      • 15.5 何不换一种做法 114
      • 何不用变基来代替合并 114

      第 16 章 基于特性分支的开发 116

      • 16.1 概述 116
      • 16.2 使用要求 117
      • 16.3 工作流简述:基于特性分支
      • 的开发 118
      • 16.4 执行过程及其实现 118
      • 16.4.1 创建特性分支 118
      • 16.4.2 在 master 分支上集成
      • 某一特性 119
      • 16.4.3 将 master 分支上所发生的修改传递给特性分支 124
      • 16.5 何不换一种做法 125
      • 16.5.1 何不直接在部分交付后
      • 的合并版本上继续
      • 后续工作 125
      • 16.5.2 何不到发行版即将成型时
      • 再集成特性分支 126
      • 16.5.3 何不交换特性分支之间
      • 的提交 126

      第 17 章 二分法排错 130

      • 17.1 概述 130
      • 17.2 使用要求 131
      • 17.3 工作流简述:二分法排错 131
      • 17.4 执行过程及其实现 131
      • 17.4.1 用二分法人工排错 132
      • 17.4.2 用二分法自动排错 134
      • 17.5 何不换一种做法 138
      • 何不用合并操作将测试脚本添加到
      • 旧提交中去 138

      第 18 章 基于构建服务器的工作 139

      • 18.1 概述 139
      • 18.2 使用要求 140
      • 18.3 工作流简述:基于构建服务器
      • 的工作 140
      • 18.4 执行过程及其实现 141
      • 18.4.1 预备构建服务器 141
      • 18.4.2 构建服务器上的 Git 142
      • 18.4.3 比对本地开发版本
      • 与最后成功构建版本
      • 之间的差异 145
      • 18.4.4 基于构建历史的排错 146
      • 18.5 何不换一种做法 149
      • 18.5.1 何不使用标签 149
      • 18.5.2 何不将构建历史放在中央
      • 版本库中 149

      第 19 章 发行版交付 150

      • 19.1 概述 150
      • 19.2 使用要求 151
      • 19.3 工作流简述:“发行版
      • 交付” 152
      • 19.4 执行过程及其实现 152
      • 19.4.1 预备阶段:创建 stable
      • 分支 152
      • 19.4.2 预备并创建发行版 154
      • 19.4.3 创建补丁 157
      • 19.5 何不换一种做法 159
      • 19.5.1 为什么不能只用标签 159
      • 19.5.2 何不干脆不用标签 159
      • 19.5.3 为什么不能用快进式
      • 合并 160
      • 19.5.4 为什么不直接在 stable 分支
      • 上实现补丁 160

      第 20 章 拆分大项目 161

      • 20.1 概述 161
      • 20.2 使用要求 163
      • 20.3 工作流简述:“拆分大项目” 163
      • 20.4 执行过程及其实现 163
      • 20.4.1 拆分模块版本库 163
      • 20.4.2 将拆分出的模块作为外部
      • 版本库集成 165
      • 20.5 何不换一种做法 166
      • 20.5.1 何不采用一个全新
      • 的版本库 166
      • 20.5.2 为什么不采用 –subdirectory
      • -filter 选项 167

      第 21 章 合并小型项目 168

      • 21.1 概述 168
      • 21.2 使用要求 169
      • 21.3 工作流简述:“合并小项目” 170
      • 21.4 执行过程及其实现 170
      • 合并版本库 170
      • 21.5 何不换一种做法 172
      • 为什么不直接合并,跳过创建
      • 项目文件目录 172

      第 22 章 外包长历史记录 173

      • 22.1 概述 173
      • 22.2 使用要求 174
      • 22.3 工作流简述:
      • “外包长历史记录” 175
      • 22.4 执行过程及其实现 175
      • 22.4.1 外包项目历史 175
      • 22.4.2 链接到当前活动
      • 版本库 178
      • 22.5 何不换一种做法 179
      • 为什么不获取档案版本库
      • (而是采用链接) 179

      第 23 章 与其他版本控制系统

      • 并行使用 180
      • 23.1 概述 180
      • 23.2 使用要求 182
      • 23.3 工作流简述:“与其他版本控制
      • 系统并行使用” 182
      • 23.4 执行过程及其实现 182
      • 23.4.1 初始部署版本库 183
      • 23.4.2 得到中央版本控制管理中
      • 的更新修改 184
      • 23.4.3 将修改提交传输到中央本
      • 版控制系统 185
      • 23.5 何不换一种做法 188
      • 为什么不选择一个 Git 版本库 188

      第 24 章 迁移到 Git 189

      • 24.1 概述 189
      • 24.2 使用要求 190
      • 24.3 工作流简述:“迁移到 Git” 190
      • 24.4 执行过程及其实现 190
      • 24.4.1 学习和练习使用 Git 190
      • 24.4.2 做出迁移的决定 191
      • 24.4.3 找到分支 193
      • 24.4.4 准备版本库 194
      • 24.4.5 获取分支 195
      • 24.4.6 以怀疑的态度使用接受
      • 这个版本库 197
      • 24.4.7 清理工作 199
      • 24.5 何不换一种做法 199
      • 24.5.1 为什么不接收整个项目
      • 历史 199
      • 24.5.2 是否可以没有遗产
      • 分支 199
      • 24.5.3 没有双版本控制工作区
      • 可以吗 200

      第 25 章 还有一些其他任务 201

      • 25.1 交互式变基操作——完善
      • 历史记录 201
      • 25.2 补丁处理 202
      • 25.3 用 E-mail 发送补丁 202
      • 25.4 打包操作——离线模式下的
      • 推送操作 203
      • 25.5 创建归档 203
      • 25.6 Git 的图形化工具 204
      • 25.7 与 Subversion 的协作 205
      • 25.8 命令别名 205
      • 25.9 标注提交 206
      • 25.10 用钩子扩展 Git 206
      • 25.11 将版本库托管到 Github 上 207

      第 26 章 Git 的缺点 208

      • 26.1 高复杂度 208
      • 26.2 复杂的子模块 209
      • 26.3 大型二进制文件的资源消耗 210
      • 26.4 版本库只能作为一个整体
      • 被处理 211
      • 26.5 版本库只能作为整体被授权 211
      • 26.6 能用于历史分析的图形化
      • 工具偏弱 212
      目录
      目录