----------------------- Page 1-----------------------
图灵社区会员 lxghost2 尊重版权
----------------------- Page 2-----------------------
හਁᇇ๦्ก
图灵社区电子书没有采用专有客户
可以任意设备自己
浏览器PDF阅读器进行阅读
购买电子书仅供个人使用
未经授权不得进行传播
我们愿意相信读者具有这样良知觉悟我们共同保护知识产权
如果购买者侵权行为我们可能用户实施包括限于关闭帐号维权措施可能追究法律责任


图书 (CIP)数据
GitHub
入门实践 / (大塚 . -- 北京人民邮电出版社,2015.7
  (
图灵程序设计丛书
  ISBN 978-7-115-39409-5
  Ⅰ. ① G… Ⅱ. ①
… ②… ③… Ⅲ . ①软件
程序设计 Ⅳ . ① TP311.56
  
中国版本图书馆 CIP 数据 (2015) 112943
内容提要
Git 基本知识操作方法入手详细介绍GitHub 各种功能,GitHub 其他工具服务集成使用GitHub 开发流程以及如何GitHub 引入企业
讲解 GitHub 代表功能Pull Request 专门搭建各位读者实践仓库邀请各位读者进行 Pull Request 共同维护
  
旨在指导各位读者如何开发现场使用 GitHub 进行高效开发适合所有想要使用GitHub 进行开发程序员团队阅读
     [大塚
 
     
 
责任编辑  
 
执行编辑 
 
责任印制 
人民邮电出版社出版发行  北京市丰台区寿 11
 
邮编 100164  电子邮件 315@ptpress.com.cn
 
网址 http://www.ptpress.com.cn
 
北京      印刷
开本:880×1230  1/32
 
:8.75
 
字数:260 2015 7 1
 
印数:1 - 4 000 2015 7 北京 1印刷
著作权合同登记 :01-2015-1263
定价:39.00
读者服务热线:(010)51095186 600 质量热线:(010)81055316
盗版热线:(010)81055315
广告经营许可证工商广 0021


● 
译者
开源我国IT 已经出现不少年头社会化编程
想必没有多少接触于是阅读正文之前越俎代庖作者问题各位小的空间时间之后出门是否一种豁然开朗感觉相信答案肯定对于对日外包出身,“社会化编程这种感觉或许外包行业 IT 只是极端个例全世界码农自己代码这种恐怕
GitHub
正是这样平台我们这里可以全世界开源开发者交流代码心得如果开源软件源代码感兴趣如果中意软件如果自己编写程序苦苦找不到指点如果慕名已久 IT 明星俗称大神”)那么 GitHub欢迎
GitHub
英文界面或许望而却步不过不用担心秉承日系技术书刊一贯把手教学风格作者亲切语言简明扼要介绍生动详实示例我们步步讲解 GitHub 使用方法我们实践学习 GitHub。值得一提配有各位实践网站感兴趣读者务必俗话说不如万里”,跟着作者一边实践一边阅读相信各位深刻体会
有些读者可能代码企业财产不能随便网上别人 GitHub 工作什么意义一点作者自然考虑到了
GitHub
面向社会化编程我们生活社会我们工作企业同样社会虽然不能强行导入社会化编程”,管理模式仍然值得借鉴所以如果企业决策者那么后半跟随作者一起探讨企业导入社会化编程利弊说不定所在企业带来利益
《GitHub
实战入门国内比较少见 GitHub 社会化编程进行系统介绍书籍以往我们对于方面知识只能通过网络零散博客技术文档进行片面了解难以把握全貌各位相信得到不少帮助
最后另一帮忙搭建相关网站译者以及图灵文化各位编辑致以衷心感谢正是有了各位共同努力得以出版同时感谢正在阅读有了支持才能发挥价值

● 
序言
当今世界众多开发者使用 GitHub 进行开发旨在指导各位读者开发现场如何使用 GitHub 进行高效开发因此针对GitHub 进行讲解涉及开发流程相关辅助工具解说
开发现场有没有遇到以下
代码审查不到审查效率低下
只有编程本人看懂代码可靠性代码直接部署正式环境
键入错误理解错误造成低级代码错误导致 BUG 频繁出现
没有机会其他互相交流代码共享知识相互学习指正改善
没有简单高效之内添加多个功能开发流程 GitHub 我们提供解决这些问题机会功能凝练各种运用 GitHub 诀窍
笔者企业引入 GitHub ,改善开发流程总结这些经验相信改善开发现场提供一些帮助
•……

编撰过程到了多方大力支持特此鸣谢 @yamanetoshi、 增田(@masutaka )、bakorer 、、Tatsuma Murase、 排名不分先后)。
另外长期以来技术评论池田大树编辑整理尽心尽力在此由衷表示感谢

● 
结构
10 2 附录构成
1 欢迎来到 GitHub 世界
讲解 GitHub 什么以及哪些革新开源软件世界,GitHub 开发者带来革命性社会化编程概念这里我们将会接触概念带来优势功能进行讲解
2 :Git 导入
使用 GitHub ,离不开 Git 版本管理系统深入介绍关于 Git 知识加深各位 Git 理解同时说明实际操作相关流程
3 使用 GitHub 前期准备
使用 GitHub 需要开设账户免费),因此我们按照顺序讲解正式使用需要进行一系列设置
另外讲解包括操作示例在内实际 GitHub 创建仓库发布代码相关流程
4 通过实际操作学习 Git
实际操作学习使用 GitHub 必需掌握 Git 基本知识操作方法
基本操作开发所需复杂操作读者可以随着讲解简单实践
5 详细解说 GitHub 功能
我们 GitHub 功能逐一进行讲解同时详细解说作为源代码查看功能领略方便快捷 UI 。
建议正在使用 GitHub 开发者读本或许发现一些将来技巧
6 尝试 Pull  Request
Pull Request
GitHub 代表功能我们亲自动手体会务必参考内容试着进行一次 Pull Request 。
7 接收 Pull  Request
仓库维护角度接到 Pull Request 之后应该如何考虑如何判断以及进行哪些操作
8 GitHub 相互协作工具服务
部分讲解通过 CLI GitHub 进行操作所需 hub 命令
另外持续集成环境方面讲解 GitHub 结合使用 Travis CI Jenkins 构建设定方法
除此之外介绍一些能够 GitHub 共同使用服务
9 使用 GitHub 开发流程  
详细讲解 GitHub 中心进行开发 GitHub Flow、Git Flow 开发流程两者共通团队开发得到各自开发流程特征可以通过讲解实际动手体会
10 GitHub 应用企业
总结企业采用 GitHub 需要考虑问题一些有用信息安全保障故障信息事前需要考虑问题、GitHub Enterprise 讨论这些实际引入 GitHub 需要考虑或者了解知识进行讲解
附录 A :辅助 GitHub GUI 客户端团队不是每个人 CLI 得心应手因此我们读者总结辅助 GitHub GUI 客户端的相关知识
附录 B :通过 Gist 轻松实现代码共享 Gist 帮助开发者轻松与其他人共享简单代码示例日志我们部分 Gist 进行讲解利用 Gist 可以轻松管理日常代码片段
内容《WEB+DB PRESS 》Vol.69 特辑详解 GitHub——使用 Pull Request 打造高效率软件开发》①基础进行篇幅扩展修正作为图书出版
操作示例以下环境进行
• OS X 10.9.1
• git 1.8.5.2
部分 Windows 相关解说使用 Windows 8 。另外,GitHub 相关解说 2014 2版本基准
由于环境时期不同操作顺序页面运行结果可能存在差异
出现示例仓库现阶段主要译者尝试 Pull Request 各位读者进行维护
但是出版随着时间推移可能发生反应甚至没有反应情况烦请参照 7 内容以及关于示例仓库讲解一同努力维护
对于应用内容产生后果作者软件开发供应技术评论人民邮电出版社译者负责在此声明
提及公司制品公司实际使用注册商标商标正文添加™ 、©、® 标志
关于补充信息勘误参考以下网址
http://www.ituring.com.cn/book/1581
A 
GitHub——Pull Request が りなすソフトウェア,WEB+DB
PRESS vol.69 ,
技术评论。——译者

● 
目录
1 欢迎来到GitHub世界
1.1
什么 GitHub
GitHub
公司 octocat
并不只是 Git 仓库托管服务
GitHub
使用情况
Column …
专栏 :GitHub Git 区别
1.2
使用 GitHub 带来哪些变化
协作形式变化
开发者之间引发化学反应 Pull Request
特定用户进行评论
GitHub Flavored Markdown
Column …
专栏可以这样 !!
看到其他团队软件
开源软件相同开发模式
1.3
社会化编程
1.4
为什么需要社会化编程
不要闭目塞听接触不同文化
代码程序员青睐
GitHub
特征面向
1.5 GitHub
提供主要功能
Git
仓库
Organization
Issue
Wiki
Pull  Request
Column …
专栏 :GitHub 受到目的软件
1.6
小结
图灵社区会员 lxghost2 尊重版权

参考资料
2 Git导入
2.1
诞生背景
2.2
什么版本管理
集中分散
集中
分散
集中分散哪个
2.3
安装
Mac
Linux
Windows
组件选择
设置环境变量
换行处理
Git Bash
环境
2.4
初始设置
设置姓名邮箱地址
提高命令输出可读性
2.5
小结
3 使用GitHub前期准备
3.1
使用准备
创建账户
设置头像
设置 SSH Key
添加公开密钥
使用社区功能
3.2
实际动手使用
创建仓库
Repository name
Description
Public、Private
Initialize this repository with a README
Add .gitignore
Add a license
连接仓库
README.md
GitHub Flavored Markdown
公开代码
clone
仓库
编写代码
提交
Column
专栏公开许可协议
进行 push
3.3
小结
4 通过实际操作学习Git
4.1
基本操作
git init——
初始化仓库
git status——
查看仓库状态
git add——
添加文件
git commit——
保存仓库历史记录
记述一行提交信息
记述详细提交信息
中止提交
查看提交状态
git log——
查看提交日志
显示提交信息第一
显示指定目录文件日志
显示文件改动
git diff——
查看更改前后差别
查看工作差别
查看工作最新提交差别
4.2
分支操作
git branch——
显示分支一览表
git checkout -b——
创建切换分支
切换 feature-A 分支进行提交
切换 master 分支
切换上一个分支
特性分支
主干分支
git merge——
合并分支
git log --graph——
图表形式查看分支
4.3
更改提交操作
git reset——
回溯历史版本
回溯创建 feature-A 分支
创建 fix- B 分支
推进 feature-A 分支合并状态
消除冲突
查看冲突部分解决
提交解决结果
git commit --amend——
修改提交信息
git rebase -i——
压缩历史
创建 feature-C 分支
修正拼写错误
更改历史
合并 master 分支
4.4
推送远程仓库
git remote add——
添加远程仓库
git push——
推送远程仓库
推送 master 分支
推送 master 以外分支
4.5
远程仓库获取
git clone——
获取远程仓库
获取远程仓库
获取远程 feature- D 分支
本地 feature- D 分支提交更改
推送 feature- D 分支
git pull——
获取最新远程仓库分支
4.6
帮助大家深入理解 Git 资料
Pro Git
LearnGitBranching
tryGit
4.7
小结
5 详细解说GitHub功能
5.1
键盘快捷键
5.2
工具栏
关于 UI
1 LOGO
2 Notifications
3
搜索窗口
4 Explore
5 Gist
6 Blog
7 Help
8
头像用户名
9 Create a new...
 Account settings
 Sign out
5.3
控制面板
关于 UI
❶ News Feed
❷ Pull Requests
❸ Issues
❹ Stars
❺ Broadcast
❻ Repositories you contribute to
❼ Your Repositories
5.4
个人信息
关于 UI
1
用户信息
2 Popular Repositories
3 Repositories contributed to
4 Public contributions
5 Contribution Activity
6 Repositories
7 Public Activity
5.5
仓库
关于 UI
用户名组织)/ 仓库
❷ Watch/Star/Fork
❸ Code
❹ Issue
❺ Pull Requests
❻ Wiki
❼ Pulse
❽ Graphs
❾ Network
❿ Settings
⓫ SSH clone URL
⓬ Clone in Desktop
⓭ Download ZIP
a commits
b branches
c releases
d contributors
e Compare & review
f branch
g path
h Fork this project and Create a new file
i files
文件相关操作
Column
专栏通过部分名称搜索文件
查看差别
查看分支差别
查看几天差别
查看指定日期之间差别
5.6 Issue
简洁表现力丰富描述方法
语法高亮
添加图片
添加标签以便整理
添加里程碑以便管理
Column
专栏了解贡献规则
Tasklist
语法
通过提交信息操作 Issue
相关 Issue 显示提交
Close Issue
特定 Issue 转换 Pull  Request
5.7 Pull Request
Column
专栏获取 diff 格式 patch 格式文件
Conversation
Column
专栏引用评论
Commits
Column
专栏评论应用表情
Files Changed
5.8 Wiki
Pages
History
Column
专栏 Wiki 显示侧边栏
5.9 Pulse
active pull requests
active issue
commits
Releases published
Unresolved Conversations
5.10 Graphs
Contributors
Commit Activity
Code  Frequency
Punchcard
5.11 Network
5.12 Settings
Options
❶Settings
❷Features
❸GitHub Pages
❹Danger Zone
Collaborators
Webhooks & Services
Deploy Keys
5.13 Notifications
5.14
其他功能
GitHub  Pages
GitHub Jobs
GitHub  Enterprise
GitHub API
5.15
小结
Column
专栏 Mac 通知中心查看 GitHub Notifications
6 尝试Pull Request
6.1 Pull Request
概要
什么 Pull  Request
Pull  Request
流程
6.2
发送 Pull Request 准备
查看修正源代码

Fork
clone
branch
为何特性分支进行作业
确认分支
创建特性分支
添加代码
提交修改
创建远程分支
6.3
发送 Pull Request
6.4
Pull Request 更加有效方法
开发过程发送 Pull  Request 进行讨论
明确正在开发过程
进行 Fork 直接分支发送 Pull  Request
6.5
仓库维护
仓库 Fork clone
仓库设置名称
获取最新数据
6.6
小结
7 接收Pull Request
7.1
采纳 Pull Request 方法
7.2
采纳 Pull Request 准备
代码审查
查看图片差别
2-up
Swipe
Onion Skin
Difference
本地开发环境反映 Pull  Request 内容
接收本地仓库更新最新状态
获取发送远程仓库
创建用于检查分支
合并
删除分支
Column
专栏如何提升代码管理技术
7.3
采纳 Pull Request
合并分支
push
修改内容
7.4
小结
Column
专栏协助我们共同创建互相学习场所
8 GitHub相互协作工具服务
8.1 hub
命令
概要
安装
安装
确认运行情况
设置别名
实现 shell 功能
~/.config/hub
命令
hub clone
hub remote add
hub fetch
hub cherry-pick
hub fork
hub pull-request
hub checkout
hub create
hub push
hub browse
hub compare
Column
专栏 GitHub Enterprise 支持 hub 命令
8.2 Travis CI
概要
实际尝试
编写配置文件
检测配置文件是否问题
GitHub 集成
Travis CI 结果添加 README.md
8.3 Coveralls
概要
安装
注册
添加对象仓库
编写配置文件
添加 gem
查看报告
8.4 Gemnasium
8.5 Code Climate
8.6 Jenkins
概要
安装
创建 bot 账户
bot
账户权限设置
对象个人账户
对象 Organization 账户
检查设置
Jenkins 设置 SSH 密钥
初次使用 Jenkins
已经使用 Jenkins
GitHub pull request builder plugin
安装
Git plugin
设置
Github  Pull  Requests Builder
设置
Github server api URL
Access Token
Admin list
job
创建设置
GitHub project
源码管理
构建触发器
构建
通知结果
测试执行中的状态
Failed
All is well
commit status
通过评论进行控制
执行任务
添加 White list
重新执行任务
变更指定评论
8.7
小结
Column
专栏 Coderwall 生成 GitHub 个人信息
9 使用GitHub开发流程
9.1
团队使用 GitHub 注意事项
一切
项目管理工具 GitHub 区别
项目管理工具 GitHub 相异原因
Fork 仓库方法
9.2 GitHub Flow——
部署中心开发模式
9.3 GitHub Flow
流程
随时部署没有发布概念
进行作业 master 分支创建分支
创建分支进行提交
定期 push
使用 Pull  Request
务必其他开发者进行审查
合并立刻部署
9.4
实践 GitHub Flow 前提条件
部署作业完全自动化
使用部署工具
通过 Web 界面进行部署工具
导入开发注意事项
重视测试
测试自动化
编写测试代码通过全部测试
维护测试代码
9.5
模拟体验 GitHub Flow
Fizzbuzz
说明
添加功能
创建分支
如果尚未 clone 仓库
如果之前 clone 仓库
创建特性分支
实现功能
创建 Pull  Request
接收反馈
修正缩进
添加测试
培育 Pull  Request
Pull  Request
合并
9.6
团队实践 GitHub Flow 几点建议
减小 Pull  Request 体积
准备运行环境
不要 Pull  Request 反馈
不要积攒 Pull  Request
9.7 GitHub Flow
小结
9.8 Git Flow——
发布中心开发模式
便于理解标准流程
有时显得过于复杂
9.9
导入 Git Flow 准备
安装 git-flow
Mac
安装
Linux
安装
确认运行状况
仓库初始设置
创建仓库
进行 git flow 初始设置
远程仓库创建 develop 分支
9.10
模拟体验 Git Flow
master
分支 develop 分支区别
master
分支
develop
分支
feature 进行工作
创建分支
分支进行作业
发送 Pull  Request
通过代码审查提高代码质量
更新本地 develop 分支
release 分支进行工作
Column
专栏设置默认分支
创建分支
分支工作
进行发布合并
查看版本标签
更新远程仓库
hotfix 分支进行工作
创建分支
创建标签进行发布
hotfix 分支合并 develop 分支
9.11 Git Flow
小结
Column
专栏版本分配规则
10 GitHub应用企业
10.1
世界标准开发环境引入企业现场
企业引入 GitHub 好处
使用 Organization
确认 Github 安全性
注意维护时间
查看故障信息
10.2 GitHub Enterprise
概述
引入好处
引入弊端
适合引入 GitHub  Enterprise 情况
源代码不可外传
Column
专栏 GitHub 仓库作为 Subversion 仓库使用
希望维护故障时间
10.3
实现 Git 托管软件
Column
专栏 :Bitbucket
10.4
小结
附录A 支持GitHubGUI客户端
A.1 GitHub for Mac,GitHub for Windows
A.2 SourceTree
附录B 通过Gist轻松实现代码共享
B.1 Gist
特点
B.2
创建 Gist
UI
讲解
1 Gist description
2 name this file
3 language
4 ACE Editor
5
文件
6 Add another File
7 Create Secret Gist
8 Create Public Gist
B.3
查看 Gist
Gist
菜单
❶ Gist Detail
❷ Revisions
❸ Download Gist
❹ Clone this gist
❺ Embed this gist
❻ Link to this gist
文件菜单
B.4 Your Gists
B.5
小结


1
欢迎来到GitHub世界

2  
1  欢迎来到 GitHub 世界
讲解 GitHub 什么以及为什么全世界开发者使用同时一起考察 GitHub 开源软件世界带来怎样变革
1.1 
什么 GitHub
GitHub
开发者提供 Git 仓库托管服务让开朋友同事同学陌生人共享代码完美场所
● GitHub
公司 octocat GitHub 公司总部位于美国旧金山拥有不知章鱼还是吉祥物 octocat (1.1 )。 1.2 改编各种造型 octocat A 。
1.1  octocatA http://octodex.github.com/

1.1 
什么 GitHub  3
1.2  octocats
● 
并不只是 Git 仓库托管服务 GitHub 提供 Git 仓库托管服务开发者团队提供一系列功能帮助高效率品质进行代码编写这些功能开始详细讲解
GitHub
创始人之一 Chris Wanstrath 愿望就是Git 仓库托管服务自己朋友轻松分享代码便为了 GitHub诞生契机不过曾经表示:Git 仓库托管服务 GitHub 项目目标之一只是漫长路程而已 A 。
● GitHub
使用情况 截至 2013 12 ,GitHub 托管仓库超过 1000 B 。全世界
A http://www.slideshare.net/rubymeetup/inside-github-with-chris-wanstrath
B https://github.com/features/hosting

4  
1  欢迎来到 GitHub 世界
每时每刻开发者使用

专栏:GitHub Git 区别

在此讲解一下 GitHub Git a 区别。GitHub Git 完全不同东西自始至终 GitHub Git 方式区分描述
Git 开发者源代码存入名叫“Git 仓库资料库加以使用 GitHub 网络提供 Git 仓库服务
也就是说,GitHub 公开软件源代码全都 Git 进行管理理解 Git,熟练运用 GitHub 关键所在。Git 相关知识我们 2 详细讲解
a http://git-scm.com
1.2 
使用 GitHub 带来哪些变化
GitHub
出现使当今世界软件开发现场发生翻天覆地变化称之为革命变革当中中国毫不例外受到影响
我们简单介绍 GitHub 导入日常开发带来哪些变化尚未正式使用 GitHub 开发者加以了解
●●
协作形式变化
此前用于辅助协同工作软件层出不穷然而它们中的大部分一个个退出历史舞台这类软件群件(Groupware ) CRM (Customer Relationship Management ,顾客关系管理脱颖而出全世界商业人士所在公司想必导入这类软件
但是程序员代表软件开发者之间一直没有用来辅助协同编程关键软件因此软件开发者往往版本管理系统、BUG 跟踪系统代码审查工具邮件列表、IRC 众多工具组合在一起实现协作
开发者这种软件开发协作模式司空见惯然而 GitHub 出现带来巨大变化下面我们介绍 GitHub 功能
开发者之间引发化学反应 Pull  Request GitHub 这个聚集世界各地软件开发者地方过去绝对无法想象正在飞速进行——素未谋面开发者半个地球距离共同开发软件我们不妨称之为开发者之间化学反应
这种成为可能归功名为 Pull Request 功能 1.3 )。
1.3  Pull  Request 页面
含有数字 7 显示 GitHub
已经实现审查
缩进好像
没有关于实现测试代码添加
@yuria
感谢审查
关于规范方面问题
比如实现之前数字 75 应该显示 fizzbuzz。
实现由于属于含有数字7” 范畴显示 GitHub。
Pull Request
开发者本地源代码进行更改 GitHub 托管 Git 仓库请求合并功能开发者可以 Pull Request 通过评论交流例如修正 BUG ,可以合并一下?”以及试着这样功能可以合并一下?”
通过这个功能开发者可以轻松更改源代码公开更改细节然后仓库提交合并请求而且如果请求更改项目初衷相违可以选择拒绝合并
GitHub
Pull Request 不但轻松查看源代码前后差别可以指定一行代码进行评论 1.4 )。通过功能开发者可以针对具体代码进行讨论使代码审查工作变得前所未有惬意
1.4  针对代码进行评论实际截图
缩进好像
特定用户进行评论
方便快捷不是 Pull Request 专利任务管理 BUG 报告可以通过 Issue 进行交互如果特定用户只要“@ 用户名格式书写方便接到通知(Notifications ) ,查看 Issue (1.5 )。由于提供 Wiki 功能开发者可以轻松创建文档进行公开共享
Wiki
更新历史记录 Git 管理可以用户轻松更改
1.5  “@ 用户名评论截图
@yuria…
感谢审查
关于功能方面问题
比如实现之前数字 75 应该显示 fizzbuzz。
实现由于属于含有数字 7”范畴显示 GitHub。
有没有显示 fizzbuzzGitHub 这种复合形式
A 
通知相关知识 5 详细讲解

 GitHub  Flavored Markdown
GitHub 用户所有文字输入功能可以 GitHub Flavored Markdown (GFM )语法进行描述这个语法可以标记变得简单以此评论文档容易理解记住语法便
交流使用何乐而不为 A ?还有特别功能就是可以评论添加文字表情使用交流更加顺利
随着 GitHub 普及正在越来越服务开始兼容 Markdown 语法

专栏可以这样 !!

GitHub
使用描述方法并不“@ 用户名一种
输入“@ 组织可以属于 Organization(组织所有成员收到通知 a 。输入“@ 组织 / 团队可以团队
成员收到通知就是同时发送通知方法
输入“# 编号”,连接仓库对应 Issue 编号输入用户名 / 仓库 # 编号可以连接指定仓库对应 Issue
编号只要按照这类特定格式书写便自动创建链接
利用上述这些功能可以交流效率
a Organization 详细内容 10 进行讲解
● 
看到其他团队软件 GitHub 快捷环境开发者带来合作伙伴并不局限于自己团队内部只要感兴趣仓库添加 Watch 可以 News Feed 查看仓库相关信息 1.6 )。
A 
3 5 GFM 相关讲解
1.6  News  Feed 查看仓库信息
比如公司共用代码仓库添加 Watch 便第一时间掌握最新版本功能 BUG 修正信息当然可以参与讨论积极提出意见必要可以通过 Pull Request 提交代码
隔壁团队正在开发仓库添加 Watch 可以每天查看他们开发什么功能一旦发现有用功能或者可以立刻运用自己开发团队如果进一步交流分割共用从而建立仓库便成了不同开发者团队协作美谈
●  
开源软件相同开发模式 GitHub 运用企业便带来开源软件开发相同开发模式已经熟悉开源软件开发开发者不必专门学习企业独自采用工具可以直接加入开发行列
反过来说只要企业运用 GitHub ,便是刚刚入职成为程序员应届毕业生可以投身开源软件开发世界
也就是说开源软件世界软件开发企业软件开发不再隔阂某些企业两者区别恐怕就是仓库公开与否区别

1.3 
社会化编程
GitHub
服务开源世界带来社会化编程概念概念影响全世界众多程序员软件开发方法一次革命不为过
这里我们详细解说社会化编程概念
SOCIAL CODING (以下称为社会化编程这个如果没有那么 1.7 LOGO
GitHubA 曾经使用 LOGO 。上面附带 SOCIAL CODING 副标题。2013 4 ,GitHub 开始使用 1.8 中的 LOGO 。
1.7  GitHub 曾经 LOGO
1.8  GitHub LOGO
GitHub
服务创造社会化编程概念随着 GitHub 出现软件开发真正意义拥有源代码世界上任何人可以从前更加容易获得源代码自由更改加以公开如今世界众多程序员通过 GitHub 公开源代码同时利用 GitHub 支持自己日常软件开发
GitHub 出现之前软件开发只有一小部分拥有更改源代码权利这个特权阶级掌握开发主导权开发者改写发布A https://github.com/
之外往往需要时间精力说服这个特权阶级导致许多起初效率流行软件越发保守最终时代抛弃
但是,GitHub 出现软件开发者世界带来真正意义民主”,所有平等拥有更改源代码权利软件开发领域巨大革命革命领导者 GitHub 口号便是社会化编程”。
接下来我们深入理解引发革命社会化编程同时讲解原动力——GitHub 服务相关概要。GitHub 各个功能 3之后详细介绍
1.4 
为什么需要社会化编程
当今 IT 业界已经没有终身雇佣人才流动性日益增大可以我们一些著名开发者博客看到这种现象月末发布辞职消息月初入职”。
那么如果程序员面试两者之间选择
看到以前代码程序员 or 无法查看程序员
精通最新软件程序员 or 精通程序员
语言软件差异带来不同文化有所理解程序员 or 理解程序员为了成为一种程序员理解社会化编程 GitHub 至关重要
● 
不要闭目塞听接触不同文化
工作接触公开代码职业程序员应该接触世界不同文化拓展见闻如果公司封闭世界代码往往不知不觉中的技术变得陈腐不堪
放眼世界注意那些日新月异源代码技术设计以及文化自己编写源代码成果带来巨大影响笔者自身知名框架

实现受到启发良好实现公司内部开发软件
● 
代码程序员青睐
软件开发行业,Web 业界变化尤其激烈实际编写源代码程序员青睐
过去程序员简单编程经验用人单位重视人品协调管理能力如今踏踏实实编写代码职业程序员反而受欢迎由于近年来随着技术不断发展开发服务需要多种编程语言技术以求兼容多种硬件设备这种背景判断求职者能否编写项目所需源代码切实可行办法就是实际东西
如今,GitHub 出现已经所有平等拥有公开源代码权利看看 Facebook Twitter 了解一个人品性看看 GitHub 了解程序员实力
今后进行社会化编程程序员越来越从而成为一种普遍现象将来应聘成功与否取决于曾经编写代码
因此面向全世界代码公开必将越发重要编写代码为生职业程序员应该进行社会化编程
● GitHub
特征面向
这里讲解一下 GitHub 单纯仓库托管服务不同笔者看来重点问题
GitHub
以往仓库托管服务不同在于人为中心
以往仓库托管服务是以项目中心项目就是信息封闭世界虽然能够知道仓库管理这个管理哪些我们不得而知
GitHub
项目之外可以注意力集中身上我们不但阅览一个人公开所有源代码只要查看控制面板中的 News Feed ,知道哪些仓库感兴趣什么时候提交一个人 GitHub 进行开发一目了然 A 。
可以注意力聚焦感兴趣身上可以崇拜已久超级黑客可以同学公司同事
同时关注代码 GitHub 我们带来世界
1.5 GitHub
提供主要功能
GitHub 许多帮助开发者高效输出优质代码功能这里
我们简单说明这些功能
● Git
仓库
一般情况我们可以免费建立任意 GitHub 提供 Git 仓库如果需要建立特定人物自己公开私有仓库需要依照套餐类型 B 支付每月 7 美元使用
● Organization
通常个人使用只要使用个人账户足够如果公司建议使用 Organization 账户优点在于可以统一管理账户权限统一支付一些费用
如果使用公开仓库可以免费创建 Organization 账户因此如果是以交流 IT 团体形式进行软件开发不妨试一试
组织企业使用 GitHub 注意地方 10 进行详细讲解
A 
控制面板相关知识 5 进行详细说明
B https://github.com/plans

● Issue
Issue
功能任务问题分配 Issue 进行追踪管理功能可以 BUG 管理系统 TiDD (Ticket-driven Development )Ticket 一样使用 GitHub 每当进行我们即将讲解 Pull Request ,
都会同时创建 Issue 。
功能更改修正对应 Issue ,讨论修正这个Issue 中心进行只要查看 Issue ,知道这个更改相关一切信息以此进行管理
Git 提交信息 Issue ID (例如“#7”),GitHub 自动生成 Issue 对应提交链接另外只要按照特定格式描述提交信息可以关闭 Issue 。非常方便功能务必实践一下详细内容 5 讲解
● Wiki
通过 Wiki 功能任何随时文章进行更改保存因此可以共同完成文章功能常用开发文档手册编写语法方面可以通过 5 讲解 GFM 语法进行书写
Wiki
作为 Git 仓库进行管理改版历史记录切实保存下来使用者可以放心改写由于支持克隆本地进行编辑所以程序员使用可以不必开启浏览器
● Pull  Request
开发者 GitHub 仓库推送更改功能添加可以通过 Pull Request 功能别人仓库提出申请请求对方合并
Pull Request
目标仓库管理能够查看 Pull Request 内容其中包含代码更改
同时,GitHub 提供 Pull Request 源代码前后差别进行讨论功能通过功能可以行为单位源代码添加评论程序员之间高效交流
详细内容实际发送 Pull Request 流程 6 进行讲解

专栏:GitHub 受到目的软件

这里各位介绍几个正在 GitHub 开发软件 a)
截至 2013 12 )。想必其中软件大家或者
另外 GitHub 可以随时查看当前备受目的软件 a 。
a https://github.com/trending
a  GitHub 正在开发知名软件
名称 解说 GitHub URL
Ruby…on…
Ruby 使用一种 https://github.com/rails/rails
Rails
开源 Web 框架
Node
最近 JavaScript https://github.com/joyent/node
欢迎平台又名 Node.js
jQuery
当今所有领域应用 https://github.com/jquery/jquery
JavaScript

