学习Git,让你了解顶 级的项目发理念。本书引导读者掌握Git实用技巧,加强项目版本管理经验。学习本书,可以帮助读者更好地运用Git,提升软件发效率。
售 价:¥
纸质售价:¥66.70购买纸书
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
版 权
版权声明
内容提要
作者简介
前言
审稿人简介
第1章 Git应用入门
1.1 版本控制与Git
1.2 Git简易示例
1.2.1 创建版本库
1.2.2 创建Git版本库
1.2.3 克隆版本库并添加注释
1.2.4 发布修改
1.2.5 查看历史版本
1.2.6 重命名、移动文件
1.2.7 更新版本库(合并)
1.2.8 创建标签
1.2.9 解决合并冲突
1.2.10 添加和移除文件
1.2.11 撤销对单个文件的修改
1.2.12 创建新分支
1.2.13 合并分支(无冲突)
1.2.14 撤销未发布的合并
1.3 小结
第2章 项目历史管理
2.1 有向无环图
2.1.1 提交整个工作目录
2.1.2 分支和标签
2.1.3 分支点
2.1.4 合并提交
2.2 修订内部查询
2.2.1 HEAD——最新的修订版本
2.2.2 分支和标签的引用
2.2.3 SHA-1哈希码及其简化标识符
2.2.4 父引用
2.2.5 反向父引用——git的输出信息描述
2.2.6 reflog的简称
2.2.7 上游远程跟踪分支
2.2.8 根据提交信息查询修订
2.3 修订区间查询
2.3.1 单个修订内部查询
2.3.2 双点符号
2.3.3 多点符号——包含和排除修订
2.3.4 单个修订的修订区间
2.3.5 三点符号
2.4 历史记录查询
2.4.1 限制修订数量
2.4.2 元数据查询
时间段查询
提交内容查询
父提交
2.4.3 修订内部变更查询
2.4.4 变更类型查询
2.5 单个文件历史记录
2.5.1 路径约束
2.5.2 历史简化
2.5.3 blame——查看文件历史记录详情
2.6 使用git bisect命令查找bug
2.7 日志的查询和格式化输出
2.7.1 预定义和用户自定义输出格式
2.7.2 包含、格式化和统计变更
2.7.3 贡献统计
2.7.4 查看文件修订
2.8 小结
第3章 使用Git进行程序开发
3.1 新建提交
3.1.1 新建提交的DAG视图
3.1.2 索引——提交的暂存区
3.1.3 查看已提交的变更
工作目录状态
最新修订的差异比较
Git的统一diff格式
3.1.4 可查询的提交
文件提交查询
变更的交互式查询
提交创建入门
3.1.5 修改提交
3.2 使用分支
3.2.1 新建分支
3.2.2 孤儿分支
3.2.3 分支的查询和切换
分支切换释疑
匿名分支
Git的智能签出
3.2.4 分支列表
3.2.5 分支的回退和复位
3.2.6 分支的删除
3.2.7 分支的重命名
3.3 小结
第4章 工作区管理
4.1 忽略文件
4.1.1 将文件刻意标记为不跟踪的
4.1.2 确定忽略文件类型
4.1.3 忽略文件列表
4.1.4 忽略跟踪文件内的变更
4.2 文件属性
识别二进制文件和尾行转换
4.2.1 配置Diff和merge
生成diff和二进制文件
配置diff输出结果
三路合并
4.2.2 文件转换(内容过滤)
强制文件转换
4.2.3 关键字替换表达式
4.2.4 其他内置属性
4.2.5 属性宏定义
4.3 使用reset命令修复错误
4.3.1 回退分支head
移除和修改提交
使用reset压缩提交记录
4.3.2 重置分支head和索引
使用reset分割提交
使用WIP提交保存和重排变更状态
4.3.3 丢弃变更和回退分支
将提交指向特性分支
撤销合并或拉取操作
4.3.4 安全模式重置——保留用户变更
将变更重定向到较早的修订
4.4 隐藏暂存变更
4.4.1 使用git stash
4.4.2 隐藏和暂存区
4.4.3 暂存探幽
暂存记录撤销
恢复误删除的暂存
4.5 管理工作区和暂存区
4.5.1 查看文件和目录
4.5.2 搜索文件内容
4.5.3 撤销对文件的跟踪、暂存和修改
4.5.4 文件版本回退
4.5.5 清理工作区
4.6 多工作目录
4.7 小结
第5章 Git协作开发
5.1 协作工作流
5.1.1 空版本库
5.1.2 和其他版本库交互
5.1.3 中心式工作流
5.1.4 对等网络或者分支工作流
5.1.5 维护者和集成管理工作流
5.1.6 层级式(主从式)工作流
5.2 远程版本库管理
5.2.1 原生的远程版本库
5.2.2 浏览远程版本库
5.2.3 新建远程版本库
5.2.4 远程版本库信息更新
远程版本库重命名
远程版本库URL修改
远程版本库跟踪分支列表编辑
远程版本库的默认分支设置
远程版本库跟踪分支删除
5.2.5 兼容不规则工作流
5.3 传输协议
5.3.1 本地传输
5.3.2 智能传输
Git原生通信协议
SSH协议
智能HTTP(S)协议
5.3.3 使用bundle进行离线传输
使用bundle克隆和更新
使用bundle更新现存版本库
使用bundle初始化克隆
5.3.4 远程版本库传输助手
远程版本库助手传输应答
使用外源SCM版本库作为远程版本库
5.3.5 凭据/密码管理
密码验证
SSH公钥授权
验证助手
5.4 发布变更到上游
5.4.1 推送变更到公共版本库
5.4.2 生成pull请求
5.4.3 交换补丁
5.5 信任链
5.5.1 内容地址存储
5.5.2 轻量级标签、附注标签和签名标签
轻量级标签
附注标签
签名标签
发布标签
标签验证
5.5.3 签名提交
5.5.4 合并签名标签(合并标签)
5.6 小结
第6章 分支应用进阶
6.1 分支的类型和用途
6.1.1 长期或者永久性分支
集成、节点或者渐进稳定性分支
每一版本分支和每一版本的维护
处理安全漏洞的Hotfix分支
每一用户或者每一开发分支
自动化分支
支持匿名推送的群体性分支
孤儿分支
6.1.2 短期分支
主题或者特性分支
bug修复分支
脱离HEAD——匿名分支
6.2 分支工作流和发布工程
6.2.1 预览或者主干分支工作流
6.2.2 节点或者渐进稳定性分支工作流
6.2.3 主题分支工作流
主题分支工作流中的节点分支
主题分支工作流中某个版本的分支管理
6.2.4 Git流—— 一种成功的Git分支模型
6.2.5 修复安全问题
6.3 远程版本库上分支间的交互
6.3.1 上游和下游
6.3.2 远程跟踪分支和refspec
远程跟踪分支
Refspec——远程和本地分支映射规范
6.3.3 fetch、pull和push
Pull——拉取和更新当前分支
将当前分支推送到一个非裸远程版本库
默认拉取refspec规范和推送模式
6.3.4 拉取、推送分支和标签
拉取分支
拉取标签并自动下载标签相关引用
推送分支和标签
6.3.5 推送模式应用
简单推送模式——系统默认
方便维护人员的匹配推送模式
适用中心式工作流的上游推送模式
适用“推举”版本库工作流的当前推送模式
6.4 小结
第7章 集成变更
7.1 集成变更的方法
7.1.1 合并分支
无分叉合并——快进式和更新式
创建合并提交
合并策略以及相关选项
温馨提示——合并驱动
温馨提示——签名标签和合并标签
7.1.2 拷贝和应用变更集
拣选提交(Cherry-pick)——创建变更集拷贝
Revert——撤销一个提交
通过补丁应用——系列提交
拣选提交和合并撤销
7.1.3 分支变基
合并和变基的优劣比较
变基类型
变基应用进阶
7.2 解决合并冲突
7.2.1 三路合并
7.2.2 检测失败的合并操作
工作目录中的冲突标记
索引中的3种状态
差异比较——组合diff格式
git log——merge命令
7.2.3 避免合并冲突
有用的合并选项
Rerere(历史方案复用)
7.2.4 处理合并冲突
终止合并
ours和theris的版本选择
脚本化修复——手动合并文件
使用图形化合并工具
将文件标记为已解决并最终合并
解决变基冲突
git-imerge——git的增量合并与变基
7.3 小结
第8章 历史记录管理
8.1 Git内部机制简介
8.1.1 Git对象
8.1.2 Git的底层命令和高层命令
8.1.3 Git环境变量
环境变量对全局行为的影响
环境变量对版本库地址的影响
环境变量对提交操作的影响
8.2 重写修订历史
8.2.1 编辑最后一次提交
8.2.2 交互式变基
提交的重排、移除和修复
压缩提交
拆分提交
测试已变基提交
8.2.3 外部工具——补丁管理接口
8.2.4 使用git filter-branch进行脚本化重写
无过滤器的分支过滤
分支过滤的可用过滤器类型
git filter——branch命令应用示例
8.2.5 用于重写大型项目历史记录的外部工具
使用BFG Repo Cleaner从历史记录中移除文件
使用reposurgeon编辑版本库历史记录
8.2.6 重写已发布历史的风险
重写上游的后果
还原上游重写历史记录
8.3 历史记录的非重写式编辑
8.3.1 还原提交
还原错误合并
覆盖已还原合并
8.3.2 使用笔记存储附加信息
给提交添加笔记
笔记是如何存储的
其他笔记的用途
重写历史记录和笔记
发布和检索笔记
8.3.3 置换机制应用
置换机制
示例——使用git replace串联历史记录
历史笔记——grafts(移植)
发布和检索置换集
8.4 小结
第9章 子项目管理——构建活动框架
9.1 管理库和框架的依赖
9.1.1 Git外部依赖管理
9.1.2 手工导入项目代码
9.1.3 包含子项目代码的Git子树
为子项目创建远程版本库
将子项目当作子树
使用子树克隆和更新超级项目
使用子树合并获取子项目更新
显示子树及其上游变更
发布子树的变更到上游
9.1.4 子模块解决方案——版本库嵌套
Gitlinks、.git文件和子模块命令
将子项目当作子模块
使用子模块克隆超级项目
超级项目发生变更后更新子模块
查看子模块变更
从子模块上游获取更新
发布子模块变更到上游
9.1.5 将子文件夹迁移到子树或者子模块中
9.1.6 子树和子模块
子树用例
子模块用例
子项目第三方管理方案
9.2 大型Git版本库管理
9.2.1 处理包含大量历史记录的版本库
使用浅克隆获取截断式历史信息
仅克隆单个分支
9.2.2 处理包含大量二进制文件的版本库
将二进制程序集文件夹分割到独立子模块中
在版本库外部存储大型二进制文件
9.3 小结
第10章 Git的定制和扩展
10.1 Git与命令行
10.1.1 Git命令行提示符
10.1.2 Git命令自动补全
10.1.3 Git命令自动校正
10.1.4 命令行美化
10.1.5 命令行工具替代方案
10.2 图形化接口
10.2.1 图形化工具种类
10.2.2 图形化的diff和merge工具
10.2.3 图形化接口示例
10.3 配置Git
10.3.1 命令行选项和环境变量
10.3.2 Git配置文件
Git配置文件语法
访问Git配置
客户端基本配置
为pull操作预设相应的变基和合并操作
保留撤销信息-逾期对象
格式化和空格
服务端配置
10.3.3 使用gitattribute配置单个文件
10.4 Git自动化钩子
10.4.1 安装Git钩子
10.4.2 版本库模板
10.4.3 客户端钩子
提交过程钩子
电子邮件补丁钩子
其他客户端钩子
10.4.4 服务端钩子
10.5 Git扩展
10.5.1 Git命令行别名
10.5.2 添加新的Git命令
10.5.3 凭据助手和远程版本库助手
10.6 小结
第11章 Git日常管理
11.1 版本库维护
11.2 数据恢复和故障诊断
11.2.1 恢复已丢弃的提交记录
11.2.2 Git故障诊断
11.3 Git服务端配置
11.3.1 服务端钩子
pre-receive钩子
推送非裸版本库的push-to-update钩子
update钩子
post-receive钩子
post-update钩子(传统机制)
11.3.2 使用钩子实现Git强制策略
服务端钩子的强制策略
客户端钩子的异常预警策略
11.3.3 签名推送
11.3.4 Git版本库服务
本地协议
SSH协议
Git匿名协议
智能HTTP(S)协议
哑协议
远程版本库助手
11.3.5 Git版本库管理工具
11.3.6 版本库托管应用技巧
版本库瘦身
使用位图压缩提高智能协议效率
大型非复用初始化克隆问题
11.4 改进开发工作流
11.5 小结
第12章 Git最佳实践
12.1 启动项目
12.1.1 将工作分配到版本库
12.1.2 选择协作工作流
12.1.3 选择需要实行版本控制的文件
12.2 推进项目
12.2.1 使用主题分支
12.2.2 确定工作背景
12.2.3 将变更分解成独立的逻辑单元
12.2.4 编写简洁易读的注释
12.2.5 为提交变更做好准备
12.3 集成变更
12.3.1 提交和描述变更
12.3.2 审核变更的艺术
12.3.3 处理审核结果和评论
12.4 其他注意事项
12.4.1 不用慌,一切几乎都是可以恢复的
12.4.2 不要修改已发布的历史记录
12.4.3 版本发布的数字化和标签化
12.4.4 尽可能自动化
12.5 小结
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