🛠️ 与GitHub相互协作的工具及服务
8.1 hub 命令
hub 命令 是一个封装了 git 命令的命令行工具,能够辅助用户使用 GitHub。它由 Chris Wanstrath 带头开发,旨在简化 GitHub 的操作。
概要
- hub 命令 封装了 git 命令,并增加了调用 GitHub API 的功能。
- 可以使用简略路径替代完整路径来指定 GitHub 端仓库。
安装
- 系统要求:
- Git 1.7.3 以上
- Ruby 1.8.6 以上
- 安装方法:
- OS X:通过 Homebrew 或 MacPorts 安装。
bashCopy
brew install hub # Homebrew sudo port install hub # MacPorts - 其他环境:
bashCopy
curl https://hub.github.com/standalone -sLo ~/bin/hub chmod +x ~/bin/hub echo 'export PATH=$PATH:~/bin' >> ~/.bash_profile
- OS X:通过 Homebrew 或 MacPorts 安装。
确认运行情况
bashCopy
hub --version
输出显示 git 和 hub 的版本号。
设置别名
将 git 设置为 hub 的别名:
bashCopy
eval "$(hub alias -s)"
功能补全
GitHub 提供了面向 bash 和 zsh 的脚本,用于增强 hub 命令的功能。
OAuth 认证
初次访问 GitHub API 时,hub 会进行 OAuth 认证,并将 Token 保存在 ~/.config/hub 中。
常用命令
| 命令 | 功能描述 |
|---|---|
hub clone | 简化 GitHub 仓库的克隆操作,无需指定完整路径。 |
hub remote add | 添加远程仓库时,省略 GitHub 端仓库的指定部分。 |
hub cherry-pick | 通过 URL 获取提交并应用到当前分支。 |
hub fork | 在本地克隆的仓库上执行 Fork 操作,生成自己的远程仓库。 |
hub pull-request | 创建 Pull Request,无需访问 GitHub 页面。 |
hub checkout | 通过 Pull Request 的 URL 将接收到的分支 checkout 到本地。 |
hub create | 在 GitHub 上创建同名仓库,并设置为本地仓库的远程仓库。 |
hub push | 同时向多个远程仓库进行 push 操作。 |
hub browse | 在浏览器中打开当前操作的 GitHub 仓库页面。 |
hub compare | 查看当前特性分支与 master 分支的差别。 |
GitHub Enterprise 支持
bashCopy
git config --global --add hub.host my.example.org
将 my.example.org 替换为 GitHub Enterprise 的主机名。
8.2 Travis CI
Travis CI 是一款免费服务,专门托管面向开源开发组织的持续集成(CI)。
概要
- CI 是极限编程(XP)的实践之一,用于在提交后立即执行自动测试或构建。
- 支持 Ruby、PHP、Perl、Python、Java、JavaScript 等语言。
配置文件
编写 .travis.yml 文件:
yamlCopy
language: ruby rvm: - 1.9.2 - 1.9.3 script: bundle exec rspec spec
检测配置文件
使用 Travis WebLint 检测 .travis.yml 文件是否存在问题。
与 GitHub 集成
- 访问 Travis CI 网站,使用 GitHub 账号登录。
- 在仓库列表中启用 Travis CI。
- 在 GitHub 的 Webhooks & Services 页面配置 Travis CI。
执行结果
- 通过邮件或 IRC 接收 Travis CI 的执行结果。
- 在 README.md 中添加 Travis CI 的状态图:
markdownCopy
[](http://travis-ci.org/用户名/仓库名)
8.3 Coveralls
Coveralls 是由 Lemur Heavy Industries 运营的代码覆盖率检测服务。
概要
- 支持 Ruby/Rails、Python、PHP、JavaScript/Node.js、C/C++、Java、Scala 等语言。
- 为每个 Pull Request 生成代码覆盖率报告。
安装
- 前提条件:
- 源代码保存在 GitHub 上。
- 已集成 Travis CI 或 Jenkins 等服务。
注册与添加仓库
- 访问 Coveralls 首页,通过 GitHub 注册账户。
- 点击 ADD REPO 添加需要生成覆盖率报告的仓库。
🛠️ Coveralls 配置与使用
仓库设置
在 Coveralls 页面中,可以通过将仓库名右边的开关设置为 ON 来添加仓库。添加后,仓库将成为报告对象。
编写配置文件
Coveralls 的配置文件是 .coveralls.yml,需将其放置在仓库路径下。文件内容如下:
yamlCopy
service_name: travis-ci
- service_name:如果使用其他持续集成服务器(如 Jenkins),需根据实际情况修改为简单易懂的名称。
- repo_token:在使用其他持续集成服务器时,需将
repo_token描述为repo_token:xxxxxyyyyyzzzz的形式。repo_token可以在 Coveralls 的配置解说页面中找到。
添加 gem
如果使用 Ruby 或 Rails,需在 Gemfile 中添加以下内容:
rubyCopy
gem 'coveralls', require: false
并在测试工具的 helper 文件中(如 /spec/spec_helper.rb 或 /test/test_helper.rb)添加以下代码:
rubyCopy
require 'coveralls' Coveralls.wear!
对于 Rails 项目,需替换为以下代码:
rubyCopy
require 'coveralls' Coveralls.wear!('rails')
完成设置后,执行 bundle install 命令,并将所有修改过的文件提交。
查看报告
完成上述设置后进行 push 操作,Coveralls 会在 Travis CI 自动测试后生成报告。报告的 URL 为:
textCopy
https://coveralls.io/r/用户名/仓库名
Coveralls 还提供了让 README.md 显示相关信息的标记。在报告下部的 README BADGE 栏内,点击 Get badge URLs 即可获得 URL,将其添加到 README.md 文件中后,可以在 GitHub 上看到相同的图片。
📦 Gemnasium
Gemnasium 服务可以查询 GitHub 仓库中使用的 RubyGems 或 npm(Node Package Manager),帮助开发者了解是否正在使用最新版本进行开发。
功能
- 版本管理:当库的版本升级时,Gemnasium 会第一时间通知开发者。
- 版本差距:在 Gemnasium 的网站上会列出正在使用的 RubyGems 及其与最新版本的差距。
使用场景
例如,使用 octokit 库时,若 GitHub 对 API 做了修改,octokit 会升级版本以应对。Gemnasium 会及时通知开发者新版本的发布。
费用
- Public 仓库:免费使用。
- Private 仓库:需支付一定费用。
🌡️ Code Climate
Code Climate 是一款代码分析报告服务,目前仅支持 Ruby。它可以分析 GitHub 仓库中的软件,查出质量有问题的代码,并给软件品质评级。
功能
- 代码分析:对容易出现 BUG 的复杂部分发出警告。
- 评级系统:如果不进行重构,评级会逐渐下降,督促开发者编写高品质代码。
费用
- 收费服务:提供 14 天的免费试用期。
🏗️ Jenkins 与 GitHub 集成
概要
Jenkins 是代表性的持续集成服务器,可以通过与 GitHub 集成,自动测试 Pull Request 并将结果发送至 GitHub。
安装
- 下载安装包:从 Jenkins 官方网站下载适合当前操作系统的安装包。
- 安装与启动:使用标准安装方法安装后,Jenkins 会随操作系统一起启动,默认使用 8080 端口。
创建 bot 账户
- 新建账户:在 GitHub 上新建一个账户,用于 Jenkins 获取源代码和发送测试结果。
- 生成密钥:创建 bot 账户专用的公开密钥和私有密钥,密钥的密码短语需留空。
权限设置
- 公开仓库:需拥有写入权限。
- 非公开仓库:需拥有读取和写入权限。
配置 SSH 密钥
- 初次使用 Jenkins:安装包会自动生成
jenkins用户,私有密钥会自动配置。 - 已使用 Jenkins:需在
~/.ssh/config中写入 SSH 客户端的相关设置,为 SSH 访问特定主机时设置对应的私有密钥。
安装 GitHub pull request builder plugin
该插件可以在 Jenkins 内部构建出 Pull Request 合并之后的状态并执行自动测试,结果会自动发送到 GitHub。
创建与设置 job
- GitHub project:输入 GitHub 仓库的 URL。
- 源码管理:选择 Git,填写 Repository URL。
- 构建触发器:设置让任务开始执行的触发器,如每 5 分钟检查一次 Pull Request。
- 构建:设置执行自动测试等作业的流程。
通知结果
自动测试的结果会由 GitHub pull request builder plugin 发送到 GitHub,使用 Commit Status API 显示最新提交的状态。
🛠️ Pull Request 的状态
测试执行中的状态
当接收到 Pull Request 后,如果自动测试仍在执行中且无法确定状态,则会显示为图 8.26 的样子。此时需要等待 GitHub 接收到测试结果,状态才会被更新。

测试未通过的状态
如果有某项测试没有通过,则会显示为图 8.27 的状态。此时可以点击 Details 链接查看详细内容,找出未能通过测试的问题所在。注意: 在这个状态下,千万不能合并 Pull Request。

测试全部通过的状态
如果测试全部正常通过,会如图 8.25 中那样以绿色显示。之后只要代码审查等工作没有发现问题,就可以合并 Pull Request。
Commit 状态
GitHub Pull Request Builder Plugin 会根据最新的提交来执行任务,但也会记录过去的提交状态。如果测试未通过,该提交会像图 8.28 里那样被标上 "
KaTeX can only parse string typed expression
x"。

将其修正并再次 push 后,会如图 8.29 中那样标上绿色对勾。

提交记录示例
| KaTeX can only parse string typed expression ⋄ | ||
|---|---|---|
| KaTeX can only parse string typed expression ⋄ | ||
| KaTeX can only parse string typed expression ⋄ | Fix rake | KaTeX can only parse string typed expression × fb66eo9 |
| KaTeX can only parse string typed expression ⋄ | Fix spec | KaTeX can only parse string typed expression ✓ Scs34f3 |
根据这些结果记录,可以直观地分辨出哪些提交引起了测试结果的变化,帮助开发者迅速辨明问题所在。
通过评论进行控制
在 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 时,任务都会被自动执行。
重新执行任务
如果遇到某些情况需要重新执行任务,只要 Admin list 或 White list 名单中的用户发送 "retest this please" 的评论即可。
变更指定评论
指定评论的内容可以在 系统管理
KaTeX can only parse string typed expression
→ 系统设置
KaTeX can only parse string typed expression
→ Github Pull Requests Builder
KaTeX can only parse string typed expression
→ 高级 中进行更改。
专栏:用 Coderwall 生成 GitHub 上的个人信息
Coderwall 是由社区众筹的方式开发、运营的一款服务,它可以根据 GitHub 的仓库信息等为开发者免费生成个人信息,同时根据在 GitHub 上的业绩与成就给开发者颁发勋章。

功能概述
- 个人信息生成:Coderwall 可以根据 GitHub 的仓库信息生成开发者的个人信息。
- 勋章系统:根据开发者在 GitHub 上的业绩与成就颁发勋章,这些勋章可以嵌入到博客等网站中展示。
- Teams 功能:展示各团队的资料、成绩和文化,吸引志同道合的同伴,也可以查看其他团队的程序员及其开发项目。
相关链接

2028

被折叠的 条评论
为什么被折叠?