Symfony2
PHP https://github.com/symfony/
Web
框架 symfony
Bootstrap
可以做出 Twitter 那种 https://github.com/twitter/
面的组件 bootstrap
1.6 
小结
实现社会化编程 GitHub 进行讲解部分详细解说随后进行
● 
参考资料
如果更加深入理解社会化编程概念建议参考松田先生资料 1.1 )。撰写笔者参考这些资料

1.1  参考资料 A
标题 URL
轻松 Rails http://www.slideshare.net/a_matsuda/rails-development-
that-doesnt-hurt
面向对象社会化编程脚本 https://speakerdeck.com/a_matsuda/object-oriented-
语言 Ruby social-coding-scripting-language-ruby
社会化编程世界 https://speakerdeck.com/u/a_matsuda/p/social-coding
A 
资料标题依次『たのしい Rails 』『オブジェクト指向ソーシャルコー
ディングスクリプト
言語 Ruby 』『ソーシャルコーディングの世界』。——译者

Git
导入

Git
仓库管理功能 GitHub 核心因此使用 GitHub 之前必须掌握 Git 相关知识同时本地设备安装 Git 环境我们大家讲解使用 Git 所需知识各种设置
2.1 
诞生背景
Git
属于分散版本管理系统版本管理设计软件
Linux
创始人 Linus Torvalds 2005 开发 Git 原型程序
当时由于 Linux 内核开发使用既有版本管理系统开发许可证发生变更为了更换版本管理系统,Torvalds 开发 Git。
Linux
内核更新速度全世界首屈一指因此势必需要功能性能版本管理系统提高开发速度
当时开源环境虽然已经有数版本管理软件开发出来功能性能差强人意
加之 Git Linus Torvalds 亲自着手开发可以功能性能方面无可挑剔程序员愿意接受 Git ,程度取决于这个背景
笔者 SubversionA 改用 Git 强大功能性能感到震惊。Git 功能夸张觉得至今彻底掌握同时
削减笔者版本管理系统时间现在如果没有 Git ,软件开发恐怕非常痛苦事情
发布,Git 由于难懂只有部分黑客愿意使用随着众多开发者共同努力现在全世界程序员采用
2.2 
什么版本管理
版本管理就是管理更新历史记录我们提供一些软件
A http://subversion.apache.org/

过程必不可少功能例如记录软件添加更改源代码过程回滚特定阶段恢复删除文件
Git 出现以前人们普遍采用 Subversion 集中版本管理系统现在 Git 已经为了主流由于 GitHub 普及想必世界使用 Git 越来越因此学习版本管理各位建议选择 Git。
● 
集中分散
刚才我们提到版本管理系统分为 Subversion 这类集中 Git 这类分散下面各位简单说明一下二者不同
集中
Subversion 代表集中 2.1 仓库集中存放服务器之中所以存在仓库就是为什么这种版本管理系统称作中型
中型所有数据集中存放服务器当中便于管理优点
但是一旦开发者环境不能连接服务器无法获取最新源代码开发几乎无法进行
服务器宕机同样道理而且万一服务器故障导致数据消失恐怕开发者再也不到最新源代码
2.1  集中
开发者 A 开发者 B
commit commit
Subversion
checkout checkout
分散
2.2 是以 Git 代表分散示意图,GitHub 仓库 Fork 用户
Fork
就是 GitHub 特定仓库复制自己账户
Fork
仓库仓库不同仓库开发者可以随意编辑
2.2  分散
GitHub
Fork
git git
Pull Request
pull pull
push push
开发者 A 开发者 B
git git
分散拥有多个仓库相对而言复杂不过由于本地开发环境仓库所以开发者不必连接远程仓库可以进行开发
显示一般使用流程实际上所有仓库之间可以进行push pull 。即便通过 GitHub ,开发者 A 可以直接开发者 B 仓库进行 push pull 。
因此使用如果事先制定规范初学者往往不清最新源代码存在哪里导致开发失去控制
不过不用担心只要各位随着讲解亲自动手尝试掌握要领不是
● 
集中分散哪个
要说集中分散哪个其实双方缺点需要具体情况不过随着 Git GitHub 普及今后使用分散开发者将会绝大多数
只要规则制定得当分散同样集中那样进行管理
有些人学习版本管理相关知识认为相对简单集中入手循序渐进学习分散
笔者认为今后集中机会所以不必特地这个弯路
同样建议团队导入版本管理系统读者选择 GitHub Git。
如果软件开发进行一半集中分散不但需要支付高额费用让开花费大量精力金钱重新学习
考虑今后各种机遇挑战开始选择分散必定各位成功路上关键
只要掌握多个仓库并存概念学习分散不是什么
而且对于刚刚接触方面知识由于没有先入为主干扰应该容易接受概念
2.3 
安装
接下来我们本地环境实际安装 Git ,进行各种设置
● Mac
Linux
最近 Mac 中都预装 Git。版本 Linux 软件包(Package )形式提供用户所以各位可以直接使用
关于环境有的详细安装方法由于篇幅关系赘述
● Windows
Windows 环境简单快捷方法使用 msysGit A 。按照 Downloads 向导下载安装
使用版本 Git-1.8.4-preview20130916.exe 。
安装下载完毕只要双击运行按照向导步步安装即可下面我们安装设定进行讲解
A http://msysgit.github.io/

组件选择
2.3 页面选择需要组件由于所有必要组件默认勾选直接进入下一步
设置环境变量
2.4 页面可以设置调用 Git 环境变量讲解 msysGit 附属 Git Bash 命令提示所以选择上面Use Git Bash only ,然后进行下一步
2.3  组件选择
2.4  环境变量设置

换行处理
2.5 页面选择换行相关设置
GitHub
公开代码大部分是以 Mac Linux 中的 LF (Line Feed )换行然而由于Windows 是以 CRLF (Carriage Return + Line Feed )换行所以对应编辑器中将不能正常显示
Git
可以通过设置自动转换这些换行使用 Windows 环境各位选择推荐“Checkout Windows-style, commit Unix-style line endings” 选项换行签出自动转换 CRLF ,提交自动转换 LF 。
2.5  换行转换
各位注意以上几点配合当前使用环境进行安装
 Git Bash
顺利安装 msysGit 之后,Git Bash 作为应用程序添加系统接下来启动双击之后弹出名为 Git Bash 命令提示 2.6 ),属于msysGit 。如果各位按照介绍流程进行安装那么 git 命令只能 Git Bash 使用 Windows 附属命令提示无法运行

2.6  Git Bash 运行页面
名字带有 Bash ,Git Bash 照搬许多 Bash 命令习惯 Linux 起来感觉 Windows 命令提示得心应手这个机会不妨熟悉一下 Windows CLI (Command Line Interface ,命令行界面操作
● 
环境
中的示范操作 OS X 10.9.1 使用 Git 1.8.5.2 进行其他大部分环境提供 1.8.x 1.7.x 版本软件包所以并不强求末尾版本一致不过还是建议各位尽量安装最新 Git。
2.4 
初始设置
下面我们对本计算机安装 Git 进行设置
● 
设置姓名邮箱地址
首先设置使用 Git 姓名邮箱地址名字英文输入
$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "your_email@example.com"
这个命令“~/.gitconfig”如下形式输出设置文件

[user]
name = Firstname Lastname
email = your_email@example.com
更改这些信息可以直接编辑这个设置文件这里设置姓名邮箱地址 Git 提交日志由于 GitHub 公开仓库这里姓名邮箱地址随着提交日志一同公开所以不要使用不便公开隐私信息
GitHub 公开代码前来参考程序员可能来自世界任何地方所以不要使用汉字尽量英文进行描述当然如果不想使用完全可以使用网络昵称
● 
提高命令输出可读性
顺便 color.ui 设置 auto 可以命令输出拥有可读性
$ git config --global color.ui auto
“~/.gitconfig”
增加下面一行
[color]
ui = auto
这样一来各种命令输出变得容易分辨
2.5 
小结
我们 Git 诞生背景说起版本管理系统集中分散相关知识然后实际安装 Git ,进行初始设置
如果开发者今后使用 Git 情况必然越来越务必认真进行初始设置

使用GitHub前期准备

各位讲解使用 GitHub 需要一些准备
3.1 
使用准备
● 
创建账户
首先我们创建 GitHub 账户打开创建账户页面 A 。
我们看到 3.1 页面 Username 中用英文数字
输入创建 ID ,公开页面URL (http://github.com/ ○○)这个 ID 。其他项目按照页面要求输入
3.1  账户创建页面
填写所有项目点击 Create an account ,完成账户创建
账户创建完成直接进入登录状态用户可以立即开始使用 GitHub。
登录状态用户名显示面的上方
A  https://github.com/join

● 
设置头像
GitHub 随处可见头像账户有的标识通过 GravatarA 服务显示使用 WordPress 读者可能有所了解
只要使用创建 GitHub 账户注册邮箱 Gravatar 设置头像, GitHub 头像变成设置样子
头像不是使用 GitHub 硬性要求如果代码编码相貌标识觉得安心同时可能对方产生兴趣毕竟我们使用关注聚集身上 GitHub ,所以建议各位
极地设置头像
● 
设置 SSH Key
GitHub
连接仓库认证通过使用 SSH 公开密钥认证方式进行现在我们创建公开密钥认证所需 SSH Key ,添加 GitHub。已经创建读者现有密钥进行设置 B 。
运行下面命令创建 SSH Key。
$ ssh-keygen -t rsa -C "your_email@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key
(/Users/your_user_directory/.ssh/id_rsa):
回车键
Enter passphrase (empty for no passphrase):
输入密码
Enter same passphrase again:
再次输入密码
“your_email@example.com”
部分改成创建账户邮箱地址密码需要认证输入选择复杂并且容易记忆组合
输入密码出现以下结果
Your identification has been saved in /Users/your_user_directory/.ssh/id_rsa.
Your public key has been saved in /Users/your_user_directory/.ssh/id_rsa.pub.
The key fingerprint is:
fingerprint
your_email@example.com
The key's randomart image is:
A http://cn.gravatar.com/
B 
部分讲解参照 GitHub 帮助说明(https://help.github.com/articles/generating-
ssh-keys )。

+--[ RSA 2048]----+
| .+ + |
| = o O . |

id_rsa
文件私有密钥,id_rsa.pub 公开密钥
● 
添加公开密钥
GitHub 添加公开密钥今后可以私有密钥进行认证
点击右上账户设定按钮(Account Settings ),选择SSH Keys 菜单点击 Add SSH Key 之后出现 3.2 输入 Title 输入适当密钥名称。Key 部分粘贴 id_rsa.pub 文件内容。id_rsa.pub
内容可以如下方法查看
$ cat ~/.ssh/id_rsa.pub
ssh-rsa
公开密钥内容 your_email@example.com
3.2  SSH Keys
添加成功之后创建账户邮箱接到提示公共密钥添加完成邮件
完成以上设置可以中的私人密钥 GitHub 进行认证通信我们实际试一试
$ ssh -T git@github.com
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is fingerprint
.
Are you sure you want to continue connecting (yes/no)?
输入yes 出现如下结果即为成功
Hi hirocastest! You've successfully authenticated, but GitHub does not provide shell access.
● 
使用社区功能
既然 GitHub 能够人为焦点那么创建账户不妨 Follow (关注别人用户信息页面右上点击3.3 按钮即可
3.3  Follow 按钮
这样一来 Follow 用户活动显示控制面板页面可以通过这种方法知道那个人 GitHub 上都什么
对于仓库可以使用 Watch 功能获取最新开发信息如果经常使用软件正在 GitHub 进行开发不妨 Watch 一下
关于部分内容 5 详细讲解
3.2 
实际动手使用
● 
创建仓库
实际创建公开仓库点击右上工具栏 New repository
3.4 )图标创建仓库
3.4  新建仓库按钮

  Repository name
参考 3.5 , Repository name 输入仓库名称这里我们输入 Hello-World 。
3.5  新建仓库页面
 Description
Description
可以设置仓库说明不是必需可以留空
  Public、Private
可以选择 Public 还是 Private 。这里我们选择 Public ,创建公开仓库仓库所有内容都会公开
选择 Private 可以创建公开仓库用户可以设置访问权限服务收费
  Initialize this repository with a  README
Initialize this repository with a README 选项打钩随后 GitHub 自动初始化仓库设置 README 文件用户可以立刻

clone
这个仓库如果 GitHub 添加有的 Git 仓库建议不要勾选直接手动 push 。
 Add  .gitignore
下方左侧菜单非常方便通过可以初始化自动生成 .gitignore 文件 A 。
这个设定我们需要 Git 仓库进行版本管理文件记录 .gitignore 文件省去每次根据框架进行设置麻烦
菜单包含主要语言框架选择今后将要使用即可
由于我们并不使用任何框架所以选择
 Add a license
右侧菜单可以选择添加许可协议文件如果这个仓库包含代码已经确定许可协议那么这里进行选择
随后自动生成包含许可协议内容 LICENSE 文件用来表明仓库内容许可协议
输入选择完成点击 Create repository 按钮完成仓库创建
● 
连接仓库
下面这个 URL 便是刚刚创建仓库页面
https://github.com/
用户名/Hello-Word
  README.md
README.md
初始化已经生成好了。README.md 文件内容自动显示仓库首页当中
因此人们一般这个文件标明仓库包含软件概要使用流程许可协议信息如果使用
Markdown
语法进行描述可以添加标记提高可读性
A 
文件用来描述 Git 仓库管理文件目录

 GitHub  Flavored Markdown
GitHub 进行交流 Issue 、 评论、Wiki , 可以 Markdown 语法表述从而进行标记准确应该 GitHub Flavored Markdown (GFM )语法语法虽然GitHub Markdown 语法基础 扩充一般情况只要按照原本 Markdown 语法进行描述可以
关于 Markdown 语法解说网上相关资料 A 。各位不妨一边参考一边实际尝试
使用 GitHub 文档需要 Markdown 书写也就是说全世界大量程序员使用 Markdown ,因此掌握这种语法已经成为程序员标准技能之一
各位务必学会 Markdown 语法
● 
公开代码
 clone
仓库
接下来我们尝试仓库添加代码加以公开首先仓库 clone 身边开发环境。clone 指定路径参考 3.6B 。
A http://www.ituring.com.cn/article/775
B git
命令参考 4

3.6  仓库路径
$ git clone git@github.com:hirocastest/Hello-World.git
Cloning into 'Hello-World'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
$ cd Hello-World
这里要求输入 GitHub 设置公开密钥密码认证成功仓库便 clone 仓库目录
想要公开代码提交这个仓库 push GitHub 仓库代码便公开
编写代码
这里我们编写 hello_world.php 文件用来输出“Hello World!”。
hello_word.php
内容
<?php
echo "Hello World!";
?>
由于 hello_word.php 没有添加 Git 仓库所以显示 Untracked
files。
$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# hello_world.php
nothing added to commit but untracked files present (use "git add" to track)
提交
hello_word.php 提交仓库这样一来这个文件进入版本管理系统管理之下今后更改管理交由 Git 进行
$ git add hello_world.php
$ git commit -m "Add hello world script by php"
[master d23b909] Add hello world script by php
1 file changed, 3 insertions(+)
create mode 100644 hello_world.php
A
通过 git add命令文件加入通过git commit命令提交
添加成功可以通过 git log命令查看提交日志
$ git log
commit d23b909caad5d49a281480e6683ce3855087a5da
Author: hirocastest <hohtsuka@gmail.com>
Date: Tue May 1 14:36:58 2012 +0900
Add hello world script by php

A 
Index 数据结构记录文件提交之前状态


专栏公开许可协议

即便 GitHub 公开源代码代表作者放弃著作权权利代码权利持有人选择合适许可协议
GitHub 修正 BSD 许可协议、Apache 许可协议多种许可协议人们选择不过大多数软件使用 MIT 许可协议
MIT
许可协议具有以下特征
授权权利授权权利使用复制修改合并出版发行散布授权 / 贩售软件软件副本授予供应同等权利服从以下义务
授权义务软件软件所有副本中都必须包含以上版权声明许可声明
其他重要特性许可协议并非 copyleft 自由软件许可协议条款允许自由开放源代码软件自由软件(proprietary…software)使用
MIT
内容依照程序著作权需求更改内容 MIT BSD(The… BSD…license,…3-clause… BSD…license)本质上不同
MIT
许可协议其他许可协议并存另外,MIT 条款自由软件基金会(FSF)认可自由软件许可协议条款 GPL 兼容
——MIT
许可证,Wikipedia,http://zh.wikipedia.org/,2015 3 27 获取
详细内容参阅原文 a 。
实际使用 LICENSE 文件加入仓库 README.md 文件声明使用许可协议即可
使用没有声明许可协议软件以防万一最好直接联系作者
a http://www.opensource.org/licenses/mit-license.php
进行 push
之后只要执行 push ,GitHub 仓库更新
$ git push
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 328 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:hirocastest/Hello-World.git
46ff713..d23b909 master -> master

这样一来代码 GitHub 公开不妨实际连接 http://github.
com/
用户名 /Hello-World 查看一下。Git 更加详细操作查阅 4
3.3 
小结
讲解初次 GitHub 建立仓库以及公开代码流程完成
各位 GitHub 世界

通过实际操作学习Git

我们学习 Git 相关基本知识操作方法已经 Git 实际运用开发读者跳过
中将解说理解内容必不可少一些 Git 操作随着我们解说一边实际操作一边学习掌握 Git。
4.1 
基本操作
● git init——
初始化仓库
使用 Git 进行版本管理必须初始化仓库。Git 使用 git init命令进行初始化实际建立目录初始化仓库
$ mkdir git-tutorial
$ cd git-tutorial
$ git init
Initialized empty Git repository in /Users/hirocaster/github/github-book
/git-tutorial/.git/
如果初始化成功执行 git init命令目录生成 .git 目录这个 .git 目录存储管理当前目录内容所需仓库数据
Git 我们这个目录内容称为属于仓库工作”。
文件编辑操作工作进行然后记录仓库以此管理文件历史快照
如果文件恢复原先状态可以仓库调取之前快照工作打开开发者可以通过这种方式获取以往文件
具体操作指令我们后面详细解说
● git status——
查看仓库状态
git status
命令用于显示 Git 仓库状态十分常用命令务必牢记
工作仓库操作过程状态不断发生变化 Git 过程中时常用 git status命令查看当前状态可谓基本中的基本
下面我们实际查看一下当前状态

$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
结果显示我们当前处于 master 分支关于分支我们不久讲到现在不必深究接着显示没有提交内容
所谓提交(Commit ),记录工作所有文件当前状态”。
没有提交内容就是说当前我们建立这个仓库没有记录任何文件任何状态
这里我们建立 README.md 文件作为管理对象第一次提交前期准备
$ touch README.md
$ git status
# On branch master
#
# Initial commit
## Untracked files:# (use "git add <file>..." to include in what will
be committed)#
# README.md
nothing added to commit but untracked files present (use "git add" to
track)
可以看到 Untracked files 显示 README.md 文件类似
只要 Git 工作仓库进行操作,git status命令显示结果发生变化
● git add——
添加文件
如果只是 Git 仓库工作创建文件那么文件并不 Git 仓库版本管理对象当中
因此我们 git status命令查看README.md 文件显示 Untracked files
文件成为 Git 仓库管理对象需要 git add命令加入(Stage 或者 Index )提交之前临时区域
$ git add README.md
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: README.md
#
README.md 文件加入,git status命令显示结果发生变化可以看到,README.md 文件显示 Changes to be committed
● git commit——
保存仓库历史记录
git commit
命令可以当前中的文件实际保存仓库历史记录通过这些记录我们可以工作复原文件
记述一行提交信息
我们实际运行一下 git commit命令
$ git commit -m "First commit"
[master (root-commit) 9f129ba] First commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
-m
参数 "First commit"称作提交信息这个提交概述
记述详细提交信息
刚才我们简洁记述一行提交信息如果想要记述更加详细不加 -m,直接执行 git commit命令执行编辑器启动显示如下结果
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: README.md
#
在编记述提交信息格式如下
第一一行文字简述提交更改内容
第二
以后记述更改原因详细内容
只要按照上面格式输入今后便可以通过确认日志命令工具看到这些记录
# (井号注释Changes to be committed (提交更改可以查看提交包含文件提交信息格式记述完毕保存关闭编辑器 # (井号注释不必
随后刚才记述提交信息提交
中止提交
如果在编启动中止提交提交信息留空直接关闭编辑器随后提交中止
查看提交状态
执行 git commit命令查看当前状态
$ git status
# On branch master
nothing to commit, working directory clean
当前工作处于刚刚完成提交最新状态所以结果显示没有更改
● git log——
查看提交日志
git log
命令可以查看以往仓库提交日志包括可以查看

什么时候进行提交合并以及操作前后怎样差别关于合并我们后面解说
我们看看刚才 git commit命令是否记录
$ git log
commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:06:49 2013 +0900
First commit
屏幕显示刚刚提交操作。commit 旁边显示“9f129b……”指向这个提交哈希。Git 其他命令指向提交这个哈希
Author
显示我们 Git 设置用户名邮箱地址。Date 显示提交执行日期时间就是提交提交信息
显示提交信息第一
如果程序显示第一简述信息可以 git log命令加上 --pretty=short。这样一来开发人员能够轻松把握多个提交
$ git log --pretty=short
commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
First commit
显示指定目录文件日志
只要 git log命令加上目录便显示目录日志
如果文件显示文件相关日志
$ git log README.md
显示文件改动
如果查看提交带来改动可以加上 -p参数文件前后差别显示提交信息之后
$ git log -p
比如执行下面命令可以查看 README.md 文件提交日志以及提交前后差别
$ git log -p README.md
,git log命令可以利用多种参数帮助开发者把握以往提交内容不必勉强自己一次全部参数每当查看日志积极慢慢得心应手
● git diff——
查看更改前后差别
git diff
命令可以查看工作最新提交之间差别
字面可能理解各位不妨跟着笔者解说亲手试一试
我们刚刚提交 README.md 东西
# Git
教程
这里 Markdown 语法写下一行题目
查看工作差别
执行 git diff命令查看当前工作差别
$ git diff
diff --git a/README.md b/README.md
index e69de29..cb5dc9f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git
教程
由于我们尚未 git add命令添加任何东西所以程序显示工作最新提交状态之间差别
这里解释一下显示内容。“+”添加删除“-”我们可以看到添加一行
git add命令 README.md 文件加入
$ git add README.md
查看工作最新提交差别
如果现在执行 git diff命令由于工作状态差别结果什么不会显示
查看最新提交差别执行以下命令
$ git diff HEAD
diff --git a/README.md b/README.md
index e69de29..cb5dc9f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git
教程
不妨养成这样习惯执行 git commit命令之前执行 git diff HEAD命令查看提交上次提交之间什么差别确认完毕进行提交这里 HEAD 指向当前分支最新一次提交指针
由于我们刚刚确认提交之间差别所以直接运行 git commit命令
$ git commit -m "Add index"
[master fd0cbf0] Add index
1 file changed, 1 insertion(+)
保险起见我们查看一下提交日志确认提交是否成功
$ git log
commit fd0cbf0d4a25f747230694d95cac1be72d33441d
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:10:15 2013 +0900
Add index
commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:06:49 2013 +0900
First commit
成功到了第二提交
4.2 
分支操作
进行多个并行作业我们分支这类并行开发过程往往同时存在多个最新代码状态 4.1 master 分支创建 feature-A 分支 fix-B 分支分支中都拥有自己最新代码
master
分支 Git 默认创建分支因此基本上所有开发是以这个分支中心进行
4.1  master 分支创建 feature-A 分支 fix- B 分支
feature-A fix- B
master
不同分支可以同时进行完全不同作业分支作业完成之后 master 分支合并比如 feature-A 分支作业结束 master 合并 4.2
通过灵活运用分支可以同时高效进行并行开发这里我们大家学习分支相关 Git 操作

4.2  feature-A 分支作业结束状态
master
feature-A
fix- B
● git branch——
显示分支一览表
git branch
命令可以分支列表显示同时可以确认当前所在分支我们实际运行 git branch命令
$ git branch
* master
可以看到 master 分支左侧“ *”(星号),表示我们当前所在分支也就是说我们正在 master 分支进行开发结果没有显示其他分支表示本地仓库存在 master 分支
● git checkout -b——
创建切换分支
如果当前 master 分支基础创建分支我们需要
git checkout -b
命令
切换 feature-A 分支进行提交
执行下面命令创建名为 feature-A 分支
$ git checkout -b feature-A
Switched to a new branch 'feature-A'
实际上连续执行下面命令收到同样效果
$ git branch feature-A
$ git checkout feature-A
创建 feature-A 分支当前分支切换 feature-A 分支这时查看分支列表显示我们处于 feature-A 分支
$ git branch
* feature-A
master
feature-A
分支左侧“ *”,表示当前分支 feature-A。这个状态正常开发那样修改代码执行 git add命令进行提交的话
代码提交 feature-A 分支这样不断分支例如feature-A )进行提交操作我们称为培育分支”。
下面实际操作一下 README.md 文件添加一行
# Git
教程
- feature-A
这里我们添加 feature-A 这样一行字母然后进行提交
$ git add README.md
$ git commit -m "Add feature-A"
[feature-A 8a6c8b9] Add feature-A
1 file changed, 2 insertions(+)
于是一行添加 feature-A 分支
切换 master 分支
现在我们看一看 master 分支有没有受到影响首先切换 master 分支
$ git checkout master
Switched to branch 'master'
然后查看 README.md 文件发现 README.md 文件仍然保持原先状态没有添加文字。feature-A 分支更改不会影响 master 分支正是开发创建分支优点只要创建多个分支

可以互相影响情况同时进行多个功能开发
切换上一个分支
现在我们切换 feature-A 分支
$ git checkout -
Switched to branch 'feature-A'
上面这样“ -”(连字符代替分支可以切换至上分支当然“-”换成 feature-A 同样可以切换 feature-A 分支
● 
特性分支
Git
Subversion (SVN )集中版本管理系统不同创建分支需要连接中央仓库所以能够相对轻松创建分支因此当今大部分工作流程中都到了特性(Topic )分支
特性分支顾名思义集中实现单一特性主题),除此之外进行任何作业分支
日常开发往往创建特性分支同时在此之外保留随时可以发布软件稳定分支稳定分支角色通常 master 分支担当 4.3 )。
4.3  特性分支概念
master
feature-A
特性分支
之前我们创建 feature-A 分支分支主要实现 feature-A ,feature-A 实现之外进行任何作业即便开发过程发现 BUG ,需要创建分支分支进行修正

基于特定主题作业特性分支进行主题完成 master 分支合并只要保持这样开发流程保证 master 分支可以随时查看这样一来其他开发者可以放心大胆 master 分支创建特性分支
● 
主干分支
主干分支刚才我们讲解特性分支原点同时合并终点通常人们 master 分支作为主干分支主干分支没有开发一半代码可以随时他人查看
有时我们需要这个主干分支总是配置正式环境有时需要标签 Tag 创建版本信息同时管理多个版本发布拥有多个版本发布主干分支多个
● git merge——
合并分支
接下来我们假设 feature-A 已经实现完毕想要合并主干分支 master 首先切换 master 分支
$ git checkout master
Switched to branch 'master'
然后合并 feature-A 分支为了历史记录明确记录分支合并我们需要创建合并提交因此合并加上 --no-ff参数
$ git merge --no-ff feature-A
随后编辑器启动用于录入合并提交信息
Merge branch 'feature-A'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
默认信息已经包含 feature-A 分支合并过来相关内容所以不必任何更改编辑器显示内容保存关闭编辑器然后

看到下面结果
Merge made by the 'recursive' strategy.
README.md | 2 ++
1 file changed, 2 insertions(+)
这样一来,feature-A 分支内容合并 master 分支
● git log --graph——
图表形式查看分支
git log --graph命令进行查看的话清楚看到特性分支(feature-A )提交内容合并以外特性分支创建以及合并清楚明了
$ git log --graph
* commit 83b0b94268675cb715ac6c8a5bc1965938c15f62
|\ Merge: fd0cbf0 8a6c8b9
| | Author: hirocaster <hohtsuka@gmail.com>
| | Date: Sun May 5 16:37:57 2013 +0900
| |
| | Merge branch 'feature-A'
| |
| * commit 8a6c8b97c8962cd44afb69c65f26d6e1a6c088d8
|/ Author: hirocaster <hohtsuka@gmail.com>
| Date: Sun May 5 16:22:02 2013 +0900
|
| Add feature-A
|
* commit fd0cbf0d4a25f747230694d95cac1be72d33441d
| Author: hirocaster <hohtsuka@gmail.com>
| Date: Sun May 5 16:10:15 2013 +0900
|
| Add index
|
* commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:06:49 2013 +0900
First commit
git log --graph
命令可以图表形式输出提交日志非常直观大家务必记住

4.3 
更改提交操作
● git reset——
回溯历史版本
通过前面学习操作我们已经学会何在实现功能进行提交累积提交日志作为历史记录借此不断培育软件
Git
另一特征便是可以灵活操作历史版本借助分散仓库优势可以影响其他仓库前提历史版本进行操作
这里为了各位熟悉历史版本操作我们回溯历史版本创建名为 fix-B 特性分支 4.4 )。
4.4  回溯历史创建 fix- B 分支
master
feature-A fix- B
回溯创建 feature-A 分支
我们回溯 feature-A 分支创建之前创建名为fix-B 特性分支
仓库 HEAD 、当前工作回溯指定状态需要 A git rest --hard命令
只要提供目标时间点哈希可以 A 哈希环境各不相同读者查看自身当前环境 Add index 哈希
进行替换

