编辑推荐

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

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

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

如果你不得不同时使用Git和其他版本控制系统,《精通Git 第2版》会教你如何将Git作为客户端来轻松应对此种情景。

内容简介

Git仅用了几年时间就一跃成为了几乎一统商业及开源领域的版本控制系统。《精通Git 第2版》全面介绍Git进行版本管理的基础和进阶知识。《精通Git 第2版》共10章,内容由浅入深,展现了普通程序员和项目经理如何有效利用Git提高工作效率,掌握分支概念,灵活地将Git用于服务器和分布式工作流,如何将开发项目迁移到Git,以及如何高效利用GitHub。

作者简介

【作者简介】

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

BenStraub
软件开发者,曾就职于GitHub,参与开发了Libgit2开发包以及GitHubforWindows客户端,另著有《GitHub实践》。GitHubID:ben。

【译者简介】

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

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

目录

第1章入门1
1.1关于版本控制1
1.1.1本地版本控制系统1
1.1.2集中式版本控制系统2
1.1.3分布式版本控制系统3
1.2Git简史4
1.3Git基础4
1.3.1快照,而非差异4
1.3.2几乎所有操作都在本地执行5
1.3.3Git的完整性6
1.3.4Git通常只增加数据6
1.3.5三种状态7
1.4命令行8
1.5安装Git8
1.5.1Linux上的安装方法8
1.5.2Mac上的安装方法8
1.5.3Windows上的安装方法9
1.5.4从源码安装9
1.6Git的首次配置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.7Git别名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.2HTTP协议78
4.1.3SSH协议79
4.1.4Git协议80
4.2在服务器上搭建Git80
4.2.1将裸仓库放置在服务器上81
4.2.2小型团队配置82
4.3生成个人的SSH公钥83
4.4设置服务器84
4.5Git守护进程85
4.6智能HTTP87
4.7GitWeb88
4.8GitLab90
4.8.1安装90
4.8.2管理91
4.8.3基本用法93
4.8.4协作93
4.9第三方托管选择94
4.10小结94
第5章分布式Git95
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章GitHub128
6.1账号设置与配置128
6.1.1SSH访问129
6.1.2头像130
6.1.3电子邮件地址131
6.1.4双因素身份验证132
6.2为项目做贡献132
6.2.1派生项目132
6.2.2GitHub流程133
6.2.3拉取请求的高级用法140
6.2.4Markdown144
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.5GitHub脚本化162
6.5.1钩子系统162
6.5.2GitHubAPI166
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.1GPG简介186
7.4.2签署标签186
7.4.3验证标签187
7.4.4签署提交187
7.4.5所有人都得签署189
7.5搜索189
7.5.1gitgrep189
7.5.2Git日志搜索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-branch196
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.9rerere225
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章自定义Git262
8.1配置Git262
8.1.1客户端基本配置262
8.1.2Git中的配色265
8.1.3外部的合并与diff工具265
8.1.4格式化与空白字符268
8.1.5服务器配置270
8.2Git属性270
8.2.1二进制文件271
8.2.2关键字扩展273
8.2.3导出仓库276
8.2.4合并策略277
8.3Git钩子277
8.3.1安装钩子277
8.3.2客户端钩子278
8.3.3服务器端钩子279
8.4Git强制策略示例280
8.4.1服务器端钩子280
8.4.2客户端钩子285
8.5小结288
第9章Git与其他系统289
9.1作为客户端的Git289
9.1.1Git与Subversion289
9.1.2Git与Mercurial298
9.1.3Git与Perforce305
9.1.4Git与TFS317
9.2迁移到Git325
9.2.1Subversion325
9.2.2Mercurial327
9.2.3Perforce329
9.2.4TFS330
9.2.5自定义导入工具331
9.3小结337
第10章Git内幕338
10.1底层命令和高层命令338
10.2Git对象339
10.2.1树对象341
10.2.2提交对象343
10.2.3对象存储345
10.3Git引用346
10.3.1HEAD348
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其他环境中的Git370
附录B在应用程序中嵌入Git381
附录CGit命令390

其他推荐