查看: 2891|回复: 0
打印 上一主题 下一主题
收起左侧

《Pro Git》中文版 pdf 下载 223页

[复制链接]

566

主题

713

帖子

3827

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3827
楼主
跳转到指定楼层
发表于 2016-9-16 01:58:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
《Pro Git》中文版 pdf 下载 223页

目录
1 起步 1
1.1 关于版本控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 本地版本控制系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 集中化的版本控制系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.3 分布式版本控制系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Git 的历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Git 基础要点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.1 直接快照,而非比较差异 . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.2 近乎所有操作都可本地执行 . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.3 时刻保持数据完整性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.4 多数操作仅添加数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.5 三种状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 安装 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4.1 从源代码安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4.2 在 Linux 上安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.3 在 Mac 上安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.4 在 Windows 上安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5 初次运行 Git 前的配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5.1 用户信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5.2 文本编辑器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.3 差异分析工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.4 查看配置信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 获取帮助 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.7 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2 Git 基础 11
2.1 取得项目的 Git 仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.1 从当前目录初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2 从现有仓库克隆 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 记录每次更新到仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.1 检查当前文件状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.2 跟踪新文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.3 暂存已修改文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.4 忽略某些文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.5 查看已暂存和未暂存的更新 . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.6 提交更新 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.7 跳过使用暂存区域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.8 移除文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.9 移动文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3 查看提交历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3.1 限制输出长度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.2 使用图形化工具查阅提交历史 . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4 撤消操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4.1 修改最后一次提交 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4.2 取消已经暂存的文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4.3 取消对文件的修改 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.5 远程仓库的使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.5.1 查看当前的远程库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.5.2 添加远程仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.5.3 从远程仓库抓取数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.5.4 推送数据到远程仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.5.5 查看远程仓库信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.5.6 远程仓库的删除和重命名 . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.6 打标签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.6.1 列显已有的标签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.6.2 新建标签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.6.3 含附注的标签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.6.4 签署标签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.6.5 轻量级标签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.6.6 验证标签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.6.7 后期加注标签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.6.8 分享标签 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.7 技巧和窍门 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.7.1 自动完成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.7.2 Git 命令别名 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.8 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3 Git 分支 39
3.1 何谓分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2 基本的分支与合并 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.2.1 基本分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2.2 基本合并 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2.3 冲突的合并 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.3 分支管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.4 分支式工作流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.4.1 长期分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.4.2 特性分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.5 远程分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.5.1 推送 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.5.2 跟踪分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.5.3 删除远程分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.6 衍合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.6.1 衍合基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.6.2 更多有趣的衍合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.6.3 衍合的风险 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.7 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4 服务器上的 Git 63
4.1 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.1.1 本地协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.1.2 SSH 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.1.3 Git 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.1.4 HTTP/S 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
优点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.2 在服务器部署 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.2.1 将纯目录转移到服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4.2.2 小型安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
SSH 连接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.3 生成 SSH 公钥 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.4 架设服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.5 公共访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.6 网页界面 GitWeb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.7 权限管理器 Gitosis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.8 Git 进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.9 Git 托管服务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.9.1 GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.9.2 建立账户 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.9.3 建立新仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.9.4 从 Subversion 中导入项目 . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.9.5 开始合作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.9.6 项目页面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.9.7 派生(forking)项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.9.8 GitHub 小节 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.10 小节 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5 分布式 Git 87
5.1 分布式工作流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.1.1 集中式工作流 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.1.2 集成管理员工作流 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.1.3 司令官与副官工作流 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.2 为项目作贡献 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5.2.1 提交指南 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
5.2.2 私有的小型团队 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.2.3 私有团队间协作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.2.4 公开的小型项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.2.5 公开的大型项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
5.2.6 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
5.3 项目的管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
5.3.1 使用特性分支进行工作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
5.3.2 采纳来自邮件的补丁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
使用 apply 命令应用补丁 . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
使用 am 命令应用补丁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
5.3.3 检出远程分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
5.3.4 决断代码取舍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
5.3.5 代码集成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
合并流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
大项目的合并流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
衍合与挑拣(cherry-pick)的流程 . . . . . . . . . . . . . . . . . . . . . . . 112
5.3.6 给发行版签名 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
5.3.7 生成内部版本号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.3.8 准备发布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.3.9 制作简报 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.4 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
6 Git 工具 117
6.1 修订版本(Revision)选择 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.1.1 单个修订版本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.1.2 简短的SHA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.1.3 关于 SHA-1 的简短说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.1.4 分支引用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.1.5 引用日志里的简称 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.1.6 祖先引用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
6.1.7 提交范围 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
双点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
多点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
三点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
6.2 交互式暂存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
6.2.1 暂存和撤回文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
6.2.2 暂存补丁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6.3 储藏(Stashing) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
6.3.1 储藏你的工作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
6.3.2 从储藏中创建分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
6.4 重写历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
6.4.1 改变最近一次提交 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
6.4.2 修改多个提交说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
6.4.3 重排提交 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
6.4.4 压制(Squashing)提交 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
6.4.5 拆分提交 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
6.4.6 核弹级选项: filter-branch . . . . . . . . . . . . . . . . . . . . . . . . . . 133
从所有提交中删除一个文件 . . . . . . . . . . . . . . . . . . . . . . . . . . 133
将一个子目录设置为新的根目录 . . . . . . . . . . . . . . . . . . . . . . . . 133
全局性地更换电子邮件地址 . . . . . . . . . . . . . . . . . . . . . . . . . . 134
6.5 使用 Git 调试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
6.5.1 文件标注 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
6.5.2 二分查找 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
6.6 子模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
6.6.1 子模块初步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
6.6.2 克隆一个带子模块的项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
6.6.3 上层项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
6.6.4 子模块的问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
6.7 子树合并 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
6.8 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
7 自定义 Git 145
7.1 配置 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
7.1.1 客户端基本配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
core.editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
commit.template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
core.pager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
user.signingkey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
core.excludesfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
help.autocorrect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
7.1.2 Git中的着色 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
color.ui . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
color.* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
7.1.3 外部的合并与比较工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
7.1.4 格式化与空白 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
core.autocrlf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
core.whitespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
7.1.5 服务器端配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
receive.fsckObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
receive.denyNonFastForwards . . . . . . . . . . . . . . . . . . . . . . . . . 152
receive.denyDeletes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
7.2 Git属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
7.2.1 二进制文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
识别二进制文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
比较二进制文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
7.2.2 关键字扩展 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
7.2.3 导出仓库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
export-ignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
export-subst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
7.2.4 合并策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
7.3 Git挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
7.3.1 安装一个挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
7.3.2 客户端挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
提交工作流挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
E-mail工作流挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
其他客户端挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
7.3.3 服务器端挂钩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
pre-receive 和 post-receive . . . . . . . . . . . . . . . . . . . . . . . . . 159
update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
7.4 An Example Git-Enforced Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
7.4.1 Server-Side Hook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Enforcing a Specific Commit-Message Format . . . . . . . . . . . . . . . . . 161
Enforcing a User-Based ACL System . . . . . . . . . . . . . . . . . . . . . . 162
Enforcing Fast-Forward-Only Pushes . . . . . . . . . . . . . . . . . . . . . 164
7.4.2 Client-Side Hooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
7.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
8 Git 与其他系统 171
8.1 Git 与 Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
8.1.1 git svn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
8.1.2 初始设定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
8.1.3 入门 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
8.1.4 提交到 Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
8.1.5 拉取最新进展 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
8.1.6 Git 分支问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
8.1.7 Subversion 分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
创建新的 SVN 分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.8 切换当前分支 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.9 对应 Subversion 的命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
SVN 风格的历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
SVN 日志 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
SVN 服务器信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
略 Subversion 之所略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
8.1.10 Git-Svn 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
8.2 迁移到 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
8.2.1 导入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
8.2.2 Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
8.2.3 Perforce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
8.2.4 自定导入脚本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
8.3 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
9 Git 内部原理 189
9.1 底层命令 (Plumbing) 和高层命令 (Porcelain) . . . . . . . . . . . . . . . . . . . . . 189
9.2 Git 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
9.2.1 tree (树) 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
9.2.2 commit (提交) 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
9.2.3 对象存储 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
9.3 Git References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
9.3.1 HEAD 标记 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
9.3.2 Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
9.3.3 Remotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
9.4 Packfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
9.5 The Refspec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
9.5.1 推送 Refspec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
9.5.2 删除引用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
9.6 传输协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
9.6.1 哑协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
9.6.2 智能协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
上传数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
下载数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
9.7 维护及数据恢复 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
9.7.1 维护 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
9.7.2 数据恢复 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
9.7.3 移除对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
9.8 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214




本站下载:


[bbs.cfei.net]《Pro Git》中文版.pdf (4.89 MB, 下载次数: 22)


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 打开微信扫一扫