完全恢复时间点状态事不宜迟我们执行下面命令
$ git reset --hard fd0cbf0d4a25f747230694d95cac1be72d33441d
HEAD is now at fd0cbf0 Add index
我们已经成功回溯特性分支(feature-A )创建之前状态由于所有文件回溯到了指定哈希对应时间点,README.md 文件内容恢复到了当时状态
创建 fix- B 分支
现在我们创建特性分支(fix-B )。
$ git checkout -b fix-B
Switched to a new branch 'fix-B'
作为这个主题作业内容我们 README.md 文件添加一行文字
# Git
教程
- fix-B
然后直接提交 README.md 文件
$ git add README.md
$ git commit -m "Fix B"
[fix-B 4096d9e] Fix B
1 file changed, 2 insertions(+)
现在状态 4.5 接下来我们目标 4.6 状态主干分支合并 feature-A 分支修改合并 fix-B 修改
4.5  当前 fix- B 分支状态
fix- B
master

4.6  fix- B 分支下一步目标
master
feature-A fix- B
推进 feature-A 分支合并状态
首先恢复 feature-A 分支合并状态不妨作为推进历史”。
git log
命令只能查看当前状态终点历史日志
所以这里使用 git reflog命令查看当前仓库操作日志日志找出回溯历史之前哈希通过 git reset --hard命令恢复回溯历史状态
首先执行 git reflog 命令查看当前仓库执行操作日志
$ git reflog
4096d9e HEAD@{0}: commit: Fix B
fd0cbf0 HEAD@{1}: checkout: moving from master to fix-B
fd0cbf0 HEAD@{2}: reset: moving to fd0cbf0d4a25f747230694d95cac1be72d33441d
83b0b94 HEAD@{3}: merge feature-A: Merge made by the 'recursive' strategy.
fd0cbf0 HEAD@{4}: checkout: moving from feature-A to master
8a6c8b9 HEAD@{5}: checkout: moving from master to feature-A
fd0cbf0 HEAD@{6}: checkout: moving from feature-A to master
8a6c8b9 HEAD@{7}: commit: Add feature-A
fd0cbf0 HEAD@{8}: checkout: moving from master to feature-A
fd0cbf0 HEAD@{9}: commit: Add index
9f129ba HEAD@{10}: commit (initial): First commit

日志我们可以看到 commit、checkout、reset 、merge Git 命令执行记录只要进行 Git GC (Garbage Collection ,垃圾回收),
可以通过日志随意调取近期历史状态时间机器指定时间点过去未来自由穿梭一般即便开发者错误执行 Git 操作
基本可以利用 git reflog命令恢复原先状态所以各位读者务必牢记部分
上面表示 feature-A 特性分支合并状态对应哈希 83b0b94A 。我们 HEAD 、工作恢复这个时间点状态
$ git checkout master
$ git reset --hard 83b0b94
HEAD is now at 83b0b94 Merge branch 'feature-A'
之前我们使用 git reset --hard命令回溯历史这里再次通过恢复到了回溯历史状态当前状态 4.7
4.7  恢复历史状态
master
feature-A fix- B
● 
消除冲突
现在只要合并 fix-B 分支可以得到我们想要状态我们赶快进行合并操作
A 
哈希只要输入 4 以上可以执行
$ git merge --no-ff fix-B
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Recorded preimage for 'README.md'
Automatic merge failed; fix conflicts and then commit the result.
这时系统告诉我们 README.md 文件发生冲突(Conflict )。
系统合并 README.md 文件,feature-A 分支更改部分想要合并 fix-B 分支更改部分发生冲突
解决冲突无法完成合并所以我们打开 README.md 文件解决这个冲突
查看冲突部分解决编辑器打开 README.md 文件发现内容成了下面这个样子
# Git
教程
<<<<<<< HEAD
- feature-A
=======
- fix-B
>>>>>>> fix-B
=======
以上部分当前 HEAD 内容以下部分合并 fix-B 分支中的内容我们在编中将改成想要样子
# Git
教程
- feature-A
- fix-B
修正 feature-A fix-B 内容并存文件之中
但是实际软件开发往往需要删除其中之一所以各位处理冲突务必仔细分析冲突部分内容修改
提交解决结果
冲突解决执行 git add命令 git commit命令
$ git add README.md
$ git commit -m "Fix conflict"
Recorded resolution for 'README.md'.
[master 6a97e48] Fix conflict
由于更改解决冲突所以提交信息记为 "Fix conflict "。
● git commit --amend——
修改提交信息
修改提交信息可以使用 git commit --amend命令
我们提交信息为了 "Fix conflict ",其实 fix-B 分支合并解决合并发生冲突只是过程之一这样标记实在不妥
于是我们修改提交信息
$ git commit --amend
执行上面命令编辑器启动
Fix conflict
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# (use "git reset HEAD^1 <file>..." to unstage)
#
# modified: README.md
#
编辑器显示内容其中包含之前提交信息
提交信息部分修改 Merge branch 'fix-B' ,然后保存文件关闭

[master 2e7db6f] Merge branch 'fix-B'
随后显示上面结果现在执行 git log --graph命令
可以看到提交日志中的相应内容已经修改
$ git log --graph
* commit 2e7db6fb0b576e9946965ea680e4834ee889c9d8
|\ Merge: 83b0b94 4096d9e
| | Author: hirocaster <hohtsuka@gmail.com>
| | Date: Sun May 5 16:58:27 2013 +0900
| |
| | Merge branch 'fix-B'
| |
| * commit 4096d9e856995a1aafa982aabb52bfc0da656b74
| | Author: hirocaster <hohtsuka@gmail.com>
| | Date: Sun May 5 16:50:31 2013 +0900
| |
| | Fix B
| |
* | commit 83b0b94268675cb715ac6c8a5bc1965938c15f62
|\ \ Merge: fd0cbf0 8a6c8b9
| |/ Author: hirocaster <hohtsuka@gmail.com>
|/| Date: Sun May 5 16:37:57 2013 +0900
| |
| | Merge branch 'feature-A'
| |
| * commit 8a6c8b97c8962cd44afb69c65f26d6e1a6c088d8
|/ Author: hirocaster <hohtsuka@gmail.com>
| Date: Sun May 5 16:22:02 2013 +0900
|
| Add feature-A
|
* commit fd0cbf0d4a25f747230694d95cac1be72d33441d
| Author: hirocaster <hohtsuka@gmail.com>
| Date: Sun May 5 16:10:15 2013 +0900
|
| Add index
|
* commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:06:49 2013 +0900
First commit
● git rebase -i——
压缩历史
合并特性分支之前如果发现提交内容有些拼写错误不妨提交修改然后这个修改包含提交之中压缩历史记录
经常技巧我们实际操作体会一下
创建 feature-C 分支
首先新建 feature-C 特性分支

$ git checkout -b feature-C
Switched to a new branch 'feature-C'
作为 feature-C 功能实现我们 README.md 文件添加一行文字并且故意留下拼写错误以便之后修正
# Git
教程
- feature-A
- fix-B
- faeture-C
提交部分内容这个小小变更必要执行 git add命令执行 git commit命令我们
git commit -am
命令一次完成操作
$ git commit -am "Add feature-C"
[feature-C 7a34294] Add feature-C
1 file changed, 1 insertion(+)
修正拼写错误
现在修正刚才预留拼写错误各位自行修正 README.md 文件内容修正差别如下
$ git diff
diff --git a/README.md b/README.md
index ad19aba..af647fd 100644
--- a/README.md
+++ b/README.md
@@ -2,4 +2,4 @@
- feature-A
- fix-B
- - faeture-C
+ - feature-C
然后进行提交
$ git commit -am "Fix typo"
[feature-C 6fba227] Fix typo
1 file changed, 1 insertion(+), 1 deletion(-)
错字失误称作 typo ,所以我们提交信息记为 "Fix typo "。

实际上我们希望历史记录看到这类提交因为健全历史记录并不需要它们如果最初提交之前发现修正这些错误不会出现这类提交
更改历史
因此我们更改历史 "Fix typo"修正内容之前一次提交合并历史记录合并一次完美提交为此我们
git rebase
命令
$ git rebase -i HEAD~2
上述方式执行 git rebase命令可以选定当前分支包含 HEAD (最新提交在内最新历史记录对象在编打开
pick 7a34294 Add feature-C
pick 6fba227 Fix typo
# Rebase 2e7db6f..6fba227 onto 2e7db6f
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
我们 6fba227 Fix typo 历史记录压缩 7a34294 Add feature-C 按照 6fba227 左侧 pick 部分删除改写 fixup。
pick 7a34294 Add feature-C
fixup 6fba227 Fix typo
保存编辑器内容关闭编辑器
[detached HEAD 51440c5] Add feature-C
1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/feature-C.
系统显示 rebase 成功也就是以下提交作为对象 "Fix typo "内容合并到了上一个提交
"Add feature-C "
改写成了提交
● 7a34294 Add feature-C
● 6fba227 Fix typo
现在查看提交日志发现 Add feature-C 哈希已经不是
7a34294
证明提交已经更改
$ git log --graph
* commit 51440c55b23fa7fa50aedf20aa43c54138171137
| Author: hirocaster <hohtsuka@gmail.com>
| Date: Sun May 5 17:07:36 2013 +0900
|
| Add feature-C
|
* commit 2e7db6fb0b576e9946965ea680e4834ee889c9d8
|\ Merge: 83b0b94 4096d9e
| | Author: hirocaster <hohtsuka@gmail.com>
| | Date: Sun May 5 16:58:27 2013 +0900
| |
| | Merge branch 'fix-B'
| |
| * commit 4096d9e856995a1aafa982aabb52bfc0da656b74
| | Author: hirocaster <hohtsuka@gmail.com>
| | Date: Sun May 5 16:50:31 2013 +0900
| |
| | Fix B
| |
省略
这样一来,Fix typo 历史抹去相当于 Add feature-C
从来没有出现拼写错误算是一种良性历史改写

合并 master 分支
feature-C
分支使命告一段落我们 master 分支合并
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff feature-C
Merge made by the 'recursive' strategy.
README.md | 1 +
1 file changed, 1 insertion(+)
master
分支整合 feature-C 分支开发进展顺利
4.4 
推送远程仓库
Git
分散版本管理系统我们前面学习针对单一本地仓库操作
下面我们开始接触网络另一远程仓库远程仓库顾名思义我们本地仓库相对独立另一仓库
我们 GitHub 创建仓库设置本地仓库远程仓库
参考 3 3.2 GitHub 新建仓库防止其他仓库混淆仓库本地仓库保持一致 git-tutorial 。
创建不要勾选 Initialize this repository with a README 选项 4.8 )。
因为一旦勾选选项,GitHub 仓库自动生成 README 文件创建便本地仓库失去整合
虽然到时可以强制覆盖防止情况发生还是建议不要勾选选项直接点击 Create repository 创建仓库
4.8  不要勾选选项

● git remote add——
添加远程仓库
GitHub 创建仓库路径“git@github.com:用户名 git-tutorial.git”。
现在我们 git remote add命令设置成本仓库远程仓库 A 。
$ git remote add origin git@github.com:github-book/git-tutorial.git
按照上述格式执行 git remote add命令之后,Git 自动git@github.com:github-book/git-tutorial.git远程仓库名称设置 origin (标识)。
● git push——
推送远程仓库
推送 master 分支
如果当前分支本地仓库中的内容送给远程仓库需要git push命令现在假定我们 master 分支进行操作
$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (20/20), 1.60 KiB, done.
Total 20 (delta 3), reused 0 (delta 0)
To git@github.com:github-book/git-tutorial.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
这样执行 git push命令当前分支内容送给远程仓库origin master 分支
-u
参数可以推送同时 origin 仓库 master 分支设置本地仓库当前分支 upstream(上游)。
添加这个参数将来运行 git pull命令远程仓库获取内容本地仓库这个分支可以直接 origin master 分支获取内容省去另外添加参数麻烦
执行操作当前本地仓库 master 分支内容将会推送 GitHub 远程仓库
GitHub 可以确认远程 master 分支内容讲解使用用户名为 github-book ,读者根据自身环境予以替换

本地 master 分支相同
推送 master 以外分支
除了 master 分支之外远程仓库可以创建其他分支例子我们本地仓库创建 feature-D 分支同名形式 push 远程仓库
$ git checkout -b feature-D
Switched to a new branch 'feature-D'
我们本地仓库创建 feature-D 分支现在 push 远程仓库保持分支名称不变
$ git push -u origin feature-D
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:github-book/git-tutorial.git
* [new branch] feature-D -> feature-D
Branch feature-D set up to track remote branch feature-D from origin.
现在远程仓库 GitHub 页面可以看到 feature-D 分支
4.5 
远程仓库获取
我们 GitHub 新建仓库设置成了远程仓库这个仓库 push feature-D 分支
现在所有能够访问这个远程仓库可以获取 feature-D 分支加以修改
我们实际开发者角度出发另一目录新建本地仓库学习远程仓库获取内容相关操作
这就相当于我们刚刚执行 push 操作目标仓库有了另一开发者共同开发
● git clone——
获取远程仓库
获取远程仓库
首先我们其他目录 GitHub 仓库 clone 本地注意不要之前操作仓库同一目录
$ git clone git@github.com:github-book/git-tutorial.git
Cloning into 'git-tutorial'...
remote: Counting objects: 20, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 20 (delta 3), reused 20 (delta 3)
Receiving objects: 100% (20/20), done.
Resolving deltas: 100% (3/3), done.
$ cd git-tutorial
执行 git clone命令我们默认处于 master 分支同时系统自动 origin 设置远程仓库标识
也就是说当前本地仓库 master 分支 GitHub 远程仓库(origin )master 分支内容完全相同
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/feature-D
remotes/origin/master
我们 git branch -a命令查看当前分支相关信息添加 -a 参数可以同时显示本地仓库远程仓库分支信息
结果显示 remotes/origin/feature-D ,证明我们远程仓库已经有了 feature-D 分支
获取远程 feature- D 分支
我们试着 feature-D 分支获取本地仓库
$ git checkout -b feature-D origin/feature-D
Branch feature-D set up to track remote branch feature-D from origin.
Switched to a new branch 'feature-D'
-b
参数后面本地仓库新建分支名称为了便于理解我们名为 feature-D ,远程仓库对应分支保持同名
新建分支名称后面获取来源分支名称例子指定 origin/feature-D ,就是说名为 origin 仓库这里 GitHub 端的仓库 feature-D 分支来源本地仓库创建 feature-D 分支
本地 feature- D 分支提交更改
现在假定我们另一开发者提交 README.md 文件添加一行文字查看更改
$ git diff
diff --git a/README.md b/README.md
index af647fd..30378c9 100644
--- a/README.md
+++ b/README.md
@@ -3,3 +3,4 @@
- feature-A
- fix-B
- feature-C
+ - feature-D
按照之前方式提交即可
$ git commit -am "Add feature-D"
[feature-D ed9721e] Add feature-D
1 file changed, 1 insertion(+)
推送 feature- D 分支
现在推送 feature-D 分支
$ git push
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 281 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@github.com:github-book/git-tutorial.git
ca0f98b..ed9721e feature-D -> feature-D
远程仓库获取 feature-D 分支本地仓库提交更改feature-D 分支推送远程仓库通过一系列操作可以其他开发者相互合作共同培育 feature-D 分支实现某些功能
● git pull——
获取最新远程仓库分支
现在我们放下刚刚操作目录回到原先那个目录这边本地仓库创建 feature-D 分支没有 feature-D 分支进行任何提交
然而远程仓库 feature-D 分支已经有了我们刚刚推送提交
这时我们可以使用 git pull 命令本地 feature-D 分支更新最新状态当前分支 feature-D 分支
$ git pull origin feature-D
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1)
Unpacking objects: 100% (3/3), done.
From github.com:github-book/git-tutorial
* branch feature-D -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
Fast-forwarded feature-D to ed9721e686f8c588e55ec6b8071b669f411486b8.
GitHub
远程仓库中的 feature-D 分支最新状态所以本地仓库中的 feature-D 分支到了更新
今后需要平常一样本地进行提交 push 远程仓库可以其他开发者同时同一分支进行作业不断 feature-D 增加功能
如果同时修改同一部分源代码,push 容易发生冲突
所以开发者同一分支进行作业减少冲突情况发生建议频繁进行 push pull 操作
4.6 
帮助大家深入理解 Git 资料
至此为止阅读理解必需 Git 操作已经全部讲解完了
但是实际开发现场往往更加高级 Git 操作这里我们各位介绍一些参考资料能够帮助各位深入理解 Git 相关知识
● Pro Git
Pro Git
就职 GitHub 公司 Scott Chacon 执笔零基础 Git 学习资料基于知识共享 CC BY-NC-SA 3.0 许可协议各位
A http://git-scm.com/book/zh/v1
B https://github.com/schacon

免费阅读包括简体中文在内各国语言版本
● LearnGitBranching
LearnGitBranchingA
学习 Git 基本操作网站 4.9 )。注重结构学习方式非常适合初学者使用点击右下地球标志切换各种语言进行学习
4.9  LearnGitBranching(简体中文
● tryGit
通过 tryGitB 我们可以 Web 一边操作一边学习 Git 基本功能4.10 )。
可惜教程只有英文
A http://pcottle.github.io/learnGitBranching/
B http://try.github.io/

4.10  tryGit
4.7 
小结
理解必需 Git 操作进行讲解只要掌握知识足以应付日常开发中的大部分操作
遇到常用特殊操作各位读者查阅介绍参考资料确保操作正确

详细解说GitHub功能

GitHub
实现社会化编程提供多功能各位读者我们一起页面学习加深 GitHub 丰富功能理解
5.1 
键盘快捷键
GitHub 页面可以使用键盘快捷键熟悉键盘操作能够 GitHub 变得更加便捷
各个页面按下 shift +/ 可以打开键盘快捷键一览表 5.1 ), 查看当前页面快捷键如果想要感受更加快捷操作不妨亲自试一试
5.1  按下 shift + / 显示快捷键一览表

5.2 
工具栏
● 
关于 UI
工具栏常驻各个页面我们讲解相关知识
5.2 )。
5.2  工具栏

 1 LOGO
点击 GitHub LOGO 进入控制面板控制面板相关知识后面讲解
 2 Notifications
图标用于提示用户是否通知图标蓝色表示通知用户新建 Issue 、评论进行 Pull Request 都会收到通知
另外按照默认设置用户 GitHub 收到通知会同发送用户注册邮箱邮箱接收通知相关设置 Account settings 进行 A 。
 3
搜索窗口
这里输入用户代码片段可以搜索相关信息
 4 Explore
各个角度介绍 GitHub 热门软件
A https://github.com/settings/notifications

● GitHub
公司特别介绍软件开发者制作视频
A
语言筛选本日 / / 热门仓库 / 开发者
这里机会了解端的技术软件作为程序员可以上面找到许多灵感建议各位定期关注一下这里笔者经常借助语言筛选查询语言顶尖代码
 5 Gist
Gist
功能主要用于管理发布一些必要存在仓库中的代码比如小的代码片段笔者经常一些随便编写脚本代码 Gist
系统自动管理更新历史并且提供 Fork 功能另外通过 Gist 可以方便同事编写代码示例
Gist 添加代码示例可以嵌入博客当然如果选择语言自动添加语法高亮详细介绍参考附录 B 。
 6 Blog
GitHub 公司官方博客超链接,GitHub 公司上面发布通知
功能通知入职员工介绍、drinkup 聚会信息都会上面定期发布
 7 Help
GitHub
相关帮助虽然只有英文比较简单英文遇到地方不妨这里一下
 8
头像用户名
点击显示用户个人信息页面个人信息页面后面进行讲解
 9 Create a new...
创建 Git 仓库 Organization , Organization 添加成员小组仓库仓库添加 Issue collaborator 操作菜单聚集这里
显示内容根据当前页面不同改变
  Account settings
Account settings
图标螺丝刀锤子点击可以打开账户设置页面
这里可以进行个人信息安全管理付费方案设置各位使用 GitHub 务必浏览一遍
  Sign out
点击这个按钮可以退出 GitHub。
5.3 
控制面板
● 
关于 UI
现在各位讲解登录 GitHub 最先显示我们眼前控制面板
5.3 )。
5.3  控制面板

 ❶ News  Feed
显示当前 Follow 用户 Watch 项目活动信息用户可以这里查看最新动向右上 RSS 标志 URL 添加 RSS 阅读器可以通过 RSS 查看
 ❷ Pull  Requests
显示用户进行 Pull Request 。通过这里开发者可以方便追踪 Pull Request 后续情况
 ❸ Issues
这里可以查看用户拥有权限仓库配给自己 Issue 。用户同时进行多个项目可以这里一并查看 Issue 。
 ❹ Stars
列表形式显示用户添加 Star 仓库有些仓库需要经常查找不必 Watch 频繁显示详细信息可以这些仓库添加 Star ,方便自己随时找到它们
 ❺ Broadcast
主要用于接收 GitHub 公司通知使用技巧贴士
 ❻ Repositories you contribute to
显示用户贡献仓库贡献时间先后顺序排列
 ❼ Your  Repositories
更新时间顺序显示用户仓库钥匙图案是非公开仓库类似字母 Y 图案用户 Fork 仓库

5.4 
个人信息
访问 URL ,可以看到各位个人信息
https://github.com/
用户名
● 
关于 UI
我们 Chris Wanstrath 个人信息 5.4 )为例进行讲解
5.4  个人信息

 1
用户信息
这里显示注册用户基本信息包括姓名所属公司邮箱地址加入 Organization
如果用户感兴趣可以点击页面右上 Follow 按钮已经 Follow 用户显示 Unfollow )。
这样一来这个 GitHub 活动都会显示 News Feed
 2 Popular  Repositories
显示公开仓库受欢迎拥有大量 Star 部分热门仓库
 3 Repositories contributed to
时间先后顺序显示用户贡献部分仓库
用户可能这个仓库软件开发者可能只是通过发送 Pull Request 方式仓库某些贡献
 4 Public contributions
表示记录当日用户拥有读取权限仓库大致贡献
贡献衡量标准包括发送 Pull Request 次数 Issue 次数进行提交次数颜色代表贡献程序员绿色天数证明 GitHub 熟悉
 5 Contribution Activity
时间顺序显示具体贡献活动链接
 6 Repositories
显示用户公开仓库 5.5 )。Fork 仓库显示这里
仓库名称简要说明使用语言最终更新日期都会出现列表图案旁边数字表示这个仓库添加 Star 人数旁边 Fork
背景显示图标表示这个仓库更新频率横向为时右侧最新时间仓库更新频率

5.5  Repositories 标签页
 7 Public Activity
显示用户公开活动 5.6 )。活动就是这个用户什么比如仓库进行提交或者 Pull Request 大量公开信息都会记录这里
这里可以了解用户平常 GitHub 什么比如查看一下崇拜已久程序员公开活动可以知道现在关注什么或者正在热心开发什么
5.6  Public Activity 标签页

5.5 
仓库
仓库 URL 形式如下
https://github.com/
用户名/仓库
这个页面可以各个软件大门循着目录下去我们可以查阅自己想要文件如果相应权限可以文件内容直接进行编辑提交
● 
关于 UI
我们 5.7 为例进行说明特别重要项目后半部分重新详细讲解
 ❶
用户名组织)/ 仓库
左上图标旁边显示用户名仓库斜线左侧用户名使用 GitHub 组织账户一部分组织斜线右侧仓库
 ❷ Watch/Star/Fork
眼睛图标旁边 Watch 字样点击这个按钮可以 Watch 仓库今后仓库更新信息显示用户公开活动
Star
旁边数字表示这个仓库添加 Star 人数这个代表仓库关注
Watch
Star 有所不同,Watch 之后仓库相关信息在后Notifications 显示用户可以追踪仓库内容 Star 书签用户将来可以 Star 标记列表找到仓库
另外,Star 还是GitHub 判断仓库热门程度指标之一
旁边分叉图标 Fork 按钮后面数字代表仓库 Fork 用户仓库次数这个数字表示参与这个仓库开发
图灵社区会员 lxghost2 尊重版权

5.7  仓库页面

详解
10
11
WEB+DB PRESS Vol.69
详解GitHub 12
13
特辑专门设立网站
http://hirocaster.github.com/wdpress69/
需要合并 Pull Requst 解决 Git 冲突问题步骤
 ❸ Code
显示仓库中的文件列表仓库名下仓库简单说明URL 。
 ❹ Issue
用于 BUG 报告功能添加方向性讨论这些 Issue 形式进行管理。Pull Request 创建 Issue 。
旁边显示数字当前处于Open 状态 Issue
 ❺ Pull  Requests
Pull Requests 可以列表查看管理 Pull Request 。代码更改讨论可以这里进行
旁边显示数字表示尚未 Close Pull Request 数量
 ❻ Wiki
Wiki
一种 HTML 语法简单页面描述功能常用记录开发者之间应该共享信息软件文档数字表示当前 Wiki 页面数量
 ❼ Pulse
显示仓库最近活动信息仓库中的软件无人问津还是火热开发之中这里可以一目了然
 ❽ Graphs
图表形式显示仓库指标用户轻松了解仓库活动倾向
 ❾ Network
图表形式直观显示当前仓库状态 Fork 仓库状态
同时显示成员列表
 ❿ Settings
这里可以更改当前仓库设置用户必须拥有更改设置权限才能看到这个菜单
  SSH clone URL
clone
仓库所需 URL 。点击右侧剪贴板图标可以 URL 复制剪贴板点击 HTTPS 、SSH、Subversion 图标可以切换相应协议 URL 。
  Clone in Desktop
启动 GitHub 专用客户端应用程序进行 clone。GitHub 专用客户端应用程序 Windows Mac 详细情况参考附录 A 讲解

  Download ZIP
当前正在阅览分支中的文件 ZIP 形式打包下载这种方式Git clone 不同只是单纯文件下载本地所以无法通过 Git 查看
日志仓库进行更改如果只是使用仓库中的文件比较适合这种方式下载
 a commits
这里可以查看当前分支提交历史左侧数字表示提交
 b branches
可以查看仓库分支列表左侧数字表示当前拥有分支
 c releases
显示仓库标签(Tag )列表同时可以标签加入文件归档形式(ZIP 、tar.gz )下载本地软件版本升级一般都会标签如果需要特定版本文件可以这里寻找
 d contributors
显示仓库进行提交程序员名单如果仓库发送Pull Request 并且采纳那么这里找到自己名字左边数字程序员人数
 e Compare & review
可以查看当前显示分支其他分支差别以便进行审查点击这个按钮出现页面用户选择比较对象
 f branch
显示当前分支名称这里可以切换仓库分支查看其他分支文件
 g path
显示当前文件列表路径点击上级目录链接可以直接移动目录
 h Fork this project and Create a new file
可以当前仓库路径新建文件新建文件作为提交记录 Fork 分支
如果用户仓库拥有足够权限显示 Create a new file ,用户可以直接当前路径新建文件
 i files
可以查看当前分支文件顶端最新提交相关信息
文件目录列表左至右分别文件名称文件最新提交日志更新日期点击目录文件可以查看相应内容
如果当前目录包含 README 文件那么文件列表下方显示README 。一般而言,README 记录仓库软件说明使用方法以及许可协议信息务必加以阅读
● 
文件相关操作
文件显示文件内容同时右上显示用于文件菜单 5.8 )。Edit 可以文件内容进行编辑提交
Raw
可以直接浏览器显示文件内容使用这个 URL ,通过 HTTPS 协议获取文件。Blame 能够显示最新提交信息。History 可以查看文件历史记录。Delete 可以删除这个文件
5.8  文件相关操作菜单
文件内容左侧显示文件行号假如我们点击 10 行号一行高亮标记黄色同时URL末尾自动添加 “#L10”。使用这个 URL ,程序员交流可以讨论明确指向一行
另外如果“#L10”改成“#L10-15”,标记文件10~ 15 各位不妨下来以便日后应用

专栏通过部分名称搜索文件

各位不妨仓库页面试着按下键盘 t 然后输入目录文件部分名称筛选仓库目录文件进行筛选搜索文件 a )。
这种方式一级查看目录文件积极利用
a  搜索 yml
● 
查看差别
GitHub 直接修改 URL 可以用户多种形式查看差别
这里我们 Ruby on Rails 仓库 A 为例各位介绍直接修改 URL 一些技巧
查看分支差别
比如我们查看 4-0-stable 分支 3-2-stable 分支之间差别可以下面这样分支 URL
https://github.com/rails/rails/compare/4-0-stable...3-2-stable
这样可以查看分支差别 5.9 )。可以看到65程序员经过 1710 提交完成 3.2 版本 4.0 版本升级工作
A  https://github.com/rails/rails/

5.9  3-0-stable 4-0-stable 差别
查看几天差别
假如我们查看 master 分支最近 7 差别可以下面这样这样时间加入 URL 。
https://github.com/rails/rails/compare/master@{7.day.ago}...master
这样可以查看期间差别
● day
● week
● month
● year
指定期间可以使用以上时间单位如果差别不会列出所有提交显示最近一部分
查看指定日期之间差别
假设我们查看 master 分支 2013 1 1 现在区别可以日期加入 URL 。
https://github.com/rails/rails/compare/master@{2013-01-01}...master
这样便可以查看指定日期之间差别但是如果指定日期现在差别或者指定日期过于久远无法显示
由于可以多种角度查看差别所以 GitHub 称得上优秀源代码查看各位不妨记住直接修改 URL 查看别的方法遇到上述情况节省不少时间
5.6 Issue
软件开发过程开发者为了跟踪 BUG 进行软件相关讨论进而方便管理创建 Issue 。
管理 Issue 系统称为 BTS (Bug Tracking System ,BUG 跟踪系统)。当今具有代表性 BTS RedmineA 、TracB 、 BugzillaC
GitHub
自身加入 BTS 功能 GitHub 可以作为
A http://www.redmine.org/
B http://trac.edgewall.org/
C http://www.bugzilla.org/

软件开发者之间交流工具多多加以利用遇到下面情况各位可以使用这个功能
发现软件 BUG 报告
有事作者询问探讨
事先列出今后准备实施任务
Issue
BUG 管理之外还有许多其他用途软件开发者圈子 Issue 用于多种用途情况已经司空见惯作为 GitHub 功能之一想必今后自然而然所以借此机会我们共同学习 Issue 一些简单用法
● 
简洁表现力丰富描述方法
GitHub
Issue 评论可以使用 GFMA 语法进行描述从而获得丰富表现力比如 5.10 那样描述然后点击 Preview ,可以看到 5.11 那种标记效果
5.10  Markdown 语法示例
A https://help.github.com/articles/github-flavored-markdown

