![]()
编辑推荐 Git 是当今流行版本控制系统。本书并不偏重理论介绍,也不面面俱到,而是一本学习Git 的实用指南。本书介绍了Git 的基础知识,然后关注于敏捷开发,并给出工作流展示了解决现实问题所需的命令和选项。 本书包括以下内容: ● 入门教程:重点展示每一条重要Git 命令的用法。 ● 技术介绍:介绍如何使用Git 处理一个团队开发中的各项事务,用大量的实例演示那些主要Git 命令的使用方式,并且解释其中的基本概念,如提交、版本库、分支、合并、重订等,帮助读者了解Git 的具体工作方式。 ● 工作流:工作流是指在项目中使用Git 的实用场景,例如创建一个项目的发行版等。对于每个工作流,本书从以下几项来描述其目标场景。 解决的是什么问题; 需要增加什么必要条件; 解决问题的人以及解决的时间。 ● “分步”指令:这是一组常用命令序列。例如,移动某个分支属于一条既定的“分步”指令。 本书适合于从事软件开发工作,想要掌握Git 工具的读者阅读参考。 内容推荐 Git是一 款免费、开源的分布式版本控制系统,也是当今流行的版本控制系统之一,在众多的项目开发中普遍使用,得到程序员和工程师的欢迎和喜爱。 本书是一本面向专业开发 者的图书。全书内容分为26章,从基础概念讲起,陆续向读者介绍了有关Git的各种操作和使用技巧,不仅将提交、版本库、分支、合并等命令讲解到位,还介绍了工作流、基于分支的开发、二分法排错、发行版交付、项目的拆分与合并、项目的迁移等内容。 本书适合从事项目开发的专业人士阅读,想要学习Git的读者也可以选用。 目录 第1章基本概念1 1.1分布式版本控制,有何过人之处1 1.2版本库,分布式工作的基础所在3 1.3分支的创建与合并很简单5 1.4本章小结6 第2章入门8 2.1准备Git环境8 2.2个Git项目8 2.2.1创建版本库9 2.2.2抢先发售提交9 2.2.3检查状态10 2.2.4提交修改11 2.2.5显示历史11 2.3Git的协作功能12 2.3.1克隆版本库12 2.3.2从另一版本库中获取修改12 2.3.3从任意版本库中取回修改14 2.3.4创建共享版本库14 2.3.5用push命令上载修改15 2.3.6Pull命令:取回修改16 2.4本章小结17 第3章提交究竟是什么18 3.1访问权限与时间戳18 3.2add命令与commit命令19 3.3再谈提交散列值19 3.4提交历史20 3.5一种略有不同的提交查看方法21 3.6同一项目的多部不同历史21 3.6.1部分输出:-n22 3.6.2格式化输出:--format、--oneline23 3.6.3统计修改信息:--stat、--shortstat23 3.6.4日志选项:--graph23 3.7本章小结24 第4章多次提交25 4.1status命令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与Tree34 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修复旧版本中的bug41 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.7Pull=Fetch+Merge69 9.8讨厌钻石链的人:请用--rebase选项69 9.9push: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用Gitdaemon来共享版本库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构建服务器上的Git142 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章迁移到Git189 24.1概述189 24.2使用要求190 24.3工作流简述:“迁移到Git”190 24.4执行过程及其实现190 24.4.1学习和练习使用Git190 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.6Git的图形化工具204 25.7与Subversion的协作205 25.8命令别名205 25.9标注提交206 25.10用钩子扩展Git206 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 |