5.11  Markdown 语法效果预览
文本框旁边可以找到 GFM 语法相关帮助链接 5.12 )。
5.12  Markdown 语法链接
语法高亮
假设我们下面这样指定语言描述代码
````ruby
def hello_world
puts 'Hello World!'
end
````
这样一来代码 5.13 添加语法高亮 A ,变得直观易读
A 
代码关键字变色改变字体从而提高可读性
5.13  添加语法高亮代码
添加图片
添加图片十分简单图片拖曳文本框便可以粘贴图片选择 5.14 中的链接弹出对话框这里可以完成同样操作。GitHub 网站相关内容详细讲解各位不妨参考一下 A 。
5.14  添加图片链接
● 
添加标签以便整理
Issue
可以通过添加标签(Label )进行整理添加标签,Issue 左侧显示标签 5.15 )。点击页面左侧标签可以显示标签 Issue 。
标签可以自由创建可以 5.15 那样语言技术分类可以按照 BUG 、任务作业类型分类各位可以按照需要选择便于整理标签
建议其实 Issue 比较情况不必添加标签 Issue 积攒一定数量只有进行筛选才能清晰把握添加标签
A https://help.github.com/articles/issue-attachments

5.15  添加标签 Issue
● 
添加里程碑以便管理
标签可以通过添加里程碑管理 Issue 。通过 5.16 可以看出项目距离下一个版本(3.0.0 还有 6 Issue 需要实施整体 96% 已经实施完毕 Close。这里链接我们可以查看剩余Issue 。
设置里程碑可以 Issue 管理任务
5.16  version 3.0.0 里程碑

专栏了解贡献规则

描述 Issue 常常看到 a这种贡献规范链接
仓库目录添加 CONTRIBUTING.md 文件链接显示出来 a 。
Issue 、Pull…
Request
规则要求许可证相关信息为了开源项目开发与其他人和谐相处务必贡献之前仔细阅读这些规范
a  规范链接
a https://github.com/blog/1184-contributing-guidelines
● Tasklist
语法
我们可以使用 GFM 独有功能就是 Tasklist 语法 A 。首先试着按下面的格式进行描述
#
本月任务
- [ ]
完成图片
- [x]
完成部署工具设置
- [ ]
实现抽签功能
这样一来文字标记列表样式 5.17 )。这个列表可以直接勾选或者取消不必打开 Issue 编辑页面重新编辑十分方便建议各位记住这个功能
A  https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments

5.17  Tasklist 语法
本月任务
完成图片
完成部署工具设置
实现抽签功能
● 
通过提交信息操作 Issue
GitHub 只要按照特定格式描述提交信息可以一般BTS 有的功能那样 Issue 进行操作
相关 Issue 显示提交
Issue 一览表我们可以看到 Issue 标题下面分配诸如“#24”编号只要提交信息描述加入“#24”,可以 5.18 Issue 显示提交相关信息使关联提交一目了然这里轻轻点击一下便可以显示相应提交具体内容代码审查省去大量提交日志搜索相应提交麻烦非常方便
5.18  提交信息
 Close  Issue
如果处于 Open 状态 Issue 已经处理完毕只要提交以下任意一种格式描述提交信息对应 Issue Close。
● fix #24
● fixes #24
● fixed #24
● close #24
● closes #24
● closed #24
● resolve #24
● resolves #24
● resolved #24
利用这个方法每次提交 push 之后不必大费周章GitHub Issue 寻找相应 Issue 手动 Close ,省去不少麻烦
这样只要按照特定格式描述提交信息,GitHub 自动识别处理使用 GitHub 变得更加轻松目前 GitHub 之外 BTS实现功能记住绝对有利
● 
特定 Issue 转换 Pull  Request
GitHub 如果 Issue 添加源代码变成我们马上讲到 Pull Request 。Issue Pull Request 编号相互通用通过 GitHub API 可以特定 Issue 转换 Pull Request ,能够完成操作 hub 命令 8.1 讲解这里各位只要记住 Issue Pull Request 编号通用即可
5.7 Pull Request
Pull Request
用户修改代码对方仓库发送采纳请求功能 GitHub 核心功能 5.19 )。因为有了这个功能众多开发者轻松加入开源开发队伍
Pull Request 页面能够列表查看当前处于 Open 状态 Pull Request 。通过点击页面上部选项可以进行筛选重新排列
列表中点特定 Pull Request 进入详细页面 5.20 )。页面上方显示哪个分支哪个分支发送 Pull Request 。下面我们各个标签(Tag )进行讲解

5.19  Pull  Request 一览
5.20  Pull  Request 详细页面
·
含有数字 7 显示 GitHub 已经实现审查
缩进好像
没有关于实现测试代码添加

专栏获取 diff 格式 patch 格式文件

长期投身软件开发有时可能希望 diff 格式文件 patch 格式文件形式处理 Pull… Request。
例子假设 Pull… Request URL 如下
     https://github.com/
用户名/仓库/pull/28
如果获取 diff 格式文件只要下面这样 URL 末尾添加 .diff 即可
     https://github.com/
用户名/仓库/pull/28.diff
同理想要 patch 格式文件需要 URL 末尾添加 .patch 即可
     https://github.com/
用户名/仓库/pull/28.patch
想要 diff 格式 patch 格式文件各位按照上述方法进行操作
● Conversation
Conversation 标签页可以查看当前 Pull Request 相关所有评论以及提交历史记录人们这里添加评论互相探讨发送提交落实讨论内容整个过程时间顺序列出用户查看各位查看过程如果自己想法不妨积极添加评论参与探讨
提交日志右侧提交哈希点击链接即可确认相应提交详细信息
专栏引用评论

Conversation 人们通过添加评论进行对话这里简单方法可以引用个人评论选中引用评论然后 R 选择部分自动评论语法评论文本框
a)。
这样一来可以轻松便捷引用评论快捷键 Issue 同样有效
a  R 引用选中部分
引用评论方法 #2 引用这里评论
只要选中 R 便自动引用形式添加评论
选中 R
>
只要选中 R 便自动引用形式添加评论
●  Commits
Commits 标签页时间顺序列表显示当前 Pull Request 相关提交 5.21 )。标签数字提交次数提交右侧哈希可以连接提交代码
5.21  Pull  Request 提交一览

专栏评论应用表情

GitHub
文化使用表情习惯表情种类繁多一次下来十分困难这时我们可以利用表情自动功能 a 。
评论输入“:”(冒号便启动表情自动功能只要输入几个表情相关字母系统筛选自动对象 a )。选择想要表情相应代码前后冒号字符串便插入文本框
准确表达感情可以交流变得和谐各位记得利用。…
a  自动“ra”开头表情
a 登录 http://www.emoji-cheat-sheet.com/ 查找使用表情
●   Files Changed
Files Changed
标签页可以查看当前 Pull Request 更改文件内容以及前后差别标签数字表示新建更改文件
默认情况系统空格不同高亮显示所以空格改动情况难以阅读这时只要 URL 末尾添加“?w=1”可以显示空格差别
鼠标指针更改行号左侧我们看到加号点击这个加号可以代码插入评论 5.22 )。这样评论针对代码一目了然
这个插入评论功能针对代码讨论变得十分顺畅特别协作软件开发这个功能更加不可或缺

5.22  内容进行评论
5.8 Wiki
Wiki
使用简单语法编写文档功能 5.23 )。所有权限可以文章进行修改所以比较适合共同编写文章情况创建编辑文档不必另外启动软件起来十分方便非常适合用来针对更新频率软件进行文档信息方面汇总
Issue Pull Request 相同,Wiki 支持 GFM 语法所以可以轻松创建表现力丰富文档点击页面右上 New Page 按钮便可以创建 Wiki
Wiki
功能本身数据 Git 进行管理点击 Clone URL 按钮可以当前 Wiki Git 仓库 URL 复制剪贴板用户能够通过 clone 操作获取 Wiki 仓库然后本地创建编辑页面进行提交 push ,
便可以完成 Wiki 创建编辑工作
5.23  Wiki 应用实例
●   Pages
Pages 标签页可以列表查看 Wiki 页面 5.24 )。
5.24  Wiki 页面一览
● History
History 标签页可以查看 Wiki 修改历史记录 5.25 )。
由于 Wiki 功能历史记录所以软件开发可以放心投入工作 Wiki 仓库 clone 本地可以借助浏览器直接自己熟悉编辑器进行编辑十分人性化
一般情况,Wiki 记载软件相关 FAQ 、文档代码示例解说信息各位使用 GitHub 开发软件建议查看一遍Wiki 。
5.25  Wiki 历史记录一览
专栏 Wiki 显示侧边栏

所有 Wiki 页面可以显示侧边栏做法简单只要创建
名为“_sidebar”页面即可。_sidebar 不会显示 Pages 页面一览编辑页面页面附加 Sidebar a),
用户可以这里编辑侧边栏内容
a  编辑侧边栏内容
侧边栏 1
侧边栏 2
侧边栏 3
编辑侧边栏
5.9 Pulse
Pulse
体现仓库软件开发活跃功能 5.26 )。近期仓库创建多少 Pull Request Issue ,多少参与这个仓库开发可以这里一目了然
5.26  Pulse 页面

根据这个页面用户可以判断目前这个软件是否正在积极开发或者持有仓库修改权限是否认真进行 BUG 修正维护工作
挑选 GitHub 开发软件可以作为重要衡量标准
下面我们详细讲解一下这个功能
● active pull requests
页面 Overview 部分显示特定期间活动 Pull Request 5.26 25 Pull Request ,其中 20 采纳其余5 仍然保持 Open 状态剩余 5 Pull Request 将来要么采纳要么 Close。
如果查看清单详细内容只要点击对应即可 5.27 )。Pull Request 概要链接按照合并先后顺序排列
5.27  合并 Pull  Request 概要链接
点击 proposed-pull-request 可以创建先后顺序查看 Pull Request 概要链接
通过这些信息用户可以了解软件最近正在开发哪些功能如果发现对方正在进行功能扩展或者修正不妨积极试用一下这个功能或许成为加入开源软件开发契机
● active issue
页面 Overview 部分显示特定期间活动 Issue
5.26 110 Issue , 其中 96 Close , 其余 14 处于 Open 状态
如果查看清单详细内容只要点击对应即可。Issue 概要链接按照 Close 先后顺序排列
点击 new issue 可以创建先后顺序查看 Issue 概要链接
通过观察 Issue 整体动向用户能够知道这个软件是否有人积极维护支持对方仓库活跃用户发送 BUG 报告相关探讨可能收到回应
● commits
Overview
下方显示提交相关信息左侧部分包含如下信息
编写代码人数
提交次数
● default branch
修改文件
● default branch
添加
● default branch
删除
通过这些信息用户可以大致把握仓库活跃开发者人数
另外右侧图表显示这些开发者具体发送提交通过图表我们可以了解哪些开发者格外积极仓库发送提交
● Releases published
提交相关信息下方显示“5 Releases published”之类字样版本发布相关信息发布版本下载链接按照发布时间先后顺序一一列出
通过这里我们可以了解软件版本升级频率
● Unresolved Conversations
最后我们讲解显示“4 Unresolved Conversations”这个部分
这里列出 Issue Pull Request 创建 Period 指定时间之前它们尚未 Close 并且有人参与评论一般情况仓库软件重大事项讨论都会持续时间所以这些讨论大多这里其中不少关于软件今后发展方向讨论如果各位哪些比较关心软件不妨关注一下部分讨论内容
5.10 Graphs
Graphs 可以通过 4 图表查看仓库相关统计信息5.28 )。利用图表直观汇总信息可以用户把握当前仓库各种趋势下面我们了解一下图表包含信息
5.28  Graphs
● Contributors
Contributors 图表我们可以看到用户相应日期发送提交添加代码删除代码大致数量 5.29 )。这里我们能够了解仓库代码主要哪些编写而且可以通过图表分析软件大幅修改阶段稳定维护阶段相应时期
5.29  Contributors
另外这些图表统计包括发送 Pull Request 采纳产生代码增减
● Commit Activity
Commit Activity
显示年内(52 每周收到提交大致数量 5.30 )。第二可以查看相应每天提交数量判断仓库是否有人积极更新部分重要指标
● Code  Frequency
Code Frequency
显示仓库代码增加删除5.31 )。优秀软件并不一味增加代码经过重构之后代码往往降低通过我们可以直观把握相应信息
5.30  Commit Activity
5.31  Code  Frequency
● Punchcard
Punchcard 我们可以直观掌握一周每天何时收到提交最多 5.32 )。黑色表示提交频繁
5.32  punchcard
仓库关键人物往往出现提交频率时间因此用户发送 Pull Request 有可能时间处理大致了解时间规律有助于各位把握发送 Pull Request 以及等待回复时间点另外软件开发集中早上还是晚上一目了然
5.11 Network
图表形式显示包括克隆仓库在内所有分支提交 5.33 )。 可以直观看出每个人多少工作
鼠标指针停留提交合并可以查看相应参考内容
5.33  所有分支图表
5.12 Settings
这里可以仓库进行任何设置用户必须拥有更改设置权限才能看到这个页面
● Options
Options 可以变更仓库本身相关设置 5.34 )。
 ❶ Settings
这里可以修改仓库名称设置显示仓库 URL 默认显示分支
这个默认分支同时创建 Pull Request 默认如果各位分支不是 master 分支建议更改设置
5.34  Settings Options 页面
 ❷ Features
这里可以更改 Wiki Issue 相关设置如果关闭某些功能只要取消勾选相应复选框功能菜单移除无法使用

 ❸ GitHub  Pages
GitHub
名为 GitHub Pages 仓库用户可以利用仓库中的资料创建 Web 用来发布仓库软件相关信息如果已经创建GitHub Pages ,显示相应URL 。点击 Automatic Page Generator 可以自动创建 GitHub Pages。
 ❹ Danger Zone
这里一些需要格外留意设置这里用户可以仓库改为私有或是变更仓库所有者甚至删除仓库本身这些设置有可能影响其他变更一定要谨慎
● Collaborators
用户主要这里设置仓库访问权限如果仓库属于个人账户那么可以 5.35 那样添加 GitHub 用户名赋予用户直接读写仓库权限
5.35  个人账户 Collaborators 页面
不过如果仓库属于 Organization 账户需要 5.36 那样创建 Team ,然后赋予 Team 读写仓库权限
这样使用 Organization 账户可以高效设置仓库权限公司共同进行开发组织建议使用 Organization 账户
5.36  Organization 账户 Collaborators 页面
● Webhooks & Services
这个页面用户可以添加 Hook GitHub 仓库其他服务集成通过 Add webhook 可以添加用户自己 webhook 。通过 Configure services 可以 GitHub 事先列出可以集成服务进行选择 GitHub 集成服务非常多其中包括邮件 IRC 社交服务建议各位不要错过这个设置如此大量服务当中相信各位找到自己正在使用工具
● Deploy Keys
这个页面用户可以添加用于部署公开密钥允许只读方式访问仓库设置公开密钥用户可以使用私有密钥通过 ssh 协议 clone 仓库注意这里添加公开密钥 ·私有密钥无法添加其他仓库使用 Deploy Keys 功能需要仓库赋予不同密钥
5.13 Notifications
页面左上 LOGO 旁边蓝色亮点就是 Notifications 。点击我们可以看到 GitHub 所有活动通知 5.37 )。 灵活运用这个 Notifications ,可以大幅提高合作开发效率
5.37  Notifications 页面
每当创建 Issue 、收到评论创建 Pull Request 情况发生我们 Notifications 收到通知
页面左侧 Notifications 筛选可以分别查看自己相关通知或者仓库分类查看通知
点击仓库右侧可以仓库所有 Notifications 设置状态
点击通知右侧扩音器图标那么即使今后这个通知相关内容收到追加评论不会通知用户点击通知右侧可以相应 Notifications 设置状态当然点击 Notifications 阅读详细内容通知自动转换状态
如果 LOGO 蓝色亮点发光状态表示 Notifications ,养成及时查看习惯处理通知开发者之间协同工作效率
5.14 
其他功能
GitHub
提供其他许多功能我们这里介绍其中一部分
● GitHub  Pages
GitHub Pages
主要用于 GitHub 托管静态 HTML ,以便发布项目Web A 。
由于可以绑定独立域名人们经常利用结合这个功能 Octopress B 框架搭建博客有兴趣读者不妨试一试
● GitHub Jobs
GitHub Jobs
面向全世界招聘程序员职位公告 C 。
450
美元可以发布 30 招聘公告希望世界范围招聘优秀程序员公司不妨尝试一下这个功能
想到海外就职程序员可以看一看这里
●  GitHub  Enterprise
GitHub Enterprise
那些无法码放公司之外企业设计
服务可以虚拟机形式提供 GitHub。申请可以试用 45 所以企业内部探讨是否导入可以实际使用一下决定
导入阻碍其实成本服务主要面向 20 以上组织如果规模不足建议还是使用普通 GitHub。详细内容参照 GitHub Enterprise 页面 D 。
考虑实体运行成本维护成本除非规模相当企业
A https://pages.github.com/
B http://octopress.org/
C https://jobs.github.com/
D https://enterprise.github.com/pricing

否则还是建议使用 GitHub Enterprise。
● GitHub API
GitHub
面向开发者公开 API 。特别开发面向程序员 Web 服务 GitHub 集成绝对有利详细内容参照官方网站 A 。
5.15 
小结
我们结合 GitHub 实际操作页面各位讲解 GitHub 提供功能其中某些功能细节可能经常使用 GitHub 并不完全清楚
GitHub 与其他人共同进行软件开发如果发现搭档功能不够熟悉不妨按照中的介绍讲解
专栏 Mac 通知中心查看 GitHub Notifications

OS… X…
10.8… Mountain… Lion 版本开始添加通知中心功能功能用于简单汇总显示应用程序警告
GitHub
Mac 准备专用客户端软件 a 。利用这个软件用户可以通过 GUI 完成仓库简单操作不仅如此只要这个软件运行,GitHub Notifications 收到内容同时显示通知心中 a )。
GitHub
客户端部署版本 GitHub… Enterprise 支持功能只要同一客户端的设置页面 b )进行设置通知中心能够同时接收 GitHub.com GitHub… Enterprise 双方通知
日常使用 GitHub 各位务必
a https://mac.github.com/
A https://developer.github.com/

a  通知中心接收 GitHub 通知
b  GitHub Enterprise 设置

尝试Pull Request

按部就班创建 GitHub 账号公开自己源代码不是什么
不过刚刚接触 GitHub 往往不会使用 Pull Request 功能
Pull Request
社会化编程象征。GitHub 创造功能可以开源开发世界带来革命不会这个功能等于不会GitHub。
不过掌握 Pull Request 难度确实刚刚接触 GitHub 发送 Pull Request 往往遇到找不到对方项目或者知道如何发送问题
所以各位创造亲自动手发送 Pull Request 机会各位不要错过
6.1 Pull Request
概要
● 
什么 Pull  Request
首先我们理解什么 Pull RequestA 。Pull Request 自己修改源代码请求对方仓库采纳修改采取一种行为
● Pull  Request
流程
下面看看具体例子现在假设我们使用 GitHub 开源软件
使用软件过程我们偶然发现 BUG 。为了继续使用软件我们手动修复这个 BUG 。如果我们修改代码软件开发仓库采纳今后我们同样使用软件不会遇到这个 BUG 。为此我们第一时间发送 Pull Request 。
GitHub 发送 Pull Request 接收仓库创建附带源代码 Issue ,我们这个 Issue 记录详细内容就是 Pull Request 。
A Pull Request
网络常常称为 PR 。

发送过去 Pull Request 是否采纳接收仓库管理进行判断一般只要代码没有问题对方都会采纳如果问题我们收到评论
只要 Pull Request 顺利采纳我们成为这个项目 Contributor (贡献者),我们编写代码全世界使用正是社会化编程开源开发乐趣
我们专门网站各位可以进行修改尝试发送 Pull Request 。
6.2 
发送 Pull Request 准备
整体概念 6.1
6.1  Pull  Request 概念
GitHub
ituring/
用户名 /
first-pr first-pr
Fork
git git
Pull Request
push pull
各位读者
git
work gh-pages
创建特性分支

● 
查看修正源代码
登录我们各位准备网站 A 。网站源代码已经 GitHub 公开 B 。各位自己感想源代码然后发送 Pull Request 。
这个网站通过 GitHub GitHub Pages 功能发布。GitHub Pages 网站源代码位于仓库 gh-pages 分支访问仓库页面我们可以看到源代码
记述感想需要修改 index.html 文件各位不妨查看源代码内容印象
● Fork
各位访问仓库页面点击 Fork 按钮创建自己仓库 6.2 )。
新建仓库名为自己账户 /first-pr”。这里我们名为 hirocastest 。
6.2  Fork 按钮
● clone
clone
仓库所需访问信息显示右侧中央部分我们复制下来这个仓库 clone 当前开发环境
$ git clone git@github.com:hirocastest/first-pr.git
Cloning into 'first-pr'...
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 14 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (14/14), 24.05 KiB, done.
Resolving deltas: 100% (2/2), done.
$ cd first-pr
A https://ituring.github.io/first-pr/
B https://github.com/ituring/first-pr

first-pr
目录生成Git 仓库这个仓库我们 GitHub 账户 first-pr 仓库状态相同现在只要这个仓库修改源代码进行 push ,
GitHub
账户中的仓库修改
● branch
为何特性分支进行作业
当前 Git 主流开发模式都会使用特性分支关于特性分支详细知识我们已经 4 讲解
各位养成创建特性分支修改代码习惯 GitHub 发送 Pull Request 一般发送特性分支这样一来,Pull Request 拥有明确特性主题)。对方了解自己修改代码意图有助于提高代码审查效率
确认分支
我们查看一下 clone 仓库分支
$ git branch -a
* gh-pages ←
当前分支
remotes/origin/HEAD -> origin/gh-pages
remotes/origin/gh-pages
开头“remotes/origin/” GitHub 仓库分支我们手头开发环境只有 gh-pages 分支
网站显示 HTML 位于 /origin/gh-pages 分支虽然通常情况最新代码位于 master 分支由于我们使用 GitHub Pages ,所以最新代码位于 gh-pages 分支
创建特性分支
我们创建名为 work 分支用来发送 Pull Request 。这个 work 分支就是特性分支现在创建 work 分支自动切换
$ git checkout -b work gh-pages
Switched to a new branch 'work'
确认是否切换到了 work 分支
$ git branch -a
gh-pages
* work ←
当前分支
remotes/origin/HEAD -> origin/gh-pages
remotes/origin/gh-pages
查看文件列表我们可以看到网站显示 index.html 文件
$ ls
README.md index.html params.json
images javascripts stylesheets
可以浏览器打开确认显示
● 
添加代码
编辑器打开 index.html 文件 HTML 形式添加感想
省略
<p>
对本内容实践描述对本感想发送Pull Request。</p>
追加
<p class="impression">
有趣。(@HIROCASTER )</p>
省略
自由添加感想 p 标签(Tag )然后关闭编辑器
● 
提交修改
git diff命令查看修改是否已经正确进行
$ git diff
diff --git a/index.html b/index.html
index f2034b3..91b8ecb 100644
--- a/index.html
+++ b/index.html
@@ -39,6 +39,8 @@
<p>
对本内容实践描述对本感想发送Pull Request。</p>
+<p class="impression">
有趣。(@HIROCASTER )</p>
+
省略
然后浏览器打开查看显示是否正确然后确认添加代码提交本地仓库
$ git add index.html
$ git commit -m "Add my impression"
[work 243f28d] Add my impression
1 file changed, 2 insertions(+)
● 
创建远程分支
GitHub 发送 Pull Request ,GitHub 端的仓库必须包含修改代码分支我们现在创建本地 work 分支相应远程分支
$ git push origin work
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 353 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
To git@github.com:hirocastest/first-pr.git
* [new branch] work -> work
查看分支,/origin/work 创建
$ git branch -a
master
* work
remotes/origin/HEAD -> origin/master
remotes/origin/gh-pages
remotes/origin/work ←
创建
打开 GitHub 用户名 /first-pr”确认 work 分支是否
以及是否包含我们添加代码
6.3 
发送 Pull Request
参考 6.3 ,登录 GitHub 切换 work 分支点击分支左侧绿色按钮跳转查看分支别的页面 6.4 )。这里通过差别查看刚刚进行更改是否正确这里显示东西就是我们 Pull Request 包含提交
6.3  切换分支
6.4  查看分支别的页面
确认想要发送 Pull Request 内容差别无误点击 Create Pull Request 。随后显示表单用于填写请求对方采纳评论 6.5 )。现在我们评论简明扼要描述进行 Pull Request 理由
6.5  填写请求对方采纳评论
确认没有问题点击 Send pull request 按钮这样一来,Pull Request 目标仓库新建 Pull Request Issue ,同时仓库管理接到通知
至此恭喜各位顺利发送第一次 Pull Request 。现在我们发送源代码没有采纳对方仓库不会任何变化所以网页仍然原样
如果查看发送 Pull Request 状态可以登录 GitHub ,打开自己控制面板查看 Pull Request 标签页点击自己发送 Pull Request 进入 6.6 页面管理 Pull Request 评论这里这些 Conversation 标签页按照时间顺序排列显示只要代码没有问题
我们 Pull Request 采纳 A 。
A 
出现示例仓库现阶段主要译者志愿者包括尝试 Pull Request 各位读者进行维护但是出版随着时间推移可能发生反应 甚至没有反应情况烦请参照 7 内容以及关于示例仓库讲解一同努力维护

6.6  Pull  Request
添加感想
感谢 Pull… Request 进行实践
6.4 
Pull Request 更加有效方法
下面各位介绍开发现场如何有效运用 Pull Request 。
● 
开发过程发送 Pull  Request 进行讨论
软件设计实现过程如果发起讨论,Pull Request 非常契机我们虽然可以示例一样代码完成发送 Pull Request ,实际开发过程这样可能导致功能完成收到设计实现方面指正从而使代码需要大幅更改重新实现
GitHub 我们可以尽早创建 Pull Request ,审查获得反馈大家设计实现方面思路一致借此逐渐提高代码质量这个方法团队开发大型项目尤其有效 GitHub 运用实际开发中的团队务必试一试
这个方法执行起来简单只要发起讨论发送 Pull Request 即可不必代码最终完成即便功能开发之中只要 Pull Request 附带简单代码大家大体印象获取不少反馈
如果 Pull Request 加入直观易懂 Tasklist (参照5 “Tasklist 语法”),清楚反映哪些功能已经实现将来哪些工作不但加快审查工作效率作为自己备忘录使用
反馈我们不但获得自己提议功能支持相关改善意见有时指出自己注意失误或者准备编写代码其他成员重复这样一来我们最终完成代码质量一定原先高出许多
发送 Pull Request 分支添加提交提交自动添加发送 Pull Request
方法要求尽早发送 Pull Request ,效果明显另外还有记住就是千万不要 Pull Request 添加无关修改处理主题无关作业另外创建分支不然原本清晰讨论变得一团糟
● 
明确正在开发过程
防止开发一半 Pull Request 合并一般都会 6.7 那样标题加上“ [WIP]”字样。WIP Work In Progress 简写表示开发过程所有功能实现之后消去这个前缀
6.7  标明开发中的 Pull  Request
添加用户管理功能
…… 
添加
…… 
编辑
…… 
删除
作业正在进行
这种代码讨论开发开发流程以往完成之后审查反馈流程高效这个方法已经应用众多软件开发现场通过方法开发者可以体验 GitHub 有的速度各位
务必加以实践
● 
进行 Fork 直接分支发送 Pull  Request
这个方法值得 GitHub 进行开发团队借鉴
一般说来 GitHub 修改对方代码需要仓库 Fork
本地然后修改代码发送 Pull Request 。但是如果用户仓库
编辑权限可以直接创建分支分支发送 Pull Request 。利用
团队开发不妨成员赋予编辑权限 Fork 仓库
这样成员需要可以创建自己分支然后直接 master
分支发送 Pull Request 。
其实方法已经 GitHub 实际运用开发之中 A 。关于
流程具体内容 9 详细说明
6.5 
仓库维护
Fork
clone 仓库一旦放置不管最新源代码越来越
如果最新源代码基础进行开发劳神费力编写代码
可能白费力气下面我们学习如何仓库保持最新状态
通常 clone 仓库实际上仓库没有任何关系所以
需要仓库设置远程仓库仓库获取(fetch )数据本地
进行合并(merge ),本地仓库源代码保持最新状态6.8 )。
A https://github.com/blog/1124-how-we-ues-pull-requests-to-build-github
图灵社区会员 lxghost2 尊重版权
----------------------- Page 156-----------------------
6.5 
仓库维护  129
6.8  仓库更新最新状态
GitHub
用户名 / octocat/
Spoon- Knife Spoon- Knife
Fork
origin upstream
clone fetch
master upstream/
开发者 master
merge
● 
仓库 Fork clone
octocat/Spoon-Knife 作为仓库 GitHub 进行 Fork ,然后
clone。
$ git clone git@github.com:hirocastest/Spoon-Knife.git
Cloning into 'Spoon-Knife'...
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 24 (delta 7), reused 17 (delta 1)
Receiving objects: 100% (24/24), 74.36 KiB | 68 KiB/s, done.
Resolving deltas: 100% (7/7), done.
$ cd Spoon-Knife
● 
仓库设置名称
我们仓库设置 upstream 名称作为远程仓库
$ git remote add upstream git://github.com/octocat/Spoon-Knife.git
图灵社区会员 lxghost2 尊重版权
----------------------- Page 157-----------------------
130  
6  尝试 Pull…Request
今后我们这个仓库 upstream 作为仓库标识这个
需要设定一次
● 
获取最新数据
下面我们远程仓库实际获取(fetch )最新源代码自己仓库
分支进行合并仓库维持最新状态需要重复工作即可
$ git fetch upstream
From git://github.com/octocat/Spoon-Knife
* [new branch] master -> upstream/master
$ git merge upstream/master
Already up-to-date.
我们通过 git fetch 命令获取最新数据 upstream/master
当前分支(master )合并虽然示例没有可以合并内容
操作确实可以最新源代码合并当前分支
这样一来当前分支(master )获得最新源代码各位
特性分支编辑源代码之前建议仓库更新状态一般
master 分支都会获取最新代码需要 Fork 开发者亲自进行
修正
6.6 
小结
我们简单学习 Pull Request 发送方法想必各位已经
发送 Pull Request 不单代码需要进行其他工作
实际开发现场,Pull Request 多少都会传统习惯规范有些
但是诸多团队实践表明 Pull Request 确实显著效果
投身开源开发程序员应当尽早适应设计
笔者认为这种标准设计规范采取总之试试看
往往可以现场带来活力促进成员成长开发带来速度
各位积极尝试
图灵社区会员 lxghost2 尊重版权
----------------------- Page 158-----------------------
7
接收Pull Request
图灵社区会员 lxghost2 尊重版权
----------------------- Page 159-----------------------
132  
7  接收 Pull… Request
发送 Pull Request 接收 Pull Request
下面我们学习接收 Pull Request 相关知识不时之需
7.1 
采纳 Pull Request 方法
收到 Pull Request 7.1 仓库 Pull Request
标签页显示别人发送过来 Pull Request 一览表现在我们点击
Pull Request
查看详细内容
7.1  收到 Pull  Request
修正未能通过测试
升级 gem。
详细页面我们发送 Pull Request 页面大致相同点击 Merge
pull request
按钮 7.2 ),Pull Request 内容便自动合并仓库
采纳之前尽量收到 Pull Request 拿到本地开发环境进行
确认是否能够正常运行以及代码是否安全或者将要 8
介绍 Jenkins 持续集成工具进行自动测试保证代码破坏原有
功能之后合并仓库
7.2  Merge pull request 按钮
这里我们各位讲解本地开发环境检查收到 Pull Request
流程
图灵社区会员 lxghost2 尊重版权
----------------------- Page 160-----------------------
7.2 
采纳 Pull… Request 准备  133
7.2 
采纳 Pull Request 准备
确认 Pull Request 代码是否运行正常各位代码
审查心思。GitHub 可以快速高效审查代码下面我们
介绍这些功能
学会使用各种各样功能进行代码审查以往使用工具审查
轻松如果团队所有养成时常审查自己代码习惯叠加
效果不可估量
● 
代码审查
7.3 GitHub 可以 Pull Request 具体代码
进行评论代码审查变得十分高效
7.3  代码进行评论
对本内容实践描述对本感想发送 Pull… Request。
有趣
感谢购买阅读
早就知道 Github 这个东西从没积极周围怎么
咨询
 ※
左侧数字提交修改行号右侧修改行号
Notifications , Pull
Request
发送还是接收迅速反馈由于 GitHub 便捷
审查简易离开 GitHub 之后工作倍感压力
混迹开源世界程序员大多习惯使用 GitHub ,所以如果
图灵社区会员 lxghost2 尊重版权
----------------------- Page 161-----------------------
134  
7  接收 Pull… Request
GitHub
应用工作可以适应公司独有开发环境带来压力
公司导入 GitHub 优势所在
● 
查看图片差别
GitHub 不但可以查看代码差别还有多种方法用户查看
图片差别这些内容官方博客 A 详细讲解我们在此
介绍各位
官方博客已经介绍用于演示仓库 B ,所以各位实际操作一下
发现这个功能多么强大 C 。各位可以通过提交日志 Image
View Mode Demo
体验操作
 2-up
2-up

7.4 )。
7.4  2-up
A https://github.com/blog/817-behold-image-view-modes
B https://github.com/cameronmcefee/Image-Diff-View-Modes
C 
图片就是通过演示仓库制作
图灵社区会员 lxghost2 尊重版权
----------------------- Page 162-----------------------
7.2 
采纳 Pull… Request 准备  135
 Swipe
Swipe
可以分界线左右两侧分别显示图片图片 7.5 )。
可以拖动分界线左右移动帮助用户对比细节差异细微颜色差异
7.5  Swipe
 Onion Skin
Onion Skin
能够图片重叠放置阶段图片慢慢
图片用户可以自由调节过渡比例 7.6 )。通过功能
能够步步确认图片对于图片变化
7.6  Onion Skin
图灵社区会员 lxghost2 尊重版权
----------------------- Page 163-----------------------
136  
7  接收 Pull… Request
A
 Difference
Difference
功能笔者感到吃惊能够直接抽出图片不一
部分进行比较 7.7 ,Difference 抽出眼镜差别
要是这个功能大家找茬”,一定所向披靡
7.7  Difference
这样使用 GitHub 不但可以比较代码能够高效对比图片
各位不妨负责美工同事
● 
本地开发环境反映 Pull  Request 内容
下面我们讲解收到 Pull Request 本地开发环境进行实际
流程示例,Pull Request 收方用户名为 ituring ,发送
用户名为“PR 发送”。
接收本地仓库更新最新状态
首先 Pull Request 接收仓库 clone 本地开发环境
7.8
左侧)。如果已经 clone 那么进行 pull 操作更新最新状态
A 
现在只有前面种差模式方式已经没有。——译者
图灵社区会员 lxghost2 尊重版权
----------------------- Page 164-----------------------
7.2 
采纳 Pull… Request 准备  137
7.8  clone fetch
GitHub
Fork
git git
Pull Request
clone pull
fetch push
PR
接收 PR 发送
git git
ituring PR
发送
$ git clone git@github.com:ituring/first-pr.git
Cloning into 'first-pr'...
remote: Counting objects: 34, done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 34 (delta 10), reused 15 (delta 4)
Receiving objects: 100% (34/34), 89.48 KiB | 112 KiB/s, done.
Resolving deltas: 100% (10/10), done.
$ cd first-pr
获取发送远程仓库
Pull Request 发送仓库设置本地仓库远程仓库获取
仓库数据示例我们 7.8 右上仓库设置远程
进行 fetch。
$ git remote add PR
发送 git@github.com:PR发送/first-pr.git
$ git fetch PR
发送
省略
From github.com:PR
发送/first-pr
* [new branch] gh-pages -> PR
发送/gh-pages
* [new branch] master -> PR
发送/master
* [new branch] work -> PR
发送/work
图灵社区会员 lxghost2 尊重版权
----------------------- Page 165-----------------------
138  
7  接收 Pull… Request
现在我们获取 Pull Request 发送仓库以及分支数据(PR 发送
/work )。
创建用于检查分支
前面我们获取远程仓库数据这些数据尚未反映任何
分支因此我们需要创建分支用来模拟采纳 Pull Request
状态由于我们第一 Pull Request ,分支pr1 。相当
7.9 左侧箭头(checkout )代表操作现在gh-pages pr1 分支
内容完全相同
7.9  checkout
fetch
gh-pages checkout pr1 PR
发送/
work
merge
$ git checkout -b pr1
Switched to a new branch 'pr1'
合并
下面已经 fetch 完毕“PR 发送 /work”修改内容 pr1
分支进行合并也就是 7.9 箭头(merge )代表操作
$ git merge PR
发送/work
Updating cc62779..243f28d
Fast-forward
index.html | 2 ++
1 file changed, 2 insertions(+)
这样一来,pr1 分支加入“PR 发送 /work”分支修改
图灵社区会员 lxghost2 尊重版权
----------------------- Page 166-----------------------
7.3 
采纳 Pull… Request  139
示例我们修改 index.html 文件所以检查一下 index.html
有没有显示错误即可实际开发各位需要通过自动测试手段
软件是否正常运行
删除分支
检查结束 pr1 分支没用可以直接删除我们切换 pr1
分支运行下面代码
$ git branch -D pr1
Deleted branch pr1 (was 243f28d).
C
o
专栏如何提升代码管理技术
l
u
如果灵活运用分支创建合并便可以确保安全性
m
前提并行开发多个功能技术软件开发现场非常有用
n
而且团队规模效果
笔者认为掌握技术最佳方法就是积累经验 GitHub
可以通过自己自己不同分支发送 Pull…Request 进行练习
学会安全专业源代码管理不妨多多尝试 Git
GitHub。
7.3 
采纳 Pull Request
完成上述内容如果 Pull Request 内容没有问题打开
找出相应 Pull Request 页面点击 Merge pull request 按钮随后
Pull Request
内容自动合并仓库 7.10 )。
不过由于我们已经本地构筑相同环境只要通过 CLI 进行
合并操作 push GitHub ,Pull Request 反映 Pull Request
采纳状态 7.11 )。这个状态对应示例就是“PR 发送 /
work”
分支合并 gh-pages 分支
图灵社区会员 lxghost2 尊重版权
----------------------- Page 167-----------------------
140  
7  接收 Pull… Request
7.10  自动合并概念
GitHub
auto merge
git git
PR
7.11  手动合并概念
push fetch
gh-pages PR
发送
work
merge
● 
合并分支
首先我们切换 gh-pages 分支
$ git checkout gh-pages
Switched to branch 'gh-pages'
然后合并“PR 发送 /work”分支内容
$ git merge PR
送信/work
Updating cc62779..243f28d
Fast-forward
index.html | 2 ++
1 file changed, 2 insertions(+)
图灵社区会员 lxghost2 尊重版权
----------------------- Page 168-----------------------
7.3 
采纳 Pull… Request  141
这样一来“PR 发送 /work”分支合并到了 gh-pages 分支
● push
修改内容
现在剩下 push 不过保险起见我们查看本地
GitHub
仓库代码差别
$ git diff origin/gh-pages
diff --git a/index.html b/index.html
index f2034b3..91b8ecb 100644
--- a/index.html
+++ b/index.html
@@ -39,6 +39,8 @@
<p>
对本实践描述对本感想发送Pull Request。</p>
+<p class="impression">
有趣。(@HIROCASTER )</p>
+
省略
确认没有目的之外差别进行 push 。
$ git push
省略
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:ituring/first-pr.git
cc62779..243f28d local_gh-pages -> gh-pages
这种方法处理仓库 Pull Request 自动 Open 状态变为
Close
状态 7.12 )。现在我们可以查看网页采纳源代码应该
已经反映出来
7.12  Pull  Request 自动 Close 状态
以上便是安全接收 Pull Request 流程。Git 这种分散版本管理
乍看上去非常复杂熟悉操作运用起来还是简单
图灵社区会员 lxghost2 尊重版权
----------------------- Page 169-----------------------
142  
7  接收 Pull…Request
7.4 
小结
我们讲解如何安全接收 Pull Request 。
示例这种只有代码 Pull Request ,直接打开
GitHub
网页点击合并实际开发现场收到 Pull Request
往往更加复杂有时甚至多个文件挂钩所以各位清楚示例
只是练习准备 Pull Request 简单情况
作为仓库维护时刻记得无法运行代码绝不可以
否则失去团队信任
另外注意不要发布那些无法运行没有通过测试
错误源代码
C
o
专栏协助我们共同创建互相学习社区
l
u
关于 6 提到那个仓库只要 6 发送
m
Pull…Request,得到仓库管理权限以便仓库
n
进行维护各位可以参考内容试着仓库维护身份
Pull…Request。这样一来各位读者可以通过
仓库互相学习 Pull…Request 收发双方相关知识
各位读者协助不但帮助读者进行学习可以积累
作为维护经验各位务必我们一同维护这个互相学习
社区
图灵社区会员 lxghost2 尊重版权
----------------------- Page 170-----------------------
8
GitHub相互协作工具服务
图灵社区会员 lxghost2 尊重版权
----------------------- Page 171-----------------------
144  
8   GitHub 相互协作工具服务
GitHub
诞生并不单单影响到了软件开发相关人员现在
GitHub
已经真正为了 Hub ,与其相互协作工具服务
下面我们各位介绍几个比较常用服务
8.1 hub
命令
使用 GitHub 过程不可避免频繁接触 git 命令
这里介绍 hub 命令 A 封装 git 命令命令行工具能够
辅助用户使用 GitHub。方便工具经常使用 GitHub 读者
务必
● 
概要
hub
命令 Chris WanstrathB 带头开发软件
hub 命令仓库 README.md 文件我们可以看到“git +hub
=github”
这样一句话 C 。正如, hub 命令通常 git 命令
封装增加功能可以调用 GitHub API 发送命令由于
封装 git 命令所以能够执行所有 git 命令操作另外通过 hub 命令
功能到了扩展比如指定 GitHub 仓库可以简略路径替代
路径
具体命令我们后面详细讲解
● 
安装
下面介绍 hub 命令安装方法。hub 命令需要以下版本软件 D 。
A https://hub.github.com/
B https://github.com/defunkt
C https://github.com/github/hub
D 
对应 hub 1.10.6 版本
图灵社区会员 lxghost2 尊重版权
----------------------- Page 172-----------------------
8.1 hub
命令  145
● Git 1.7.3
以上
● Ruby 1.8.6
以上
安装 Git 方法参照 2
安装
如果 OS X 系统可以版本管理系统 Homebrew MacPorts
轻松安装
如果 Homebrew ,执行下面命令
$ brew install hub
如果 MacPorts ,执行下面命令
$ sudo port install hub
完成安装
使用其他环境读者按照下面流程安装
$ curl https://hub.github.com/standalone -sLo ~/bin/hub
$ chmod +x ~/bin/hub
通过上述命令下载 hub 命令之后下面这样 shell 环境路径
后面添加 ~/bin 。
$ echo 'export PATH="~/bin:$PATH"' >> ~/.bash_profile
重新启动 shell 可以使用 hub 命令
确认运行情况
通过下面命令确认运行情况
$ hub --version
git version 1.8.5.2
hub version 1.10.6
结果显示 git 命令 hub 命令版本
设置别名
使用 hub 命令最佳实践就是相应 git 设置 hub 别名。hub
图灵社区会员 lxghost2 尊重版权
----------------------- Page 173-----------------------
146  
8   GitHub 相互协作工具服务
可以完成 git 命令所有操作所以不会影响 git 命令原本功能
具体设置方法其实简单 shell 配置文件(.bash_profile
添加下面一句即可
eval "$(hub alias -s)"
实现 shell 功能
为了 hub 命令功能更加完善,Github 发布面向 bashA
zshB
脚本正在使用 shell 相应脚本组合可以 hub 命令
更加某些安装方法它们自动安装
 ~/.config/hub
hub
命令初次访问 GitHub API 询问用户名密码输入
之后进行 OAuth 认证然后我们可以通过 API 操作 GitHub 这时
OAuth Token
自动存在 ~/.config/hub 各位慎重保管这个 Token。
---
github.com:
- oauth_token: Oauth Token
user: hirocaster
● 
命令
下面我们实际使用 hub 命令看看 Git 扩展哪些功能
为了 git 命令区分明显接下来讲解内容我们直接输入
hub
命令已经 git 命令设置别名读者可以 hub 部分替换
git ,
运行效果一样当然直接输入hub 命令不会任何问题
 hub clone
使用 hub clone命令可以省去指定 GitHub 仓库部分
$ hub clone Hello-World
A https://github.com/defunkt/hub/blob/master/etc/hub.bash_completion.sh
B https://github.com/defunkt/hub/blob/master/etc/hub.zsh_completion
图灵社区会员 lxghost2 尊重版权
----------------------- Page 174-----------------------
8.1 hub
命令  147
上面这个命令下面命令效果相同
$ git clone git@github.com/
用户名/Hello-World.git
如果指定用户可以输入以下命令
$ hub clone octocat/Hello-World
效果下面这个命令完全相同
$ git clone git://github.com/octocat/Hello-World.git
 hub remote add
hub remote add
可以省略指定 GitHub 仓库部分
$ hub remote add octocat
上面这个命令
$ git remote add octocat git://github.com/octocat/
当前操作仓库名称 .git
效果完全相同
 hub fetch
hub fetch
hub remote add命令一样输入用户名
可以指定当前操作仓库执行命令在此不再赘述
 hub cherry-pick
hub cherry-pick
命令需要输入 URL 可以获取对应修改
应用当前分支审查代码如果发现提交包含值得应用
当前分支修改这个命令可以轻松完成操作
$ hub cherry-pick https://github.com/hirocaster/github-book/commit/606a
76f6831194cfe8a0fdcd6e974a29a4526cbf
实际1
这个命令可以下面命令效果一次性执行
$ git remote add -f hirocaster git://github.com/hirocaster/github-book.git
$ git cherry-pick 606a76f6831194cfe8a0fdcd6e974a29a4526cbf
图灵社区会员 lxghost2 尊重版权
----------------------- Page 175-----------------------
148  
8   GitHub 相互协作工具服务
 hub fork
hub fork
命令功能 GitHub 页面 Fork 按钮相同比如我们
clone
其他用户仓库现在 Fork 自己仓库需要执行
$ hub fork
命令获得下面一系列操作相同效果
GitHub仓库Fork处理
$ git remote add -f
用户名 git@github.com:当前操作仓库名称 .git
执行完毕,Fork 仓库设置当前本地仓库远程仓库
用户名为标识)。
 hub pull- request
hub pull-request
命令我们提供创建 Pull Request 功能
利用这个命令创建 Pull Request 可以不必访问 GitHub 页面
$ hub pull-request -b github-book:master -h hirocaster:index5-draft
使用命令可以 hirocaster index5-draft 分支 github-book
master 分支发送 Pull Request 。执行命令编辑器启动用户可以
在编按照一般 Pull Request 方式进行描述第一行将成为 Pull
Request
标题之后一行开始 Pull Request 正文
如果 index5-draft 作业内容创建 Issue#123 作业内容
可以直接 Issue 作为 Pull Request 发送
$ hub pull-request -i 123 -b github-book:master -h hirocaster:index5-draft
附加参数 -i以及 Issue 编号即可目前 Web 无法这样
Issue 直接作为 Pull Request 发送所以建议各位开发者这个技巧
 hub checkout
收到 Pull Request 时候如果本地检查分支运行状况
可以使用 hub checkout命令需要命令添加相应 Pull Request
URL ,可以收到分支 checkout。
图灵社区会员 lxghost2 尊重版权
----------------------- Page 176-----------------------
8.1 hub
命令  149
$ hub checkout https://github.com/hirocaster/wdpress69/pull/208
这个命令下面命令效果相同
$ git remote add -f -t impression git://github.com/tomamu/wdpress69.git
$ git checkout --track -B tomamu-impression tomamu/impression
执行之后系统“Pull Request 发送用户名 - 分支形式
本地仓库创建分支。Pull Request 内容已经 checkout 完毕
管理可以轻松检查运行状况
 hub create
hub create
命令适用本地已经创建仓库 GitHub 没有
仓库情况
$ hub create
需要输入上面这个简短命令,GitHub 创建同名
设置本地仓库远程仓库下面一系列操作效果
相同
GitHub创建仓库
$ git remote add origin git@github.com:
用户名/当前操作仓库名称 .git
现在只要进行 push ,代码可以 GitHub 端的仓库需要
这种方法创建公开仓库谨慎使用
 hub push
hub push
命令支持同时多个远程仓库进行 push 操作
$ hub push origin,staging,qa new-feature
命令可以下列远程仓库同时执行 git push命令
● origin
● staging
● qa
图灵社区会员 lxghost2 尊重版权
----------------------- Page 177-----------------------
150  
8   GitHub 相互协作工具服务
如果遇到需要多个仓库进行 push 操作情况各位不妨试一试
 hub browse
hub browse
命令可以浏览器打开当前操作仓库 GitHub
对应仓库页面
$ hub browse
这个命令下面效果相同
$ open https://github.com/
用户名/当前操作仓库名称
执行当前操作仓库页面浏览器打开
 hub compare
如果查看当前特性分支 master 分支差别可以使用 hub
compare
命令这个命令能够打开 GitHub 对应查看别的页面
特性分支执行下面命令
$ hub compare
效果执行下面命令效果相同
$ open https://github.com/
用户名/当前操作仓库名称/compare/当前分支
执行,GitHub 查看分支别的页面打开需要注意
这种方法查看 GitHub 仓库差别如果最新代码本地
需要分支 push 远程仓库
现在各位应该明白导入 hub 命令可以使熟悉命令行操作开发者
GitHub 更加得心应手我们介绍使用频率一些命令
hub 命令并不这些
$ hub help
执行上面命令可以查看 hub 命令相关帮助里面介绍添加
参数更加细致操作各位不妨看一看
图灵社区会员 lxghost2 尊重版权
----------------------- Page 178-----------------------
8.2 Travis…CI  151
C
o
专栏 GitHub  Enterprise支持 hub命令
l
u hub
命令不但可以用于 GitHub,可以用于 GitHub… Enterprise
m
操作使用 GitHub…Enterprise 读者运行下面命令
n
$ git config --global --add hub.host my.example.org
 ※
my.example.org 换成 GitHub Enterprise 主机名
~/.gitconfig
文件添加下面设置
[hub]
host = my.example.org
添加设置 GitHub… Enterprise clone 仓库
GitHub… Enterprise 对象执行 hub 命令 GitHub
clone
仓库原来一样 GitHub 对象执行操作
8.2 Travis CI
● 
概要
Travis CIA
免费服务专门托管面向开源开发组织 CI
(Continuous Integration ,
持续集成)。
CI
XP (Extreme Programming ,极限编程实践之一近年来
人们普遍使用 Jenkins 软件实现目的
CI 软件监视仓库可以开发者发送提交立刻执行自动测试
构建通过持续执行这样操作可以检测开发者意外发送
无意逻辑偏差代码保持一定质量以上
如果各位正在通过 GitHub 发布代码建议使用 Travis CI 。Travis CI
支持 Ruby 、PHP 、Perl 、Python 、Java 、JavaScript Web 相关语言 B 。
A http://travis-ci.org/
B http://about.travis-ci.org/docs
图灵社区会员 lxghost2 尊重版权
----------------------- Page 179-----------------------
152  
8   GitHub 相互协作工具服务
● 
实际尝试
现在我们设置自己仓库可以使用 Travis CI 。一般情况
只要仓库添加 .travis.yml 这样 Travis CI 专用文件
Travis CI
GitHub 成了
编写配置文件
我们 Ruby on Rails 应用 RSpec 为例编写 .travis.yml 文件
language: ruby
rvm:
- 1.9.2
- 1.9.3
script: bundle exec rspec spec
按照
使用语言
版本
执行测试相关命令
顺序描述如果一次描述多个版本版本分别进行
这样一来用户可以迅速检测代码哪些版本无法通过测试
如果各位使用其他种类语言参考官方网站相关文档 A 。基本
设置方法不变这个文件放置仓库路径 push GitHub
我们基本成了使用 Travis CI 准备工作
检测配置文件是否问题
Travis CI
专门提供 Travis WebLint 用户检测 .travis.yml 文件
存在问题 B 。检测指定仓库如果发现问题出现 8.1 中的
页面
A http://about.travis-ci.org/docs/user/getting-started/
B http://lint.travis-ci.org/
图灵社区会员 lxghost2 尊重版权
----------------------- Page 180-----------------------
8.2 Travis…CI  153
8.1  通过 Travis WebLint 检测配置是否正常
如果配置文件描述实际启动 CI 返回错误结果
此时人们往往不清问题哪里所以开始使用 CI 之前务必
检测
GitHub 集成
访 Travis CI Sign in with
GitHub。
输入 GitHub 用户名密码通过 GitHub 进行认证
完毕回到这个页面之前显示 Sign in with GitHub 地方变成
用户 GitHub 信息
现在我们鼠标指针移动到头点击 Accounts 跳转 8.2
页面页面我们仓库列表我们只要仓库右侧开关
ON ,可以仓库应用 Travis CI 。
8.2  Accounts
访问 GitHub Webhooks & Services 页面 8.3 ),点击Configure
图灵社区会员 lxghost2 尊重版权
----------------------- Page 181-----------------------
154  
8   GitHub 相互协作工具服务
services
列表选择 Travis ,我们看到 Travis 设置点击
Test Hook
按钮,Travis CI 这个仓库进行试验性自动测试
我们回到 Travis CI ,查看自动测试是否正常执行如果执行内容
我们设置相同那么设置就算完成
今后 GitHub push 操作将会自动触发 Travis CI 端的自动
测试
8.3  Hook 测试
这个仓库 Travis CI 端的 URL https://travis-ci.org/
用户名 / 仓库用户可以这个页面查看自动测试执行情况
跳转 Travis CI 首页直接搜索自己用户名信息可以查询
测试执行情况 8.4 )。
8.4  测试执行情况
图灵社区会员 lxghost2 尊重版权
----------------------- Page 182-----------------------
8.2 Travis…CI  155
.travis.yml 设置可以通过邮件 IRC (Internet Relay
Chat ,
在线交谈系统接收 Travis CI 执行结果漏掉结果
所以设置一定要选择自己经常关注地方具体设置方法
参考官方文档 A 。
Travis CI 结果添加 README.md
各位查看 GitHub 仓库 README.md 文件不知有没有
8.5 “build passing”那种绿色红色图片就是刚才
Travis CI
执行结果
8.5  Travis CI 状态
绿色图片表示仓库代码顺利通过测试相反红色图片表示
仓库没有通过测试证明仓库可能存在某种问题执行结果显示
README.md
可以显示仓库健全可以防止自己遗漏
Travis CI
结果一举两得
如果采用 Markdown 语法按下格式进行描述
[![Build Status](https://secure.travis-ci.org/
用户名/仓库 .png
)](http://travis-ci.org/
用户名/仓库 )
A  http://about.travis-ci.org/docs/user/build-configuration/
图灵社区会员 lxghost2 尊重版权
----------------------- Page 183-----------------------
156  
8   GitHub 相互协作工具服务
8.3 Coveralls
● 
概要
CoverallsA
Lemur Heavy IndustriesB 运营代码覆盖率检测
借助 Travis CI Jenkins 持续集成服务器用户报告自动测试
测试覆盖率 8.6 )。
8.6  代码覆盖率报告
服务支持 Ruby/Rails 、Python 、PHP 、JavaScript/Node.js 、C/C++、
Java 、Scala
语言详细内容查看官方网站相关文档 C 。
简略报告用户可以查看代码部分执行多少测试
8.7 )。
A https://coveralls.io/
B http://lemurheavy.com/
C https://coveralls.io/docs
图灵社区会员 lxghost2 尊重版权
----------------------- Page 184-----------------------
8.3 Coveralls  157
8.7  详细报告
Coveralls
可以 Pull Request 生成报告我们建议各位
使用服务时常提醒自己注意覆盖率问题另外由于用户可以
通过详细报告了解哪些代码没有测试所以还有用户改进自动测试
内容提高测试效率
服务开源开发免费私有仓库需要支付一定费用
金额查看官方网站 A 。
下面我们举例讲解 Coveralls 安装方法
● 
安装
Coveralls
安装非常简单使用前提条件
源代码存在 GitHub
已经成了 Travis CI Jenkins 服务
只要满足以上条件可以立即使用 Coveralls。我们讲解
Travis CI Jenkins 进行集成
我们借用 Ruby 开发 CMS——lokkaB 进行安装
注册
访问 Coveralls 首页点击 FREE SIGN UP ,可以经由 GitHub
账户
A https://coveralls.io/pricing
B https://github.com/lokka/lokka
图灵社区会员 lxghost2 尊重版权
----------------------- Page 185-----------------------
158  
8   GitHub 相互协作工具服务
添加对象仓库
账户注册成功 Coveralls 首页点击 ADD REPO ,这里可以
添加需要生成覆盖率报告仓库
页面列表显示我们 GitHub 端的仓库 8.8 ),添加
仓库右边开关设置 ON。
8.8  仓库列表
返回 Coveralls 首页我们看到刚才设置 ON 仓库已经成为
对象点击链接进入 8.9 页面这个页面我们讲解
编写 Coveralls 配置文件以及需要安装哪些插件
编写配置文件
Coveralls
配置文件 .coveralls.yml。我们这个文件仓库
文件内容如下
service_name: travis-ci ←
描述正在使用CI
如果各位使用其他持续集成服务器(Jenkins ),最好按照自己
图灵社区会员 lxghost2 尊重版权
----------------------- Page 186-----------------------
8.3 Coveralls  159
需要 service_name 改成简单易懂名称另外这种情况 repo_
token
需要描述 repo_token:xxxxxyyyyyzzzz 形式。repo_token 可以
8.9 页面找到
8.9  Coveralls 配置解说页面
添加 gem
如果使用 Ruby Rails ,需要添加 gem 。使用其他语言读者
查看官方网站相应文档
我们 Gemfile 添加下面一行文字
gem 'coveralls', require: false
另外 ./spec/spec_helper.rb ./test/test_helper.rb 各位正在
使用测试工具 helper 文件添加下面代码
require 'coveralls'
Coveralls.wear!
使用 Rails 读者换成下面代码进行设置
图灵社区会员 lxghost2 尊重版权
----------------------- Page 187-----------------------
160  
8   GitHub 相互协作工具服务
require 'coveralls'
Coveralls.wear!('rails')
执行 bundle install命令记得所有修改文件提交一遍
查看报告
完成上述设置进行 push 操作,Coveralls Travis CI 自动
生成报告。Coveralls 报告 URL https://coveralls.io/r/
用户名 /仓库
Travis CI 一样,Coveralls 提供 README.md 显示相关信息
标记报告 README BADGE 图片下方可以找到 Get badge
URLs ,
点击之后便获得URL (8.10 )。URL 添加 README.md
文件我们可以 GitHub 看到 README BADGE 同样
图片
8.10  Coveralls 标记
8.4 Gemnasium
Gemnasium
服务可以查询 GitHub 仓库软件正在使用 RubyGems
npm (Node Package Manager ,管理),让开了解自己是否
使用最新版本进行开发 A 。
A https://gemnasium.com/
图灵社区会员 lxghost2 尊重版权
----------------------- Page 188-----------------------
8.5 Code…Climate  161
最近软件都会多个因此版本升级如果不及
应对影响软件使用
比如帮助用户轻松使用 GitHub API RubyGems octokitA
我们正在开发软件好用到了这个现在由于 GitHub
API 修改,octokit 只好升级版本应对这时 RubyGems.org
一定发布版本 octokit。如果我们使用 Gemnasium ,第一
时间接到通知
另外 Gemnasium 网站列出我们正在使用 RubyGems
最新版本差距版本方面问题可以这里一目了然 8.11 )。
8.11  正在使用 RubyGems 以及相应最新列表
Public
仓库可以免费使用 Gemnasium ,Private 仓库需要支付一定
费用如果各位公开仓库推荐试一试服务
8.5 Code Climate
Code Climate
代码分析报告服务 B ,目前支持Ruby 。
A http://rubygems.org/gems/octokit
B https://codeclimate.com/
图灵社区会员 lxghost2 尊重版权
----------------------- Page 189-----------------------
162  
8   GitHub 相互协作工具服务
可以分析 GitHub 仓库中的软件查出软件质量问题代码
软件品质评级收费服务但是 14 免费试用期
Code Climate
可以我们日常开发分析代码容易出现 BUG
复杂部分发出警告如果进行重构分析结果相伴评级
8.12 )。这样一来可以督促我们日常编写品质代码
评级下降及时进行重构软件时常保持品质状态
8.12  解析结果评级
Code Climate
可以用户选出那些随意敲打劣质代码督促
用户时常进行重构强烈推荐日常使用 Ruby 开发读者尝试服务
8.6 Jenkins
● 
概要
Jenkins

Jenkins
GitHub 集成
这里我们 GitHub 仓库 Pull Request 设置触发
系统自动进行测试测试结果发送 GitHub。通过这种方法
图灵社区会员 lxghost2 尊重版权
----------------------- Page 190-----------------------
8.6 Jenkins  163
可以检验收到 Pull Request 会不会破坏软件原有功能另外如果
Pull Request
某些功能带来 BUG 无法通过测试那么这个 Pull
Request
将会 8.13 那样显示 GitHub 防止管理员合并
8.13  Pull  Request 通过测试显示内容
通过测试 Pull Request 将会 8.14 那样绿色显示表示
Pull Request 至少成功运行所有测试代码
8.14  Pull  Request 通过测试显示内容
测试成功结果一目了然让开能够放心进行合并另外
图灵社区会员 lxghost2 尊重版权
----------------------- Page 191-----------------------
164  
8   GitHub 相互协作工具服务
使通过测试,Jenkins 持续 Pull Request 进行测试开发
轻松找出发生问题时间点
● 
安装
Jenkins
官方网站 A 发布 Linux 多种 OS 安装各位
可以官方网站右侧选择合适安装进行下载
下载完成使用当前 OS 标准安装方法进行安装。Jenkins
环境中都运行实例各位选择自己熟悉环境当然需要
持续集成目标软件最好当前环境可以运行
通过安装完成安装,Jenkins OS 一起启动其他设置
自动完成只要安装正常,Jenkins 将会默认使用 8080 端口各位可以
打开浏览器访问“http://jenkins 所在服务器 IP 地址 :8080/”,看到
8.15 页面
8.15  Jenkins 初始界面
至于口号 JVM 设置不同安装之间有所不同使用 deb
格式 Debian GNU/Linux Ubuntu Linux /etc/default/jenkins
设置使用 rpm 格式 Red Hat Linux CentOS /etc/sysconfig/
jenkins
进行设置详细位置参照官方网站 Wiki B 。
A  http://jenkins-ci.org/
B https://wiki.jenkins-ci.org/display/JENKINS/Native+Packages
图灵社区会员 lxghost2 尊重版权
----------------------- Page 192-----------------------
8.6 Jenkins  165
● 
创建 bot 账户
我们 GitHub 新建账户 Jenkins 通过这个账户仓库
获取源代码以及 GitHub 发送测试结果今后我们这个账户称为 bot
账户
然后创建 bot 账户专用公开密钥私有密钥通过安装安装
Jenkins
,OS 创建jenkins 用户使用这个用户创建密钥
自动分配私有密钥省去后续麻烦注意这个密钥密码
短语(Passphrase )一定要留空由于Jenkins 通过这个密钥访问
GitHub
仓库如果设置密码短语测试自动进行就要
功夫
接下来创建密码短语公开密钥添加 bot 账户
账户创建设置参考 3
● bot
账户权限设置
我们需要 bot 账户设置 GitHub 持续集成对象所在仓库访问
权限
公开仓库虽然可以读取结果添加 GitHub 必须拥有
权限另外如果对象是非公开仓库没有读取权限的话 bot
无法访问仓库数据
对象个人账户
如果 GitHub 端的仓库属于个人账户需要 GitHub 仓库页面
Settings 页面 bot 账户添加 Collaborators 添加这里账户
能够获得这个仓库(push 读取(clone 、pull 权限
对象 Organization 账户
如果仓库属于 Organization 账户需要 GitHub 页面左上
切换账户选择 Organization 账户进入 Organization 账户页面选择
Teams
标签页打开团队一览 8.16 ),然后选择New Team ,bot
图灵社区会员 lxghost2 尊重版权
----------------------- Page 193-----------------------
166  
8   GitHub 相互协作工具服务
账户创建团队
8.16  团队一览
接下来输入团队相关设置 8.17 )。Team Name 输入团队
这里我们团队 bot 。“What permission level should this team
have?”
可以选择这个团队拥有权限这里选择 Write Access 。
点击 Create team 即可创建团队
8.17  创建团队权限设置
接下来页面设置 bot 团队成员仓库 8.18 )。团队
成员账户页面左侧添加这里我们 bot 账户名为 hirocaster-bot 。
页面右侧可以添加团队关联仓库我们进行持续集成对象
github-book/ghprb
于是我们添加进去
图灵社区会员 lxghost2 尊重版权
----------------------- Page 194-----------------------
8.6 Jenkins  167
8.18  团队成员仓库设置
团队下方显示团队说明可以通过点击 Edit 修改这里填写
简单团队说明可以团队增多方便整理所以建议大家时间
概要
全部输入完成点击右上 Teams ,查看创建团队
检查设置
至此我们完成 bot 账户持续集成对象仓库权限设置现在
退出 GitHub 重新登入 bot 账户确认是否看到仓库
今后如果增加持续集成对象仓库创建团队
仓库可以 bot 账户获得访问仓库权利
● 
Jenkins 设置 SSH 密钥
由于 Jenkins 使用 bot 账户私有密钥访问仓库所以必须设置
私有密钥
初次使用 Jenkins
通过安装安装 Jenkins ,OS 自动生成jenkins 用户
如果这个 jenkins 用户生成密钥那么私有密钥已经自动
完毕需要更改
如果密钥不是 jenkins 用户生成需要 jenkins 用户
人文起始目录创建 .ssh 目录 .ssh 目录配置私有密钥(id_
rsa )。
比如Ubuntu Linux 派生操作系统私有密钥路径就是
图灵社区会员 lxghost2 尊重版权
----------------------- Page 195-----------------------
168  
8   GitHub 相互协作工具服务
/var/lib/jenkins/.ssh/id_rsa 。
配置私有密钥之后,jenkins 用户可以自动
使用这个私有密钥通过 SSH 进行访问然后只要 Jenkins job 设置
通过 SSH 访问 GitHub 仓库,Jenkins 可以访问仓库
已经使用 Jenkins
如果已经使用 Jenkins 其他项目进行持续集成并且占用 id_rsa
文件需要一些功夫我们 ~/.ssh/config SSH 客户端
相关设置 SSH 访问特定主机设置访问实际主机名以及
私有密钥
jenkins 用户 ~/.ssh/config 添加下面代码
Host ghprb.github-book
Hostname github.com
IdentityFile ~/.ssh/bot_id_rsa ←
指定访问GitHub私有密钥
StrictHostKeyChecking no
Host *
IdentityFile ~/.ssh/id_rsa ←
指定通常情况使用私有密钥
~/.ssh/bot_id_rsa 配置我们创建私有密钥由于私有
我们权限设置 400 。
通常情况我们通过 git@github.com:github-book/
ghrpb.git
访问 GitHub 仓库但是经过设置通过
Jenkins
访问仓库上面主机名部分替换设置 HOST
比如 git@github.com:github-book/ghrpb.git需要修改
git@ghprb.github-book:github-book/ghrpb.git。
设置完成,Jenkins 通过 SSH 访问不同主机可以使用不同
私有密钥
现在我们 jenkins 用户已经可以使用 bot 账户私有密钥访问
GitHub
仓库我们不妨 jenkins 用户尝试 clone 操作确认
正常执行以便后面 job 设置出问题快速找到原因
图灵社区会员 lxghost2 尊重版权
----------------------- Page 196-----------------------
8.6 Jenkins  169
● GitHub pull request builder plugin
安装
使用 Jenkins Pull Request 进行自动测试需要 GitHub pull
request builder pluginA
插件 B 。这个插件可以 Jenkins 内部构建 Pull
Request
合并之后状态执行自动测试由于结果自动发送
GitHub ,
所以能够我们避免“Pull Request 合并出现某些问题导致
通过情况如此一来,Pull Request 合并变得更加安全
现在我们这个插件安装 Jenkins
访问 Jenkins 界面依次选择系统管理”→“管理插件”,
选择可选插件标签页列表找出 GitHub pull request builder
plugin ,
勾选安装复选框点击直接安装 8.19 )。随后相应插件
安装系统 8.20 )。
接下来我们继续进行 Jenkins 设置首先打开系统管理”→“
设置页面
8.19  选择 GitHub pull request builder plugin
A https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin
B 
使用 1.9 版本
图灵社区会员 lxghost2 尊重版权
----------------------- Page 197-----------------------
170  
8   GitHub 相互协作工具服务
8.20  相关插件安装完毕
● Git plugin
设置
点击配置菜单中的 Git plugin ,移动 Git plugin 项目
8.21 )。
8.21  Git plugin
现在我们设置 Jenkins 内部使用 Git。 Global Config uesr.name
Value
输入姓名 Global Config user.email Value 输入邮箱地址
注意
● Github Pull Requests Builder
设置
接下来我们移动 Github Pull Requests Builder 项目然后项目
高级”。
图灵社区会员 lxghost2 尊重版权
----------------------- Page 198-----------------------
8.6 Jenkins  171
 Github server api URL
如果各位使用普通 GitHub ,那么需要更改如果使用
GitHub Enterprise ,需要配合环境进行设置
 Access Token
Jenkins
GitHub 之间互动其实就是通过 bot 账户 Access Token
GitHub API 进行信息交互因此需要获取 bot 账户 Access Token 。
填写下方 Username Password 点击 Create access token ,Jenkins
自动通过 bot 账户 Username Password 获取 Access Token 。
成功获取部分附近显示随机文字只要这个
复制第二 Access Token 即可
8.22  Access Token 设置
图灵社区会员 lxghost2 尊重版权
----------------------- Page 199-----------------------
172  
8   GitHub 相互协作工具服务
 Admin list
GitHub pull request builder plugin
可以用户通过 GitHub Pull
Request
添加特定评论方式 Jenkins 发送执行任务命令
我们需要这里添加 GitHub 用户名上述权限赋予用户新建
任务相关权限将会这里设置默认当然任务
可以单独进行设置
以上全部输入完毕点击保存
● job
创建设置
Jenkins
任务用来执行自动测试现在我们 Jenkins 实际创建
点击创建任务”,任务合适名称然后选择
构建自由风格软件项目”。
下面任务设置我们讲解必须进行设置其他设置各位
根据自己需要进行判断
 GitHub project
GitHub project 输入 GitHub 仓库 URL ,例如 https://
github.com/github-book/ghprb/

源码管理
源码管理中选    8.23   源码管理系统设置
Git (8.23 )。Repository
URL
SSH
URL ,
例如 git@github.
com: github-book/
ghprb.git 。
如果在前
讲到 ~/.ssh/config
进行设置注意替换
主机名
图灵社区会员 lxghost2 尊重版权
----------------------- Page 200-----------------------
8.6 Jenkins  173
接下来选择 Repositories 高级”。 Refspec 输入以下内容
+refs/pull/*:refs/remotes/origin/pr/*
Branches to build Branch Specifier(blank for default) 输入以下
内容
${sha1}
构建触发器
构建触发器我们需要设置任务开始执行触发器
8.24 )。
勾选Github Pull Requests Builder ,然后点击高级”。
Admin list 输入管理用户名
Crontab line
需要按照 Cron 格式进行描述。Jenkins 按照这里
时间检查 Pull Request 。默认设置 5 分钟检查一次
8.24  job Github  Pull  Requests Builder 设置
图灵社区会员 lxghost2 尊重版权
----------------------- Page 201-----------------------
174  
8   GitHub 相互协作工具服务
White list 填写有可能自己发送 Pull Request GitHub 用户
收到 Pull Request 如果发送用户名 White list
Admin list
之中,Jenkins 自动执行任务
如果“List of organisations. Their members will be whitelisted”
输入 Organization 账户那么隶属账户所有 GitHub 用户都会获得
White list
相同权限
构建
构建用来设置执行自动测试作业流程这里各位根据
正在开发软件进行设置
以上我们完成最低限度设置现在只要收到 Pull Request ,
自动执行但是 Pull Request 发送必须 Admin list White
list
之中
其他开发者 Pull Request 需要 Admin list 中的用户填写
进行控制比如开发者加入 White list ,或者直接允许测试执行
关于方面我们后面详细讲解
● 
通知结果
自动测试结果 GitHub pull request builder plugin 发送
GitHub。
这时 API 名为 Commit Status APIA 。
收到 Pull Request 持续集成服务器进行处理然后发送信息
随后根据最新提交显示 8.25 状态
8.25  显示 Pull  Request 状态
状态附带名为 Details 链接指向我们刚刚设置 Jenkins 。
A https://github.com/blog/1227-commit-status-api
图灵社区会员 lxghost2 尊重版权
----------------------- Page 202-----------------------
8.6 Jenkins  175
点击这个链接可以查看相关详细内容
测试执行中的状态
收到 Pull Request 之后如果自动测试执行无法确定状态
显示 8.26 样子这时只要稍等一会 GitHub 收到测试
结果状态更新
8.26  测试执行中的状态
  Failed
如果测试没有通过显示 8.27 状态
8.27  测试通过状态
这时可以点击 Details 链接查看详细内容找出通过测试问题
所在注意这个状态千万不能合并 Pull Request 。
 All is well
如果测试全部正常通过 8.25 那样绿色显示之后只要
代码审查工作没有发现问题可以合并
 commit status
GitHub pull request builder plugin
虽然根据最新提交执行
但是记录过去提交状态如果测试通过提交
8.28
那样“×”。
图灵社区会员 lxghost2 尊重版权
----------------------- Page 203-----------------------
176  
8   GitHub 相互协作工具服务
8.28  测试通过标记
修正 push 8.29 那样绿色
8.29  测试通过标记
根据这些结果记录可以直观分辨哪些提交引起测试结果
变化帮助开发者迅速辨明问题所在
● 
通过评论进行控制
GitHub Pull Request 填写特定评论可以控制 GitHub pull
request builder plugin 。
执行任务
如果 Admin list White list 名单之外用户 Pull Request ,
bot
账户询问“Can one of the admins verify this patch?”。这种情况下任
不会自动执行
Admin list
名单中的用户可以通过发送“ok to test”评论任务
执行如果发送评论用户不在 Admin list 当中 bot 账户忽略
如果发送 Pull Request 用户 White list 之中任务自动开始执行
添加 White list
如果发送 Pull Request 用户添加 White list ,Admin list
名单中的用户发送“add to whitelist”评论今后这个用户 Pull
Request
的话任务都会自动执行 8.30 )。
重新执行任务
如果遇到某些情况需要重新执行任务只要 Admin list White list
图灵社区会员 lxghost2 尊重版权
----------------------- Page 204-----------------------
8.7 
小结  177
名单中的用户发送“retest this please”评论即可
变更指定评论
指定评论内容可以系统管理”→“系统设置”→“Github
Pull Requests Builder”→“
高级进行更改
8.30  发送“add to whitelist”评论示例
8.7 
小结
通过使用 Jenkins GitHub pull request builder plugin ,我们可以
安全合并 GitHub Pull Request 。 9 我们接触自动测试
持续集成相关内容现代软件开发持续集成已经不可或缺
甚至逐渐成为开发中的常识开源世界同样
了解一遍过程之后持续集成安装变得简单但是认证
权限设置方面存在难以处理东西往往人们花费大量
因此详细讲解如何 GitHub 集成各位不妨参考
尝试一下持续集成应用
图灵社区会员 lxghost2 尊重版权
----------------------- Page 205-----------------------
178  
8   GitHub 相互协作工具服务
C
o
专栏  Coderwall 生成  GitHub 个人信息
l
u
Coderwall
a 社区众筹方式开发运营服务
m
可以根据 GitHub 仓库信息开发者免费生成个人信息
n
同时根据 GitHub 业绩成就开发者颁发勋章 …a…)。
可以证明开发者使用语言参与多少项目
证书根据其所获得勋章可以判断这个特点各位如果
感兴趣不妨查看一下他们个人信息
这些勋章可以嵌入博客网站各位可以试着它们展示
b
个人信息
Coderwall
中的 Teams c 展示团队地方这里
可以上传自己团队资料展示自己团队成绩文化以此
吸引志同道合同伴可以查看其他团队哪些程序员
GitHub…
开发什么代码以及他们团队文化
有意跳槽可以这里查看是否有心团队如果
公司没有参与进来不妨这个机会展示一下这里作为
一种交流平台
a https://coderwall.com/
b https://coderwall.com/api#blogbadge
c https://coderwall.com/leaderboard
a  Coderwall 勋章
图灵社区会员 lxghost2 尊重版权
----------------------- Page 206-----------------------
9
使用GitHub开发流程
图灵社区会员 lxghost2 尊重版权
----------------------- Page 207-----------------------
180  
9  使用 GitHub 开发流程
开发流程使用 GitHub ,可以开发团队能力发挥大限
下面我们各位介绍这类开发流程
讲解开发流程”,使用 Git GitHub 团队开发
涉及规则步骤接下来部分我们将会讲解 2 开发流程
流程各自不同特征实际开发究竟采用一种需要根据
现场团队情况决定
对于熟悉 Git GitHub 团队推荐参考制定开发
步骤草案
9.1 
团队使用 GitHub 注意事项
详细讲解使用 Git GitHub 开发流程之前我们看一看
软件开发者组成团队限度发挥他们能力需要具备
前提条件
● 
一切
面向企业发售开发者工具协作工具往往拥有十分丰富功能
某些企业使用这些丰富功能专门制定软件开发规则然而
反思一下我们开发现场真的需要这么多功能规则
GitHub
功能非常简单就是因为实际软件开发
不到那些复杂功能
项目管理工具 GitHub 区别
比如 9.1 著名开源项目管理工具 Redmine 新建问题

Redmine
还有众多插件可以进一步添加功能然而 GitHub
New Issue
9.2 非常简单
图灵社区会员 lxghost2 尊重版权
----------------------- Page 208-----------------------
9.1 
团队使用 GitHub 注意事项  181
9.1  Redmine 新建问题
9.2  GitHub New  Issue
为什么如此差距
项目管理工具 GitHub 相异原因
Redmine
项目管理工具是以管理项目目的必要考虑管理
人员输入哪些信息以及需要提醒管理人员输入哪些信息所以
图灵社区会员 lxghost2 尊重版权
----------------------- Page 209-----------------------
182  
9  使用 GitHub 开发流程
众多输入项目
GitHub 软件开发者提供支持工具项目管理工具
相比注重辅助开发者高速开发品质软件知道往往事物
简单人们实施起来
这里笔者准备使用 GitHub 各位开发者建议。GitHub
本身相较各位正在使用项目管理工具确实功能方面不足
不要急着其他工具强行弥补不妨试着大胆放弃这些功能
GitHub
这些简单功能完全能够应对软件开发中的需要
团队限度发挥实力建议剔除复杂规则简单规则进行
开发
● 
Fork 仓库方法
已经 GitHub 利用开源软件开发中的读者想必以下面的
进行 Pull Request 。
GitHub 进行 Fork
仓库 clone 本地开发环境
本地环境创建特性分支
特性分支进行代码修改进行提交
特性分支 push 仓库
GitHub Fork 来源仓库发送 Pull Request
无法特定多数赋予提交权限公开软件开发这种
能够防止仓库收到计划之外提交
然而公司企业开发开发者每天见面经常互相发送
Pull Request ,
这种流程显得有些繁琐因此下面我们介绍
需要 Fork 仓库工作流程这种方法可以开发者掌握
本地仓库远程仓库使整个开发流程变得简单 9.3 )。
图灵社区会员 lxghost2 尊重版权
----------------------- Page 210-----------------------
9.2 GitHub… Flow——
部署中心开发模式  183
9.3  进行 Fork 开发流程
GitHub
Pull Request
git
push push
pull pull
git git
开发者 A 开发者 B
9.2 GitHub Flow——
部署中心开发模式
下面我们各位讲解 GitHub 公司正在实践十分简单开发
A
流程 9.4 ) 。
9.4  GitHub  Flow 概要
master
Pull Request
branch
部署 B 中心开发流程实际开发往往 1 之内
实施部署支撑一切就是足够简单开发流程以及
自动化简单开发流程能够问题应对变得更加灵活正在使用
GitHub
各位务必尝试开发流程
A http://zachholman.com/talk/how-github-uses-github-to-build-github/
B 
正式环境配置源代码运行
图灵社区会员 lxghost2 尊重版权
----------------------- Page 211-----------------------
184  
9  使用 GitHub 开发流程
因为开发流程十分简单所以无论大小团队可以取得不错
效果 GitHub 公司大致 15 20 组成团队利用一流
进行同一项目开发 A 。笔者经验 20 左右团队使用这个
流程共同开发项目基本不会出现什么问题
9.3 GitHub Flow
流程
整个开发流程大致如下
master 分支时常保持可以部署状态
进行作业 master 分支创建分支分支名称具有
描述
新建本地仓库分支进行提交
GitHub 仓库创建同名分支定期 push
需要帮助反馈创建 Pull Request , Pull Request 进行交流
其他开发者进行审查确认作业完成 master 分支合并
master 分支合并立刻部署
以上便是流程全部内容由于流程基本特定作业创建
特定分支开始作业进行部署之间过程十分简单可以降低开发者
学习开发流程成本而且由于简单所以大量开发者可以迅速
利用开发之中并且可以借助灵活处理一些细微代码变更
下面我们顺序步步进行讲解
● 
随时部署没有发布概念
这个流程必须遵守 master 分支随时保持可以部署状态
每隔小时进行一次部署可以有效防止同时出现多个严重 BUG 。
A http://scottchacon.com/2011/08/31/github-flow.html
图灵社区会员 lxghost2 尊重版权
----------------------- Page 212-----------------------
9.3 GitHub… Flow
流程  185
虽然有时有一些 BUG 出现只要相应提交 revert
提交修正代码即可轻松应对流程小时甚至分钟单位
持续进行部署所以存在发布概念因此不会出现 HEAD
回去指向之前提交 A ,借以取消整个作业内容情况
由于 master 分支时常保持可以部署状态所以开发者可以随时
创建分支
注意没有进行测试或者测试通过代码绝不可以合并
master
分支因此必要持续集成手段
● 
进行作业 master 分支创建分支
进行作业 master 分支创建分支无论添加功能
修复 BUG 如此此外分支名称具有描述
所谓具有描述名称名称直观正确表达这个分支
特性比如以下
● user-content-cache-key
● submodules-init-task
● redis2-transition
其他开发者可以通过这些名字清楚了解分支正在进行什么
工作
采用方式开发者查看远程仓库分支列表能够当前
团队正在实施任务一目了然另外由于分支明确描述工作
即便开发者需要其他工作回来想起分支
目标
查看 GitHub 分支列表页面 B 可以轻松掌握分支 master 分支
差别
A 
相当于 Git git reset 命令
B https://github.com/
用户名 / 仓库 /branches
图灵社区会员 lxghost2 尊重版权
----------------------- Page 213-----------------------
186  
9  使用 GitHub 开发流程
● 
创建分支进行提交
在前面的步骤开发者为了进行更改创建分支并且
明确这个分支应该哪些工作接下来可以这个分支修改
代码进行提交修改代码注意绝对不能进行分支工作
内容无关修改
阶段开发者提交花心思有意识减小
规模一方面便于清楚表达目的另一方面有助于其他开发者
Pull Request
进行审查
比如添加方法确认添加位置以及之后开发者往往
需要进行下面操作
修正附近代码缩进问题
发现变量单词拼写错误进行修正
添加作业需要添加方法
如果上述工作一次提交完成那么差别包含 3
这种提交有些不妥如果 3 工作分为 3 提交那么
差别有了清晰含义
分支修改代码发送提交注意以上几点其余方面皆可
按照往常方式进行
● 
定期 push
开发流程由于除了 master 分支之外作业中的分支
所以 push 作业分支需要顾虑开发过程建议开发
定期本地仓库创建分支同名形式 push GitHub 端的远程
仓库
这样一来不仅可以备份代码定期开发者团队创造交流
其他开发者什么工作是否需要帮助团队成员可以通过
GitHub
分支列表页面一目了然
图灵社区会员 lxghost2 尊重版权
----------------------- Page 214-----------------------
9.3 GitHub… Flow
流程  187
开发过程最好其他开发者能够看到自己编写代码同时
养成积极查看其他代码习惯通过代码进行交流开发者特权
我们没有理由利用
● 
使用 Pull  Request
Pull Request
不一定非要 master 分支合并使用既然
开发完全可以尽早创建 Pull Request 其他开发者进行审查一边
听取反馈一边编写代码必要等到 master 分支合并进行
Pull Request
具有显示差别以及单行代码插入评论功能开发者
可以利用这些进行交流另外如果希望得到特定开发者反馈
可以评论加入“ @ 用户名”,用户发送 Notifications 。对方
注意之后照例都会某种形式进行反馈
● 
务必其他开发者进行审查
分支作业结束需要注明作业完成其他开发者进行
审查其他开发者看一看自己编写代码可以有效防止想当然
或者低级失误审查选择没有参与编写指出问题
积极进行修改当然一切大前提部分代码已经通过所有
测试
审查之后如果认为可以 master 分支合并需要明确告知
按照 GitHub 文化这里“:+1:”“:shipit:”表情
9.5 )。
偶尔见到LGTM 字样 Looks good to me 简写
征得个人同意便适当时机其他开发者分支
master
分支进行合并
● 
合并立刻部署
代码合并 master 分支并且通过所有自动测试之后需要立刻进行
部署部署之后需要确认刚刚合并代码是否存在问题
图灵社区会员 lxghost2 尊重版权
----------------------- Page 215-----------------------
188  
9  使用 GitHub 开发流程
9.5  通过表情表达意见
9.4 
实践 GitHub Flow 前提条件
至此相信各位已经开发流程有了大体印象接下来我们
考虑实践开发流程所需前提条件
● 
部署作业完全自动化
首先部署相关作业必须实现自动化开发流程当中
需要多次部署开发模式部署文档进行部署作业浪费相当
图灵社区会员 lxghost2 尊重版权
----------------------- Page 216-----------------------
9.4 
实践 GitHub… Flow 前提条件  189
时间同时可能发生操作失误作为程序员应该每天
这些工作花费精力
使用部署工具
于是我们使用 Capistrano 部署工具部署所需一系列
流程自动化一旦实现自动化部署工作能够简化指令同时
大幅减少粗心大意导致人为失误所有参与开发能够放心
实施部署工作
另外这类部署工具回滚功能小心部署问题代码
指令可以版本回滚部署之前为此最好所有
开发进行回滚操作
显而易见以往用来编写操作顺序手册进行维护时间
一点编写部署工具代码可以众多好处
通过 Web 界面进行部署工具
Capistrano
部署工具需要使用命令行执行操作开发者以外
实施部署 Webistrano Strano 工具提供通过 Web 执行
部署指令界面能够帮助团队成员解决这个问题团队除了开发
以外往往包含美工 HTML 编辑开发过程创建
团队所有相关人员放心部署环境至关重要 9.1 列出
具有代表性部署工具
9.1  具有代表性部署工具
名称 URL 备注
Capistrano https://github.com/capistrano/capistrano Ruby
开发代表性部署工具
Mina https://github.com/nadarei/mina Ruby
开发部署工具
Fabric http://fabfile.org/ Python
开发部署工具
Cinnamon https://github.com/kentaro/cinnamon Perl
开发部署工具
Webistrano※ https://github.com/kentaro/webistrano
通过 Web 执行 Capistrano
工具
Strano https://github.com/joelmoss/strano
通过 Web 执行 Capistrano
工具 Webistrano 采用
中间件不同
 ※
由于开发已经停止开发这里介绍 Fork
图灵社区会员 lxghost2 尊重版权
----------------------- Page 217-----------------------
190  
9  使用 GitHub 开发流程
导入开发注意事项
随着团队人数增多以及成熟提高开发速度越来越这时
部署尚未完成另一开发者已经处理下一个 Pull Request ,
开始实施下一个部署这种情况一旦正式环境出现问题
分辨哪个部署造成影响为了应对这种情况建议部署实施
通过工具上锁或者实施部署通知整个团队通过严格贯彻
这类规则消除隐患
● 
重视测试
测试自动化
如果每次部署正式环境需要测试环境手动进行测试
开发流程无从谈起所以必须测试自动化自动检测
是否代码意外破坏以及是否出现 BUG 。
编写测试代码通过全部测试
开发者必须编写测试代码成品代码 Pull Request
包含测试代码不可以合并 master 分支中的只有包含测试
并且通过所有测试成品代码可以合并 master 分支
开发者确认代码本地环境通过所有测试 push
仓库随后 Jenkins Travis CI CI 工具自动进行测试测试
结果 CI 工具第一时间通知开发者经过流程系统能够自动
软件是否遭到破坏我们 8.6 已经详细讲解如何构建
GitHub
集成 Jenkins 环境各位加以参考
维护测试代码
注意测试代码必须时常进行维护保证能够开发流程
承受速度范围完成所有测试顺便,GitHub 公司可以 200
实施 14 000 自动测试 A 。这么时间完成如此测试项目
A http://zachholman.com/posts/how-github-works/
图灵社区会员 lxghost2 尊重版权
----------------------- Page 218-----------------------
9.5 
模拟体验 GitHub… Flow  191
效率实在惊人
工作流程部署中心通过简单功能规则持续高速
安全进行部署至此相信各位已经有了一定程度理解
不论添加功能还是修正 BUG ,全都通过同一流程进行
高效源于简单结果简单构造开发流程兼具
速度灵活性
各位不妨自己团队试着采用开发流程
9.5 
模拟体验 GitHub Flow
通过前面讲解各位对开实施 GitHub Flow 步骤应该有了
具体了解现在我们一起结合 GitHub 交流体验流程
现在假设各位负责软件开发功能开发者并且所在团队
实践 GitHub Flow。账户名为 ituring ,仓库名为 fizzbuzz。我们即将
软件已经公开代码各位仓库 Fork 自己 GitHub 账户
我们一起动手尝试
A
下面我们“Fizzbuzz 问题作为编程题材
● Fizzbuzz
说明
假设我们团队已经开发名叫 Fizzbuzz 软件
软件输出 1 100 数字如下显示
● 3
倍数显示 fizz
● 5
倍数显示 buzz
● 3
5 公倍数显示 fizzbuzz
上述情况直接显示数字
A http://en.wikipedia.org/wiki/Fizz_buzz
图灵社区会员 lxghost2 尊重版权
----------------------- Page 219-----------------------
192  
9  使用 GitHub 开发流程
就是这样简单软件
$ ruby exec.rb
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
fizzbuzz
省略
现在讲解我们作为这个软件开发团队实践 GitHub
Flow
情景
● 
添加功能
现在我们分配工作就是添加下面这个功能
含有 7 数字显示 GitHub
看起来应该简单我们这就动手
● 
创建分支
GitHub Flow 无论实现功能还是修正 BUG ,需要
正常运行最新 master 分支新建分支所有实际修改这个
分支进行
如果尚未 clone 仓库
首先需要 Fork 已经公开仓库 A 。如果尚未获取仓库需要使用
A https://github.com/ituring/fizzbuzz
图灵社区会员 lxghost2 尊重版权
----------------------- Page 220-----------------------
9.5 
模拟体验 GitHub… Flow  193
下面命令进行 clone。各位仓库路径替换自己对应路径
$ git clone git@github.com:ituring/fizzbuzz.git
Cloning into 'fizzbuzz'...
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 18 (delta 2), reused 17 (delta 1)
Receiving objects: 100% (18/18), done.
Resolving deltas: 100% (2/2), done.
$ cd fizzbuzz
fizzbuzz 目录新建仓库这个仓库远程仓库拥有相同
状态
如果之前 clone 仓库
假设本地已经之前 clone 仓库现在正在开发途中并不需要
重新 clone ,那么我们应该master 分支更新远程仓库最新 master
状态流程简单切换本地仓库 master 分支然后
仓库 master 分支 pull 本地即可
$ git checkout master
Switched to branch 'master'
$ git pull
First, rewinding head to replay your work on top of it...
Fast-forwarded master to 51412d2d518af30deaa8fd5e6469c9376ee1f447.
通过以上操作我们手头有了最新状态 master 分支
创建特性分支
现在我们已经完成 master 分支创建分支所有准备工作
分支名字 7-case-output-github。
master 分支使用命令创建分支切换分支
$ git checkout -b 7-case-output-github
Switched to a new branch '7-case-output-github'
方便团队其他通过分支名称知道我们什么我们 GitHub
端的远程仓库创建同名分支
图灵社区会员 lxghost2 尊重版权
----------------------- Page 221-----------------------
194  
9  使用 GitHub 开发流程
$ git push -u origin 7-case-output-github
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:ituring/fizzbuzz.git
* [new branch] 7-case-output-github -> 7-case-output-github
Branch 7-case-output-github set up to track remote branch 7-case-output
-github from origin.
创建分支大概就是这个步骤今后我们可以每当工作告一段落
定期这个特性分支 push 远程仓库
● 
实现功能
现在我们实现功能——含有数字 7 显示 GitHub。原本代码
(fizzbuzz.rb )
如下
class Fizzbuzz
def calculate number
if number % 3 == 0 && number % 5 == 0
'fizzbuzz'
elsif number % 3 == 0
'fizz'
elsif number % 5 == 0
'buzz'
else
number
end
end
end
现在我们添加含有数字 7 代码,diff 如下
@@ -6,6 +6,8 @@ class Fizzbuzz
'fizz'
elsif number % 5 == 0
'buzz'
+ elsif number.to_s.include? '7'
+ 'GitHub'
else
number
end
我们试着执行一下结果运行正常
$ ruby exec.rb
1
2
图灵社区会员 lxghost2 尊重版权
----------------------- Page 222-----------------------
9.5 
模拟体验 GitHub… Flow  195
fizz
4
buzz
fizz
GitHub
8
fizz
buzz
11
fizz
13
14
fizzbuzz
16
GitHub
提交实现内容
$ git commit -am "Add output GitHub"
[7-case-output-github 676c64d] Add output GitHub
1 file changed, 2 insertions(+)
功能已经顺利实现现在 push 远程仓库
$ git push
Counting objects: 7, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 385 bytes, done.
Total 4 (delta 2), reused 0 (delta 0)
To git@github.com:ituring/fizzbuzz.git
ca9ebf6..676c64d 7-case-output-github -> 7-case-output-github
GitHub
远程仓库中的分支应该已经更新我们打开 GitHub
分支列表页面看到远程分支 master 分支差别 9.6 )。点击
之后可以查看别的详细内容
9.6  分支列表页面
图灵社区会员 lxghost2 尊重版权
----------------------- Page 223-----------------------
196  
9  使用 GitHub 开发流程
● 
创建 Pull  Request
至此我们已经顺利实现功能接下来就是 7-case-output-
github
分支创建 Pull Request 发送 master 分支请求 master
A
9.7 ) 。创建 Pull Request 相关操作参照 6
9.7  master 分支发送 Pull  Request
  ·
含有数字 7 显示 GitHub
已经实现审查
Pull Request 希望得到审查如果特定进行
可以评论加入“@ 用户名”,这样用户收到 Notifications 。
现在我们已经创建发送 Pull Request ,等待其他开发者
即可
● 
接收反馈
距离发送 Pull Request 已经几个小时我们再次登录 GitHub。
此时其他开发者已经反馈 9.8 )。
对方我们指出 2 问题
缩进不正常
没有测试代码
点击缩进好像所指链接我们可以看到 9.9
页面其中清楚显示评论所指代码位置确实前面 elsif
没有对齐
A Pull Request
创建默认指向 Fork 来源仓库由于获取示例仓库
Fork ,所以这里我们需要更改目标仓库路径正式采用 GitHub Flow 开发
现场需要进行 Fork 操作所以实际应用需要修改目标路径操作
图灵社区会员 lxghost2 尊重版权
----------------------- Page 224-----------------------
9.5 
模拟体验 GitHub… Flow  197
9.8  其他开发者反馈
  ·
含有数字 7 显示 GitHub
已经实现审查
缩进好像
没有关于实现测试代码添加
9.9  评论代码所在位置
缩进好像
至于测试代码我们确实添加功能没有添加相应测试
对方指出问题确实存在接下来我们着手处理 2 问题
● 
修正缩进
下面我们修正对方指出代码缩进问题修正 diff 如下

@@ -6,7 +6,7 @@ class Fizzbuzz
'fizz'
图灵社区会员 lxghost2 尊重版权
----------------------- Page 225-----------------------
198  
9  使用 GitHub 开发流程
elsif number % 5 == 0
'buzz'
- elsif number.to_s.include? '7'
+ elsif number.to_s.include? '7'
'GitHub'
else
number
然后修改提交本地 7-case-output-github 分支
$ git commit -am "Fix indent"
[7-case-output-github f15fe2e] Fix indent
1 file changed, 1 insertion(+), 1 deletion(-)
接下来分支 push GitHub 端的远程仓库远程仓库分支
修改
$ git push
Counting objects: 7, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 335 bytes, done.
Total 4 (delta 2), reused 0 (delta 0)
To git@github.com:github-book/fizzbuzz.git
676c64d..f15fe2e 7-case-output-github -> 7-case-output-github
这时我们打开 GitHub 查看 Pull Request ,发现这个用于修正
提交已经添加 Pull Request (9.10 )。
9.10  缩进修正已经添加 Pull  Request
…… ·
含有数字 7 显示 GitHub
已经实现审查
缩进好像
没有关于实现测试代码添加
图灵社区会员 lxghost2 尊重版权
----------------------- Page 226-----------------------
9.5 
模拟体验 GitHub… Flow  199
● 
添加测试
GitHub Flow 不可以没有测试代码成品代码加入 master
分支因此我们其他开发者指出没有编写测试代码
一般来说应该下面这样顺序
master 分支更新最新状态
自己开发环境确认通过所有测试
master 分支创建分支
编写测试代码
编写实现目标功能代码
确认通过所有测试并且没有出现退步(Regression )现象
发送 Pull Request 请求合并 master 分支
也就是应该编写目标功能测试代码保证测试代码全部通过
基准编写功能代码这个操作顺序能够极力减少出现 BUG 可能
并且可以随时修改功能代码由于我们直接编写功能功能
所以需要回过头来添加测试代码
根据有的测试代码实现功能编写测试代码我们突然
有了疑问
例如 75 这个数字既是 3 倍数 5 倍数按照功能
显示 fizzbuzz ,那么添加功能应该显示 GitHub 还是
应该显示 fizzbuzzGitHub 这种组合形式关于这种情况我们没有
接到说明所以保险起见我们通过 Pull Request 确认一下
Pull Request 写下 9.11 评论
不久我们到了其他开发者反馈 9.12 )。
按照反馈指示我们 fizzbuzz_spec.rb 添加测试代码
图灵社区会员 lxghost2 尊重版权
----------------------- Page 227-----------------------
200  
9  使用 GitHub 开发流程
9.11  通过评论询问规范
@yuria…
感谢审查
关于功能方面问题
比如实现之前数字 75 应该显示 fizzbuzz。
实现由于属于含有数字 7”范畴显示 GitHub。
有没有显示 fizzbuzzGitHub 这种复合形式
9.12  规范相关问题回答
原来如此没有想到这种情况
按照以下规范实现
………… ·
便是 3 或者 5 倍数只要含有数字 7 显示 GitHub
context 'GitHub number' do
it { subject.calculate(17).should eq 'GitHub' }
it { subject.calculate(27).should eq 'GitHub' }
it { subject.calculate(75).should eq 'GitHub' }
it { subject.calculate(77).should eq 'GitHub' }
end
我们添加具有以下意图测试
● 17
77 包含 7 ,所以显示 GitHub
● 27
虽然 3 倍数仍然显示 GitHub
● 75
既是 3 倍数 5 倍数仍然显示 GitHub
然后执行测试
$ rspec
...........FF.
Failures:
1) Fizzbuzz GitHub number
Failure/Error: it { subject.calculate(27).should eq 'GitHub' }
expected: "GitHub"
got: "fizz"
图灵社区会员 lxghost2 尊重版权
----------------------- Page 228-----------------------
9.5 
模拟体验 GitHub… Flow  201
(compared using ==)
# ./spec/fizzbuzz_spec.rb:25:in `block (3 levels) in <top (required)>'
2) Fizzbuzz GitHub number
Failure/Error: it { subject.calculate(75).should eq 'GitHub' }
expected: "GitHub"
got: "fizzbuzz"
(compared using ==)
# ./spec/fizzbuzz_spec.rb:26:in `block (3 levels) in <top (required)>'
Finished in 0.00373 seconds
14 examples, 2 failures
Failed examples:
rspec ./spec/fizzbuzz_spec.rb:25 # Fizzbuzz GitHub number
rspec ./spec/fizzbuzz_spec.rb:26 # Fizzbuzz GitHub number
上面我们可以看到,27 75 没有显示 GitHub ,因此代码
进行修正修正差别如下
@@ -1,13 +1,13 @@
class Fizzbuzz
def calculate number
- if number % 3 == 0 && number % 5 == 0
+ if number.to_s.include? '7'
+ 'GitHub'
+ elsif number % 3 == 0 && number % 5 == 0
'fizzbuzz'
elsif number % 3 == 0
'fizz'
elsif number % 5 == 0
'buzz'
- elsif number.to_s.include? '7'
- 'GitHub'
else
number
end
我们判定是否显示 GitHub 语句位置代码
通过所有测试
图灵社区会员 lxghost2 尊重版权
----------------------- Page 229-----------------------
202  
9  使用 GitHub 开发流程
$ rspec
..............
Finished in 0.00353 seconds
14 examples, 0 failures
至此我们添加测试代码成品代码按照预期顺利执行
● 
培育 Pull  Request
为了我们编写功能合并 master 分支进行提交
push 。
$ git commit -am "Fix output GitHub"
[7-case-output-github 5d1daae] Fix output GitHub
2 files changed, 9 insertions(+), 3 deletions(-)
$ git push
Counting objects: 11, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 531 bytes, done.
Total 6 (delta 3), reused 0 (delta 0)
To git@github.com:ituring/fizzbuzz.git
f15fe2e..5d1daae 7-case-output-github -> 7-case-output-github
确认 Pull Request 没有问题之后便可以通过评论请求 master
9.13 )。
一系列反馈代码更新过程我们称作培育 Pull Request 。
9.13  Pull  Request 添加评论
测试代码已经添加功能实现
审查问题进行合并
● Pull  Request
合并
随后我们代码通过其他开发者审查顺利合并 master
图灵社区会员 lxghost2 尊重版权
----------------------- Page 230-----------------------
9.6 
团队实践 GitHub… Flow 几点建议  203
分支 9.14 )。
9.14  合并 master 分支情景
合并完成这个 master 分支立刻部署正式环境 A 。
通过创建 Pull Request 获取反馈逐渐培育 Pull Request 过程想必
各位已经有了初步了解实际开发现场开发者共同参与
这个交流过程
习惯 Pull Request 进行交流我们精确表达
意图审查效率越来越熟练运用 Pull Request
流程成功关键
希望各位开发流程应用自己开发现场以便更加灵活
使用 GitHub。
9.6 
团队实践 GitHub Flow 几点建议
至此相信各位已经清楚 GitHub Flow 需要什么样流程实施
但是开发现场实际采用流程遇到一些令人苦恼问题
这里笔者自身经验出发各位介绍几个成功运用开发
窍门
A 
一系列交流可以 GitHub 阅览
  https://github.com/ituring/fizzbuzz/pull/1
图灵社区会员 lxghost2 尊重版权
----------------------- Page 231-----------------------
204  
9  使用 GitHub 开发流程
● 
减小 Pull  Request 体积
团队开发喜欢功能分支进行开发
各位不妨思考一下功能是不是继续细分
比方说接下来功能我们预计 2 实现试想一下
大约 2 时间编写出来代码即便最后顺利进入 Pull Request 阶段
这个代码代码审查带来非常负担
开发时间或者代码代码审查成本
开发时间审查难以了解开发功能背景代码
难以阅读代码细节这样一来 BUG 容易出现
整个团队代码审查都会漏洞
这种团队状态环境经过漫长时间编写出来代码突然
部署正式环境将会高风险工作结果便
导致整个开发速度减缓
开发 2 分支相比开发 1 分支代码
理解代码成本相对而言 master 分支
类推 3 时间发出代码怎样 1 时间发出代码
怎样相信各位可以想象得出
刚刚采用开发流程整个流程不是习惯建议各位
目标功能细分尽量缩小 Pull Request 体积保证小时几天
master 分支发送一次 Pull Request ,通过多次合并实现功能
这样一来不但开发节奏软件成长过程能够更加
可靠
所以各位创建分支之前不妨目标功能内容进行
看看是否分割几个小的 Pull Request 。
● 
准备运行环境
不管我们多少测试代码只要分支包含软件关键部分
修改部署正式环境需要极大勇气而且这时伴随
风险
图灵社区会员 lxghost2 尊重版权
----------------------- Page 232-----------------------
9.6 
团队实践 GitHub… Flow 几点建议  205
于是我们不妨创建正式环境高度相似预演(Staging )
这个预演环境中部关键修改借以确认代码实际运行状况
当然预演环境部署需要实现自动化
如果分支包含对数进行大幅修改”“实施大规模
”“充值处理部分进行大幅修改这类系统重大影响关键
修改安全起见最好部署预演环境进行运行
不要所有修改拿到预演环境进行运行免得画蛇添足
近来 Web 应用程序往往部分用户通常 1% )进行
通过 Twitter SNS 监控是否出现重大影响
如果出于不安部署向后搁置不如准备环境消除
代码可以迅速部署正式环境
● 
不要 Pull  Request 反馈
笔者接到 Pull Request 遇到下面这种情况代码存在
进行多次指正修改仍然无法达到 master 分支合并水准
这种情况大概原因
交流不足如果创建 Pull Request 理由没有获得认同
不要通过 Pull Request 进行讨论而是应该选择其他手段进行交流
解决途径直接面谈
另一原因技术能力不足如果代码经常被指出问题那么
编程能力方面问题就是团队编写代码没有明确规则
避免无用讨论浪费时间团队应该制定最低限度编程
并且告知团队成员如果开发过程需要其他规则
这些规则整合 Wiki 便于阅览修改
如果设计方法实现变量命名方面频繁出现问题
实施一些提高开发者编码技术措施效果一遍反复指正
编程
组织学习小组共享知识
共享参考资料
图灵社区会员 lxghost2 尊重版权
----------------------- Page 233-----------------------
206  
9  使用 GitHub 开发流程
不知各位团队是否实施这些措施这些措施之中
收效最佳
GitHub Flow
是以部署中心开发流程所以要求团队
开发者编写品质代码以便顺利通过审查迅速完成合并
部署过程因此需要锻炼开发者保证团队成员达到
水平
● 
不要积攒 Pull  Request
部署中心开发流程如果总有大量 Pull Request 处于
审查等待修正状态导致长期无法部署引发严重问题
如果开发者忙于实现各自功能所有精力
编写代码创建 Pull Request 势必忽视审查反馈工作时间
无法部署 Pull Request 堆积如山
防止情况发生建议团队制定规则创建 Pull
Request
其他 Pull Request 进行审查反馈可以
部署及时部署
这样一来自己创建 Pull Request 必须处理其他 Pull
Request ,
可以有效避免 Pull Request 堆积情况发生
9.7 GitHub Flow
小结
笔者根据自身经验提出一些开发现场容易出现问题各位
开发过程必然遇到其他恼人问题对于这些问题遵循
寻找解决方案
开发流程部署中心
高速源于简单
图灵社区会员 lxghost2 尊重版权
----------------------- Page 234-----------------------
9.8 Git… Flow——
发布中心开发模式  207
只要偏离各位一定找到适合自己开发现场解决
方案
9.8 Git Flow——
发布中心开发模式
荷兰程序员 Vincent Driessen 发表博客 A ,分支策略
广为人就是 A successful Git branching model 。这里我们各位
介绍基础组合 GitHub 开发流程
这个开发流程分支显示代码当前状态流程
设置负责管理软件发布 Release 发布管理员适用发布中心
软件开发
通过整体流程图 9.15 ),我们看出流程分支代码
流向十分复杂关于部分详细内容我们稍后进行讲解
● 
便于理解标准流程
软件开发者角度观察开发流程发现流程分支
表示标准软件开发开发状态迁移
开发分支(develop )创建工作分支(feature branches ),
功能实现修正
工作分支(feature branches )修改结束开发分支
(develop )
进行合并
重复上述❷ ,不断实现功能直至可以发布
创建用于发布分支(release branches ),处理发布工作
发布工作完成 master 分支合并版本标签(Tag )进行发布
如果发布软件出现 BUG ,标签版本基础进行修正
(hotfixes )
A http://nvie.com/posts/a-successful-git-branching-model/
图灵社区会员 lxghost2 尊重版权
----------------------- Page 235-----------------------
208  
9  使用 GitHub 开发流程
9.15  A successful Git branching model
 ※ Vincent Driessen “A successful Git branching model-nvie.com”(http://nvie.com/posts/
a-successful-git-branching-model/ )
整个流程看上去应该比较理解流程亮点在于考虑
紧急 BUG 应对措施
图灵社区会员 lxghost2 尊重版权
----------------------- Page 236-----------------------
9.9 
导入 Git… Flow 准备  209
● 
有时显得过于复杂
这个开发流程问题在于需要记忆分支状态实施之前
整个开发流程进行系统学习虽然团队成员可以通过我们即将
git-flowA 工具得到辅助情况流程整体对于我们
开发现场仍然显得过于复杂
这个流程程序员必须理解自己正在进行修改哪些分支
产生影响分支工作结束有时需要多个目标分支合并
流程最为复杂部分需要团队谨慎处理同时由于复杂
容易出现操作失误人为错误所以团队需要使用 git-flow
进行辅助时刻保证开发偏离流程
考虑上述种种因素各位团队采用开发流程之前必须
系统学习充分掌握优势劣势下面我们流程辅助
构筑环境通过 Git GitHub 操作各位进行详细讲解
9.9 
导入 Git Flow 准备
● 
安装 git-flow
现在我们安装 git-flow ,各位根据自己当前环境进行安装
git-flow
辅助 Git Flow 工具虽然安装可以实施开发
流程那样一来所有工作必须手动完成防止出现人为失误
还是建议各位安装这个工具
 Mac
安装
如果已经安装 Homebrew ,可以下面命令轻松完成 git-flow
安装
$ brew install git-flow
A  https://github.com/nvie/gitflow
图灵社区会员 lxghost2 尊重版权
----------------------- Page 237-----------------------
210  
9  使用 GitHub 开发流程
如果安装 MacPorts ,使用下面命令
$ sudo port install git-flow
 Linux
安装
Ubuntu
Debian GNU/Linux 已经用户准备好了相应软件包
可以下面命令直接安装
$ sudo apt-get install git-flow
如果尚未导入管理工具可以下面方式安装
$ wget --no-check-certificate -q -O - https://github.com/nvie/gitflow/r
aw/develop/contrib/gitflow-installer.sh | sudo bash
实际1
确认运行状况
如果下面例子一样顺利运行 git-flow命令证明 git-
flow
已经成功安装
$ git flow
usage: git flow <subcommand>
Available subcommands are:
init Initialize a new git repo with support for the branching model.
feature Manage your feature branches.
release Manage your release branches.
hotfix Manage your hotfix branches.
support Manage your support branches.
version Shows version information.
● 
仓库初始设置
方便讲解这个流程我们假设自己正在开发博客软件
创建仓库
GitHub Git
README.md
文件名为 blog 仓库紧接着我们 clone 这个仓库
图灵社区会员 lxghost2 尊重版权
----------------------- Page 238-----------------------
9.9 
导入 Git… Flow 准备  211
示例我们账户名为 hirocaster ,仓库名为blog 。
$ git clone git@github.com:hirocaster/blog.git
Cloning into 'blog'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.
进行 git flow 初始设置
下面我们 git flow 进行初始设置由于我们打算更改默认
所以命令附上 -d参数执行以下命令仓库自动生成开发
流程所需分支各位执行 git clone务必记得执行一次这个
命令
$ cd blog
$ git flow init -d
Using default branch names.
Which branch should be used for bringing forth production releases?
- master
Branch name for production releases: [master]
Branch name for "next release" development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
查看创建分支
$ git branch -a
* develop
master
remotes/origin/HEAD -> origin/master
remotes/origin/master
可以看到 develop 分支已经创建完毕现在我们已经切换
分支
图灵社区会员 lxghost2 尊重版权
----------------------- Page 239-----------------------
212  
9  使用 GitHub 开发流程
远程仓库创建 develop 分支
目前我们本地环境拥有master develop 分支但是
GitHub
端的远程仓库 A 仍然只有 master 分支所以我们进行 push
GitHub 端的远程仓库创建 develop 分支
$ git push -u origin develop
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:hirocaster/blog.git
* [new branch] develop -> develop
Branch develop set up to track remote branch develop from origin.
$ git branch -a
* develop ←
本地develop分支
master ←
本地master分支
remotes/origin/HEAD -> origin/master
remotes/origin/develop ←GitHub
端的develop分支
remotes/origin/master ←GitHub
端的master分支
现在 GitHub 端的仓库有了 develop 分支
今后团队 GitHub 端的 develop 分支作为开发中的最新代码
我们在内所有团队成员这个分支基础进行开发
开发基本操作流程简单我们本地仓库代码进行
然后 push GitHub 更新远程仓库其他开发者 GitHub
远程仓库获取最新代码本地进行开发
开发者时刻注意分支进行任何操作之前必须执行 pull
最新代码修改完毕尽快进行 push 操作保证 GitHub 远程
代码最新状态
9.10 
模拟体验 Git Flow
接下来我们开始实践 Git Flow。
A GitHub
端的远程仓库 remotes/origin
图灵社区会员 lxghost2 尊重版权
----------------------- Page 240-----------------------
9.10 
模拟体验 Git… Flow  213
● master
分支 develop 分支区别
下面我们各位 master 分支 develop 分支相关内容
Git Flow 分支至关重要它们贯彻整个流程始终绝对
删除
 master
分支
master
分支时常保持软件可以正常运行状态由于维持
状态所以允许开发者直接 master 分支代码进行修改提交
其他分支开发工作进展可以发布程度将会 master 分支
进行合并而且合并发布成品进行发布附加包含版本
编号 Git 标签(Tag )。部分详细内容我们后面进行讲解
 develop
分支
develop
分支开发过程中的代码中心分支 master 分支一样
这个分支允许开发者直接进行修改提交
程序员 develop 分支起点新建 feature 分支 feature 分支
进行功能开发或者代码修正也就是说,develop 分支维持
过程中的最新源代码以便程序员创建 feature 分支进行自己工作
● 
feature 进行工作
feature
分支 develop 分支起点开发者直接更改代码发送
分支开发以下流程进行
develop 分支创建 feature 分支
feature 分支实现目标功能
通过 GitHub develop 分支发送 Pull Request
接受其他开发者审查 Pull Request 合并 develop 分支
develop 分支合并已经完成工作 feature 分支失去
图灵社区会员 lxghost2 尊重版权
----------------------- Page 241-----------------------
214  
9  使用 GitHub 开发流程
可以适当时候删除
方便进行具体讲解现在假设我们软件实现添加用户
功能
创建分支
上面我们提到 develop 分支 feature 分支起点所以我们
最新状态 develop 分支新建 feature 分支这个分支实现添加
用户功能这里我们分支 add-user。
首先 develop 分支更新最新状态我们 GitHub 远程仓库
进行 pull 操作操作 develop 分支进行
$ git pull
Already up-to-date.
由于我们本地 develop 分支已经 GitHub 远程分支最新
所以执行 git pull 命令没有任何变化如果远程分支其他开发
更新那么我们本地 develop 分支将会通过操作获取最新
代码
创建 feature 分支 add-user ,用来实现添加用户功能
$ git flow feature start add-user
Switched to a new branch 'feature/add-user'
Summary of actions:
- A new branch 'feature/add-user' was created, based on 'develop'
- You are now on branch 'feature/add-user'
Now, start committing on your feature. When done, use:
git flow feature finish add-user
我们已经创建切换到了 feature/add-user 分支保险起见我们
确认一下
$ git branch
develop
* feature/add-user
master
图灵社区会员 lxghost2 尊重版权
----------------------- Page 242-----------------------
9.10 
模拟体验 Git… Flow  215
结果显示我们处于 feature/add-user 分支现在状态正如 9.16

9.16  创建 feature 分支状态
feature/add-user develop
start
分支进行作业
接下来刚刚创建 feature/add-user 分支实现目标功能进行
实际编写代码以及提交过程在此不再赘述进行几次提交
呈现 9.17 状态
9.17  提交状态
feature/add-user develop
start
commit
commit
图灵社区会员 lxghost2 尊重版权
----------------------- Page 243-----------------------
216  
9  使用 GitHub 开发流程
● 
发送 Pull  Request
功能实现之后需要通过 GitHub 发送 Pull Request ,请求 develop
分支合并 feature/add-user 分支内容注意这里不能本地 Git
仓库进行合并而是利用 GitHub Pull Request 功能接受代码审查
然后合并远程仓库分支这样可以其他开发者看到我们
从而指出其中问题如果设计不同意见可以进行讨论
以便品质代码通过这些措施可以有效提高代码质量
首先我们 feature/add-user 分支 push GitHub 远程仓库
$ git push origin feature/add-user
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 452 bytes | 0 bytes/s, done.
Total 5 (delta 1), reused 0 (delta 0)
To git@github.com:hirocaster/blog.git
* [new branch] feature/add-user -> feature/add-user
如果其他开发者共同开发同一 feature 分支那么远程仓库
add-user
分支可能已经更新记得通过 pull 操作获取 add-user 分支
最新代码另外我们开发这个 feature 分支过程,develop
可能有了最新版本所以养成 push 之前获取最新 develop 分支
习惯确保上述之后进行 push 。
现在打开 GitHub 仓库页面切换 feature/add-user 分支
9.18 )。
点击切换分支菜单左侧绿色图标进入查看别的页面
确认一下页面显示是否 develop 分支 feature/add-user 分支
如果发现 master 其他分支需要点击右侧 Edit 按钮进行切换
9.19 )。
确认页面显示对象“develop...feature/add-user”点击
Click to create a pull request for this comparison。
随后出现录入 Pull
Request
信息页面我们发送 Pull Request 。
图灵社区会员 lxghost2 尊重版权
----------------------- Page 244-----------------------
9.10 
模拟体验 Git… Flow  217
9.18  显示 feature/add-user 分支
显示 feature/add- user 分支
9.19  切换分支按钮
切换分支
发送 Pull Request 之后便是 9.20 状态
● 
通过代码审查提高代码质量
发送 Pull Request 之后通过下列步骤利用 Pull Request 其他开发
那里获取反馈不断精炼代码
其他开发者进行代码审查 Pull Request 提供反馈
图灵社区会员 lxghost2 尊重版权
----------------------- Page 245-----------------------
218  
9  使用 GitHub 开发流程
9.20  发送 Pull  Request 分支状态
feature/add-user develop
start
commit
commit
finish PR
修正代码反映反馈内容本地 feature/add-user 分支
feature/add-user 分支 push 远程仓库自动添加之前 Pull
Request )
重复
确认 Pull Request 没有问题其他开发者合并 develop
分支
下面几个反馈要点
没有测试 or 测试通过
违反编码规则
代码品质过低命名不明确方法冗长
还有重构余地
重复部分
如果发现代码品质提高空间建议进行反馈不要急着合并
能否按照以上要点代码审查追求品质直接影响团队
编写代码能力经常审查敷衍了事随意合并最后成品软件
图灵社区会员 lxghost2 尊重版权
----------------------- Page 246-----------------------
9.10 
模拟体验 Git… Flow  219
不可能过硬。Pull Request 反馈并不属于发送 Pull Request
可以整个团队共享促进相互学习另外特别限定 Pull Request
代码审查各个成员主动进行审查能够帮助团队维持品质
高效率开发
● 
更新本地 develop 分支
我们发送 Pull Request GitHub develop 合并
本地 develop 分支我们需要进行以下操作
切换 develop 分支
执行 git pull (fetch & merge )
这样一来本地 develop 分支 GitHub 仓库获取最新状态
$ git checkout develop
Switched to branch 'develop'
$ git pull
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (1/1), done.
From github.com:hirocaster/blog
ad139da..9299f28 develop -> origin/develop
Updating ad139da..9299f28
Fast-forward
add-user-1 | 0
add-user-2 | 0
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 add-user-1
create mode 100644 add-user-2
每当需要 develop 分支创建 feature 分支记得一定要执行
上述操作保证 develop 分支处于最新状态
实际开发我们不断重复之前一系列流程不断 develop
分支添加功能功能积攒足以发布 release 分支
下面我们假设软件已经可以发布将要使用 release 分支
图灵社区会员 lxghost2 尊重版权
----------------------- Page 247-----------------------
220  
9  使用 GitHub 开发流程
● 
release 分支进行工作
现在假设我们已经通过 feature 分支 develop 分支添加
软件进入发布阶段阶段我们实现所有发布
发送 Pull Request 并且 develop 分支合并
接下来软件分配版本进行发布今后这个版本软件
BUG 修复不再进行其他支持如果发布所需工作尚未全部完成
那么绝对不可以进入我们即将讲解工作阶段我们接下来讲解
需要发布管理员责任认真执行
C
o
专栏设置默认分支
l
u
如果每次发送 Pull… Request master 分支手动切换
m
develop 分支显然容易出现操作失误我们可以更改
n GitHub
仓库设置指定 develop 分支发送 Pull… Request
默认分支省去手动修改麻烦
GitHub 仓库 Settings 页面可以找到 a Default…
Branch
项目只要这里改为 develop,我们通过浏览器访问
仓库默认显示 develop 分支发送 Pull… Request
指向 develop 分支
a  默认分支设置页面
图灵社区会员 lxghost2 尊重版权
----------------------- Page 248-----------------------
9.10 
模拟体验 Git… Flow  221
创建分支
我们最新 develop 分支着手开始 1.0.0 版本 release 工作
切换develop分支
$ git checkout develop
Switched to branch 'develop'
获取最新develop分支代码
$ git pull
Already up-to-date.
开始release分支
$ git flow release start '1.0.0'
Switched to a new branch 'release/1.0.0'
Summary of actions:
- A new branch 'release/1.0.0' was created, based on 'develop'
- You are now on branch 'release/1.0.0'
Follow-up actions:
- Bump the version number now!
- Start committing last-minute fixes in preparing your release
- When done, run:
git flow release finish '1.0.0'
release/1.0.0
分支已经成功创建就是 release 分支 9.21 )。
9.21  release 分支创建状态
feature/add-user develop release
start
commit
commit
finish PR
1.0.0 start
图灵社区会员 lxghost2 尊重版权
----------------------- Page 249-----------------------
222  
9  使用 GitHub 开发流程
分支工作
这个分支我们处理发布准备相关提交比如版本编号
变更元数据添加工作如果软件部署预演环境测试发现 BUG ,
相关修正交给这个分支记住分支绝对不可以包含
变更功能变更重大修正阶段提交应该限制
进行发布合并
发布修正全部处理我们结束分支
$ git flow release finish '1.0.0'
当前状态 9.22
9.22  release finish 之后
feature/add-user develop release
start
commit
commit
finish PR
1.0.0 start
1.0.0 finish
release
分支合并 master 分支分支合并询问提交信息
如果没有需要特别声明事项可以直接保持默认状态
图灵社区会员 lxghost2 尊重版权
----------------------- Page 250-----------------------
9.10 
模拟体验 Git… Flow  223
Merge branch 'release/1.0.0'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
接下来合并 master 分支加入版本相同编号标签
Release 1.0.0
#
# Write a tag message
# Lines starting with '#' will be ignored.
#
这里我们需要输入版本相关提交信息当前状态 9.23

9.23  master 分支添加标签状态
feature/add-user develop release master
start
commit
commit
finish PR
1.0.0 start
1.0.0 finish
tag 1.0.0
图灵社区会员 lxghost2 尊重版权
----------------------- Page 251-----------------------
224  
9  使用 GitHub 开发流程
随后 release 分支状态合并 develop 分支如果出现合并
系统询问提交信息
Merge branch 'release/1.0.0' into develop
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
全部工作结束显示如下字样
$ git flow release finish '1.0.0'
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push" to publish your local commits)
Merge made by the 'recursive' strategy.
release | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 release
Switched to branch 'develop'
Your branch is up-to-date with 'origin/develop'.
Merge made by the 'recursive' strategy.
release | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 release
Deleted branch release/1.0.0 (was 9a754a2).
Summary of actions:
- Latest objects have been fetched from 'origin'
- Release branch has been merged into 'master'
- The release was tagged '1.0.0'
- Release branch has been back-merged into 'develop'
- Release branch 'release/1.0.0' has been deleted
当前状态 9.24
查看版本标签
通过前面一系列操作我们创建发布版本相同 Git 标签
$ git tag
1.0.0
今后如果遇到什么问题只要指定这个标签可以软件回溯
相应版本
图灵社区会员 lxghost2 尊重版权
----------------------- Page 252-----------------------
9.10 
模拟体验 Git… Flow  225
9.24  release 分支合并 develop 分支状态
feature/add-user develop release master
start
commit
commit
finish PR
1.0.0 start
1.0.0 finish
tag 1.0.0
● 
更新远程仓库
至此我们多个分支进行修改所以需要利用 push 操作修改
更新 GitHub 端的远程仓库我们 develop 分支开始
$ git push origin develop
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 360 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
To git@github.com:hirocaster/blog.git
9299f28..c8add0a develop -> develop
然后 master 分支
图灵社区会员 lxghost2 尊重版权
----------------------- Page 253-----------------------
226  
9  使用 GitHub 开发流程
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 5 commits.
(use "git push" to publish your local commits)
$ git push origin master
Counting objects: 1, done.
Writing objects: 100% (1/1), 227 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:hirocaster/blog.git
ad139da..5651cfd master -> master
push 标签信息
$ git push --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 163 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:hirocaster/blog.git
* [new tag] 1.0.0 -> 1.0.0
版本 1.0.0 标签信息已经 push 完毕现在只要发布 master
整个发布工作结束
● 
hotfix 分支进行工作
hotfix
分支不是期中计划出现分支紧急应对
只有当前发布版本出现 BUG 漏洞而且严重程度要求
开发必须立刻处理无法等到下一个版本发布,hotfix 分支
创建
因此,hotfix 分支是以发布版本标签 master 分支起点
hotfix 分支可以影响 develop 分支正常开发情况其他
开发者处理成品修正工作
9.25 分支迁移过程示意图
创建分支
遇到情况需要创建 hotfix 分支进行应对
最新 1.0.0 发现 BUG 漏洞
图灵社区会员 lxghost2 尊重版权
----------------------- Page 254-----------------------
9.10 
模拟体验 Git… Flow  227
● develop
分支正在开发功能无法面向用户进行发布
漏洞需要及早处理无法等到下一次版本发布
9.25  hotfix 分支迁移
develop hotfix master
tag 1.0.0
start
commit
finish
PR PR tag 1.0.1
假设修复 BUG 版本 1.0.1。
如果本地仓库尚未 GitHub 远程仓库获取标签信息 A ,需要
进行获取操作当然如果标签就是本地仓库创建那么不必
操作不过为了保险起见还是建议各位远程仓库最新信息
获取本地确认标签版本编号是否以下命令可以任何分支
执行
$ git fetch origin
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 1 (delta 0)
Unpacking objects: 100% (1/1), done.
From github.com:hirocaster/blog
* [new tag] 1.0.0 -> 1.0.0
现在 1.0.0 标签信息起点创建名为 1.0.1 hotfix 分支
$ git flow hotfix start '1.0.1' '1.0.0'
Switched to a new branch 'hotfix/1.0.1'
Summary of actions:
A 
相当于示例 1.0.0 信息
图灵社区会员 lxghost2 尊重版权
----------------------- Page 255-----------------------
228  
9  使用 GitHub 开发流程
- A new branch 'hotfix/1.0.1' was created, based on '1.0.0'
- You are now on branch 'hotfix/1.0.1'
Follow-up actions:
- Bump the version number now!
- Start committing your hot fixes
- When done, run:
git flow hotfix finish '1.0.1'
1.0.0 标签起点成功创建 hotfix/1.0.1 分支我们这个分支
修复软件漏洞进行提交
修复工作全部结束 hotfix 分支 push GitHub 远程仓库
master 分支发送 Pull Request 。
$ git push origin hotfix/1.0.1
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 242 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@github.com:hirocaster/blog.git
* [new branch] hotfix/1.0.1 -> hotfix/1.0.1
创建标签进行发布
假设我们发送 Pull Request 经过其他开发者审查并且已经
master 分支合并现在利用 GitHub 功能创建 1.0.1 标签
访问 GitHub 仓库页面菜单选择 release ,打开仓库
信息 9.26 )。页面显示我们之前创建 1.0.0 标签相关信息
9.27 )。我们可以这个页面查看以及创建标签相关信息
9.26  显示发布信息
点击 release
图灵社区会员 lxghost2 尊重版权
----------------------- Page 256-----------------------
9.10 
模拟体验 Git… Flow  229
9.27  标签 1.0.0 信息
接下来我们 hotfix 创建 1.0.1 标签点击 Draft a new
release
按钮输入标签相关信息 9.28 )。Tag version 输入
1.0.1,
Target 指定 master 分支此时 master 分支已经合并
hotfix 1.0.1
分支修改。Release title Describe this release 不是
项目各位可以根据自身情况简明扼要输入所需信息最后点击
Publish release
便完成创建标签工作 9.29 )。
9.28  创建 1.0.1 标签
图灵社区会员 lxghost2 尊重版权
----------------------- Page 257-----------------------
230  
9  使用 GitHub 开发流程
9.29  1.0.1 创建状态
这个 1.0.1 版本发布之前发布成品完成生命周期
现在我们本地仓库获取一次标签确认 1.0.1 标签是否成功
创建
$ git fetch origin
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (1/1), done.
From github.com:hirocaster/blog
5651cfd..af97962 master -> origin/master
* [new tag] 1.0.1 -> 1.0.1
$ git tag
1.0.0
1.0.1
hotfix 分支合并 develop 分支
至此我们虽然已经修正发布代码问题但是开发中的 develop
分支存在这些漏洞 BUG 。因此我们需要 1.0.1 修改合并
develop
分支具体操作简单登录 GitHub ,hotfix/1.0.1 分支
develop 分支发送 Pull Request 即可经过其他开发者审查修改
内容便合并 develop 分支
如果合并 develop 分支出现异常切记不要 hotfix/1.0.1 分支
进行修正此时应该完成 hotfix 分支 develop 分支合并工作
然后 develop 分支尽快修复相关问题。hotfix/1.0.1 只是针对 master
分支进行内容修改如果强行 develop 分支考虑进去可能带来
意料之外 BUG 。另外如果成品软件包含 hotfix 以外多余
图灵社区会员 lxghost2 尊重版权
----------------------- Page 258-----------------------
9.10 
模拟体验 Git… Flow  231
修改将来这个版本需要 hotfix 我们不得不考虑复杂
问题因此一定要保证 hotfix 分支 master 分支内容进行
修改
hotfix
分支 master 分支 develop 分支合并之后完成使命
可以删除
以上便是 hotfix 分支使用方法至此我们讲解分支迁移正如
9.30
9.30  hotfix 分支合并状态
feature develop release hotfix master
start
finish PR
start
finish
tag 1.0.0
start
finish
tag 1.0.1
图灵社区会员 lxghost2 尊重版权
----------------------- Page 259-----------------------
232  
9  使用 GitHub 开发流程
9.11 Git Flow
小结
开发流程软件开发世界存在已久没有什么新颖
因如此容易软件开发者理解
但是由于实际开发现场需要分工合作开发流程往往
变得复杂建议各位开发流程图 A 放大张贴墙壁这样
有效帮助团队成员理解流程内容
C
o
专栏版本分配规则
l
u
版本控制策略规定软件版本分配规则因此制定
m
应当尽量简单易懂
n
比如 x.y.z 格式进行版本管理规则如下
●… …x
重大功能变更版本向下兼容 1,此时 y z
数字 0
●… y
添加功能或者删除功能 1,此时 z 数字 0
●… z
进行内部修改后加 1
下面具体例子
●… 1.0.0:
最初发布版本
●… 1.0.1:
修正轻微 BUG
●… 1.0.2:
修复漏洞
●… 1.1.0:
添加功能
●… 2.0.0:
更新整体 UI 添加功能
便是版本大致分配规则
如果团队采用 Git…Flow,那么成员交流时候经常
版本因此版本控制策略制定
A  http://nvie.com/fi les/Git-branching-model.pdf
图灵社区会员 lxghost2 尊重版权
----------------------- Page 260-----------------------
10
GitHub应用企业
图灵社区会员 lxghost2 尊重版权
----------------------- Page 261-----------------------
234  
10   GitHub 应用企业
我们企业工作场所引入 GitHub 相关问题进行
探讨程序员应该资源集中编写优秀软件,GitHub 辅助
过程工具因此当今软件开发企业理应积极引入 GitHub。
各位讲解一些有用信息帮助各位企业引入 GitHub。
10.1 
世界标准开发环境引入企业现场
笔者认为,GitHub 已经称得上一种世界标准开发环境至少
世界几乎所有开源项目 GitHub 公开源代码
另外已经相当企业开始使用 OSS。相信各位读者之中
相当一部分开源世界有着不可分割关联
● 
企业引入 GitHub 好处
使 GitHub ,
GitHub
引入公司这些可以按照自己习惯方式进行开发不会
多余压力同样入行程序员企业使用 GitHub ,使
接触开源开发世界促使他们 GitHub 众多软件项目
兴趣
软件行业人才流动性一般情况程序员半途加入项目需要
熟悉企业内部软件项目以及代码相关信息加入发挥作用
需要 2 ~4 时间
然而由于相当程序员使用 GitHub ,所以上述情况如果
应用 GitHub 企业可能员工公司第一开始编写代码
发送 Pull Request 知道,GitHub 全世界已经相当普及
另外,GitHub 省去维护内部仓库服务器成本程序员
全神贯注开发软件
图灵社区会员 lxghost2 尊重版权
----------------------- Page 262-----------------------
10.1 
世界标准开发环境引入企业现场  235
● 
使用 Organization
企业导入 GitHub 建议使用 Organization 账户 A 。利用功能
让开使用同一控制面板能够创建团队统一管理权限
账户企业提供用户管理支付便捷功能
费用个人账户不同具体情况参考 GitHub Organization
B
Plans 。
● 
确认 Github 安全性
由于源代码相当于企业财产企业导入 GitHub 势必
信息安全体制有所顾虑其实 GitHub 公司已经网络发布安全
相关信息
用户数据不仅严密保管 GitHub 公司数据中心公司还给
人员制定严格操作规范相关权限详细内容查阅官方网站 C 。
● 
注意维护时间
GitHub
年内几次短时间系统维护国内企业一点
需要加以注意
GitHub
维护时间美国深夜因为时差关系国内
也就是说几天我们可能工作时间无法访问 GitHub。
GitHub
维护发布系统广播而且 Git 分散版本管理
服务器维护并不导致项目开发彻底停滞只是为了防止意外情况
发生最好留意一下服务器维护日期
GitHub
大规模系统维护公告发布官方博客 BroadcastsD
10.1 个人控制面板上方显示这个 Broadcasts 。如果
A https://github.com/blog/674-introducing-organizations
B https://github.com/pricing
C https://help.github.com/articles/github-security
D https://github.com/blog/broadcasts
图灵社区会员 lxghost2 尊重版权
----------------------- Page 263-----------------------
236  
10   GitHub 应用企业
各位每天使用 GitHub ,那么基本不用担心信息
10.1  控制面板 Broadcasts
● 
查看故障信息
A
GitHub
官网公开故障信息 10.2 ) 。如果一些细微故障
进去,GitHub 发生故障频率还是相当但是各位故障信息
发现故障反应处理十分迅速
10.2  公开故障信息日志
如果各位正在开发软件需要规定时间发布建议事先构建
GitHub
之外备用发布方案以便 GitHub 故障保证按时发布
A  https://status.github.com/messages
图灵社区会员 lxghost2 尊重版权
----------------------- Page 264-----------------------
10.2 GitHub… Enterprise  237
另外,GitHub 官网图表形式公开特定时间服务
A
性能正常运行信息 10.3 ) 。各位使用服务可以拿来
参考
10.3  服务运行情况
10.2 GitHub Enterprise
GitHub
公司需要内部部署 GitHub 企业准备 GitHub Enterprise
B
(GHE ) 。
近年来,GitHub Enterprise 许多大型 IT 企业采用
A https://status.github.com/
B https://enterprise.github.com/
图灵社区会员 lxghost2 尊重版权
----------------------- Page 265-----------------------
238  
10   GitHub 应用企业
● 
概述
应用 GitHub Enterprise 等同 GitHub 所有服务全部到了
内部同时不再限制公开仓库创建另外作为面向企业
账户管理可以 LDAP/CAS 集成注意服务需要根据
单位购买许可证 A 。
GitHub
功能升级 GitHub Enterprise 接到相应通知升级
知会发送管理管理可以任选时间 GitHub Enterprise 切换
模式暂停全部服务进行升级
因为升级上传 GitHub Enterprise 文件 License 文件所以
通过浏览器便完成操作不过由于升级过程 GitHub Enterprise 所有
服务都会暂停所以企业内部事先进行协调根据笔者经验
服务进行升级整个过程大概需要 10 分钟
GitHub Enterprise
技术支持十分到位工作日上午 10 下午
6
太平洋标准时间有人负责回答根据官网描述通常问题
1 工作日内处理,GitHub Enterprise 崩溃无法运行紧急情况
30 分钟回复 B 。笔者使用普通技术支持一次
4 分钟便到了回复好感
● 
引入好处
如果各位所在企业拥有大量程序员国际企业那么引入
GitHub Enterprise
将会带来巨大收益正如 GitHub 构筑公开
社会化编程世界,GitHub Enterprise 可以企业这个封闭世界构筑
社会化编程环境
如果企业内部开发者构筑属于企业社会化编程
那么可能成为企业诞生新产品契机或者创造整个
企业通用便捷工具
A https://enterprise.github.com/pricing
B https://enterprise.github.com/support
图灵社区会员 lxghost2 尊重版权
----------------------- Page 266-----------------------
10.2 GitHub… Enterprise  239
因此笔者尤其建议拥有大量程序员企业引入 GitHub Enterprise。
● 
引入弊端
GitHub Enterprise
同样存在弊端其中显著就是运用方面
这里成本不单许可证费用金钱方面成本实际运用
准备服务器服务器安装 GitHub Enterprise ,这些人力成本
必须考虑进去而且使用过程免不了遇到服务器容或故障
更换维护作业使用 GitHub 的话不会这些烦恼
不过话说回来考虑引入 GitHub Enterprise 企业必然具有一定
规模这些企业内部或多或少自己服务器计算机需要维护
GitHub Enterprise 服务器他们不会成本提升
● 
适合引入 GitHub  Enterprise 情况
企业引入 GitHub Enterprise 理由各不相同我们这里介绍
几个典型情况各位如果各位所在企业符合情况之一
采用 GitHub Enterprise 讨论日程
源代码不可外传
某些企业看来源代码属于企业财产应该企业外部
网络这些企业适合采用 GitHub Enterprise。
我们使用 GitHub 虽然所有通信经过 HTTPS SSH
加密无法改变源代码网络传输事实此外源代码
交由 GitHub 进行保管无论 GitHub 公司内部管理多么严格
企业看来仍然存在安全风险
但是如果采用 GitHub Enterprise ,企业内部网络
服务器可以隔绝外部网络防火墙内侧构筑独立
并且拥有 GitHub 所有功能这样一来网络源代码
可以以前一样通过代码仓库进行管理避免多余安全风险
图灵社区会员 lxghost2 尊重版权
----------------------- Page 267-----------------------
240  
10   GitHub 应用企业
C
o
专栏 GitHub仓库作为 Subversion仓库使用
l
u
Subversion
a 作为热门版本管理系统一直以来
m
系统采用相信读者之前一直使用 Subversion。
n GitHub
Git,
Subversion
可以使用 GitHub。
$ svn checkout https://github.com/
用户名 / 仓库
上述命令可以 Subversion 仓库形式 GitHub 端的仓库
checkout,
提交操作可以类似方法进行提交修改内容
往常一样反映 GitHub
如果开发过程需要长期使用系统支持 Subversion,
那么可以通过上述方法 GitHub 集中管理 Subversion 仓库
a http://subversion.apache.org/
观点可以看出应用 GitHub Enterprise 一般大型企业
希望维护故障时间
关于 GitHub 系统维护故障相关注意事项我们已经
注意维护时间查看故障信息部分大家进行介绍
GitHub 服务提供所以维护故障我们控制如果
GitHub Enterprise ,可以某种程度控制
如果正在开发软件必须既定时间发布那么使用 GitHub
Enterprise
降低维护故障干扰当然我们无法完全避免
GitHub Enterprise
服务器自身故障导致停机情况发生所以这类
准时发布软件事先制定备用发布方案以防 GitHub GitHub
Enterprise
关键时刻出现问题
图灵社区会员 lxghost2 尊重版权
----------------------- Page 268-----------------------
10.3 
实现 Git 托管软件  241
10.3 
实现 Git 托管软件
有一些开源软件拥有 GitHub 相类似的功能
例如下面比较常用
A
● GitBucket
B
● GitLab
C
● Gitorious
D
● RhodeCode
如果免费创建 GitHub 类似协作开发环境那么选择上述
软件不失为办法不过这些软件虽然提供 GitHub
似的功能毕竟不是 GitHub 本身所以使用之前确认是否
包含自己需要功能
这类软件自己 UI ,所以熟悉操作需要花费一些学习
另外运用方面虽然省去购买开销软件终究无法提供
GitHub
所有便捷服务导致开发者开发过程需要时常注意
GitHub
不同因此如果追求效率还是建议选择 GitHub。
C
专栏:Bitbucket
o
l
a
u
Bitbucket
Atlassian 公司提供服务提供
m
功能 GitHub 几乎完全相同接触 GitHub 用户使用
n Bitbucket
不必学习概念由于 UI 区别所以需要
习惯过程
a https://bitbucket.org/
A https://github.com/takezoe/gitbucket
B http://gitlabhq.com
C https://gitorious.org/gitorious
D https://rhodecode.com/
图灵社区会员 lxghost2 尊重版权
----------------------- Page 269-----------------------
242  
10   GitHub 应用企业
当初服务主要分散版本管理系统 Mercurial b 提供
托管服务目前已经开始支持 Git。
服务账户仓库数量单个仓库容量没有
而且公开私有仓库可以免费创建
随意创建私有仓库确实吸引公开仓库
访问用户需要付费购买免费情况允许 5 用户拥有访
权限共用仓库势必需要支付一定费用方面
c
信息参考官方网站
如果源代码仅供个人有限使用那么 Bitbucket
GitHub
节省开支。…
b http://mercurial.selenic.com/
   
c https://bitbucket.org/plans
10.4 
小结
企业导入 GitHub 需要了解考虑问题进行讲解
GitHub
OSS 世界软件开发带来变革同样一定
各位所在企业软件开发带来理念软件开发为主企业不妨
导入 GitHub ,加以尝试
图灵社区会员 lxghost2 尊重版权
----------------------- Page 270-----------------------
附录A
支持GitHubGUI客户端
图灵社区会员 lxghost2 尊重版权
----------------------- Page 271-----------------------
244  
附录 A 支持 GitHub GUI 客户端
企业引入 GitHub 势必有一些习惯 CLI 操作
我们这些读者介绍简单 Git GUI 客户端
相较接触 CLI 而言,GUI 客户端容易入门做到
运用自如必须理解 Git clone、push 、pull 、合并基本概念
各位读者阅读同时尽量实际动手操作 GUI 客户端以便
记忆
A.1 GitHub for Mac,GitHub for Windows
GitHub
公司提供 Git 客户端辅助用户使用 GitHub 。客户端
A B
Mac
A.1 ) Windows A.2 ) 版本客户端提供
功能基本相同只是由于 OS 不同所以 UI 有些差异
A.1  GitHub for Mac
A https://mac.github.com/
B https://windows.github.com/
图灵社区会员 lxghost2 尊重版权
----------------------- Page 272-----------------------
A.1 GitHub…for… Mac,GitHub…for…Windows  245
A.2  GitHub for Windows
客户端提供如下功能
GitHub clone 仓库
显示仓库历史记录
提交仓库修改内容
切换分支
GitHub 进行 push
另外,Mac 提供以下功能
通知发送通知中心
GitHub Enterprise 集成
Mac
客户端支持操作系统通知中心功能即使通过 Mac 客户端
GitHub 进行操作我们可以打开该应程序实时 GitHub
获取通知显示通知中心非常方便
客户端不必进行繁琐设置便使用基本功能非常适合
团队中的设计师并非程序员使用各位决定是否安装之前
尝试一下
图灵社区会员 lxghost2 尊重版权
----------------------- Page 273-----------------------
246  
附录 A 支持 GitHub GUI 客户端
A.2 SourceTree
A
Atlassian
公司用户提供名为 SourceTree (A.3 ) 应用
程序一应程序同时支持 Git Mercurial ,并且可以Atlassian
提供 Bitbucket 以及内部部署使用 StashB 进行集成
A.3  SourceTree
SourceTree
除了提供 GitHub 官方客户端相同功能之外可以
我们 9.9 讲解 git-flow 提供支持如果各位所在团队采用
git-flow ,那么对于 GitHub 官方客户端使用 SourceTree 获得
效果
A http://www.sourcetreeapp.com/
B https://www.atlassian.com/software/stash
图灵社区会员 lxghost2 尊重版权
----------------------- Page 274-----------------------
附录B
通过Gist轻松实现代码共享
图灵社区会员 lxghost2 尊重版权
----------------------- Page 275-----------------------
248  
附录 B 通过 Gist 轻松实现代码共享
GistA
简单 Web 应用程序开发者用来共享示例
错误信息开发者在线交流难免涉及软件日志内容直接
发送日志占据篇幅交流带来不便这种情况笔者习惯
日志粘贴 Gist ,然后URL 发送对方
此外,Gist 可以如下场合
代替记事本记录简短代码段
对方发送示例代码
使用 Gist 处理这类情况可以省去不少麻烦
B.1 Gist
特点
Gist
使
JavaScript
编写 AceB 编辑器打开浏览器便编写简单代码
另外,Gist 中的文档版本管理系统管理之下用户可以放心
编辑而且由于版本历史记录保管 Git 仓库所以可以通过
clone
操作 Gist 获取本地共享 Gist 之间能够互相添加评论
所有交流都会记录下来
Gist
支持多种语言语法高亮可以大幅增强代码可读性可以
工具就是程序员设计
B.2 
创建 Gist
下面我们通过实际演示各位讲解 Gist。各位可以登录 GitHub
点击上部菜单中的 Gist 或者直接访问 Gist URL 。随后我们可以看到
A https://gist.github.com/
B http://ace.c9.io/
图灵社区会员 lxghost2 尊重版权
----------------------- Page 276-----------------------
B.2 
创建 Gist  249
B.1 页面
B.1  Gist 首页
1
2 3 4
5
6 7 8
● UI
讲解
接下来我们各个项目分别进行讲解
 1 Gist description...
头像右侧这个文本框用来当前 Gist 包含文件进行简要
说明内容尽量简明扼要自己知道什么当然阅览
看到这里信息
项目不是所以如果内容没有值得说明地方
大可不必填写
 2 name this file...
用户指定文件系统能够自动识别扩展名右侧
语言自动设置对应种类比如我们输入“hello_gist.rb”,语言自动
设置 Ruby 。
项目不是缺省状态“gistfile1. 扩展名形式
分配名称
图灵社区会员 lxghost2 尊重版权
----------------------- Page 277-----------------------
250  
附录 B 通过 Gist 轻松实现代码共享
 3 language
这里可以创建文件选择编程语言如果前面没有指定文件
那么缺省名称扩展名将这个设置为准另外文件中的代码
按照这里设置语言进行语法高亮
菜单可以搜索语言 B.2 ),各位选择适当语言进行
提高可读性
如果更改设置文件认为文本格式
B.2  查找编程语言
 4 ACE  Editor
复选框可以指定 Ace 是否有效没有特殊情况还是建议各位设置
有效这样一来录入文件内容可以普通编辑器一样进行插入
tab
操作
右侧缩进设置可以选择空格缩进还是 Tab 缩进右边
选择缩进幅度菜单
 5
文件
这个文本框用来编辑文件内容可以手动编写可以剪贴板
我们常用编辑器 IDE 相同这里文件内容根据语言
即时语法高亮。( B.3 )
B.4 ,Gist 可以 Markdown 语法标题以及编程语言
方法函数折叠起来大纲形式显示内容
图灵社区会员 lxghost2 尊重版权
----------------------- Page 278-----------------------
B.2 
创建 Gist  251
B.3  语法高亮
B.4  大纲形式
标题 1
内容 1
标题 2
标题 3
内容 3
 6 Add another  File
Gist 可以包含多个文件点击这个按钮可以在下方添加
文件信息录入用户添加文件
 7 Create Secret Gist
通过这个按钮创建 Gist 不会公开只有知道 URL 可以
阅览相关内容使用这个方法保证 Gist 特定共享不过
Gist
URL 一定要妥善保管
 8 Create  Public Gist
当前内容创建 Gist。 Discover GistsA 可以看到创建 Gist。
Gist 创建都会自动分配 URL 。例如
https://gist.github.com/hirocaster/8374839
A  https://gist.github.com/discover/
图灵社区会员 lxghost2 尊重版权
----------------------- Page 279-----------------------
252  
附录 B 通过 Gist 轻松实现代码共享
我们可以通过 URL 其他开发者共享 Gist。
B.3 
查看 Gist
我们 Gist 读者角度出发进行讲解创建 Gist
B.5

B.5  创建 Gist






登录 Github 可以 Gist 添加评论当然可以自己 Gist
进行编辑
●  Gist
菜单
Gist
菜单右侧部分模式自己 Gist B.6 )
其他 Gist B.7 )显示内容有所不同
B.6  自己创建 Gist 菜单
B.7  其他创建 Gist 菜单
图灵社区会员 lxghost2 尊重版权
----------------------- Page 280-----------------------
B.3 
查看 Gist  253
自己 Gist Edit (编辑Delete (删除按钮
两者共有 Advanced Options 可以通过 Report as Abuse
不良 Gist 内容 Gist 标记 Star 可以 Your Gists Starred
快速找到 Gist。Your Gists 相关内容我们后面讲到
其他 Gist Fork 按钮用户可以根据其他 Gist 创建
自己Gist。但是这个 Fork GitHub 不同不可以进行 Pull Request 。
下面我们 Gist 页面进行讲解
 ❶ Gist Detail
访问 Gist URL 显示这个页面这里可以查看 Gist 文件
内容以及评论详细信息
 ❷ Revisions
可以查看 Gist 变更历史记录差别
 ❸ Download Gist
Gist tar.gz 格式下载
 ❹ Clone this gist
显示 clone 所需路径如果自己 Gist ,本地编辑可以
进行 push 操作
 ❺ Embed this gist
显示 Gist 分享博客所需 HTML 。各位博客分享语法
高亮代码可以利用功能
 ❻ Link to this gist
显示当前 Gist URL 。分享 Gist 可以直接这个 URL 告诉
对方
图灵社区会员 lxghost2 尊重版权
----------------------- Page 281-----------------------
254  
附录 B 通过 Gist 轻松实现代码共享
● 
文件菜单
文件上方有如 B.8 菜单左至右依次文件
语言种类永久链接,raw 链接如果 Gist 中的文件
本地使用永久链接比较便捷
B.8  文件菜单
B.4 Your Gists
点击 Gist 首页右上 Your Gists 按钮或者直接访问 URL 可以
进入 Your Gists 页面 A 。这里可以查看自己 Gist 列表
B.9  Your Gists 页面
A https://gist.github.com/
用户名/
图灵社区会员 lxghost2 尊重版权
----------------------- Page 282-----------------------
B.5 
小结  255
左侧菜单 Forked 选项显示通过 Fork 创建 Gist ,Starred 选项
显示已经标记 Star Gist。文字右侧数字代表一类 Gist 数量
B.5 
小结
部分我们 Gist 进行讲解通过应用我们可以轻松
笔记错误信息以及一些必要放入仓库代码片段各位不妨
利用与其他人共享琐碎信息
图灵社区会员 lxghost2 尊重版权
----------------------- Page 283-----------------------

GitHub JISSEN NYUMON by Hiroki Otsuka
Copyright © 2014 Hiroki Otsuka
All rights reserved.
Original Japanese edition published by Gijyutsu-Hyoron Co., Ltd., Tokyo
This Simplified Chinese language edition published by arrangement with
Gijyutsu-Hyoron Co., Ltd., Tokyo in care of Tuttle-Mori Agency, Inc., Tokyo
中文简体字 Gijyutsu-Hyoron Co., Ltd. 授权人民邮电出版
独家出版未经出版者书面许可不得任何方式复制抄袭
内容
版权所有侵权