Team Code 协作编程平台工作流
Team Code 协作编程平台是基于 Google Gerrit 搭建的团队协作编程的平台。Gerrit 不仅仅
是 Code Review,更是一种社会化的协作模式。因此,我们将以 Google Gerrit 为基础的 Git
Server 定位为 Team Code,意为 Team Programming Platform。
Code Base = Team Code + Code Search + else
Team Code 是 Code Base 的最主要的部分。
前提
Team Code 平台工作流的前提,是了解 Git,安装 Git,会使用 Git。
Git 的安装请参考 Git 起步 - 安装 Git
如果你不知道 Git 是什么,或者对 Git 的使用不熟悉,请从 这里开始。
本手册的所有操作,都是在 Git Bash 中进行。Git Bash 是 Windows 中的集成了 Git 的 Bash,
在 Mac OS 与 Linux 等系统中,它就是 Bash Shell,后面统称为 Git Bash。
变量约定
在后面的命令与说明中,使用以下约定:
- {PROJECT-NAME} 表示项目的名称,例如 fangdd/customer/newhouse-website
- {REPOSITORY-NAME} 表示你的仓库的名称,例如 fangdd/customer/newhouse-website 的
仓库名就是 newhouse-website - {MY-USERNAME} 表示你的账号名,{MY-USERNAME}@fangdd.com 就是你的邮箱地址
- {MY-NAME} 表示你的姓名
- {BRANCH} 表示你的工作分支
Team Code 使用步骤
创建密钥
如果你已经有 rsa 密钥,跳过这一步。
ssh-keygen
进入命令行交互之后,一路按回车,它会生成一对密钥,位于 ~/.ssh 目录。
添加公钥到 Gerrit
先查看公钥内容
cat ~/.ssh/id_rsa.pub
步骤如下:
- 打开 Gerrit:http://teamcode.fangdd.net
- 使用 统一账号 登录
- 点击右上角的名字旁边的下拉箭头
- 点击【Settings】
- 点击左侧的【SSH Public Keys】
- 点击【Add Key …】按钮
- 将 ~/.ssh/id_rsa.pub 文件的内容,粘贴到文本框内
- 再点击【Add】按钮
- 完成
配置 SSH 客户端
vim ~/.ssh/config
加入以下内容
# 这一行可以让你连接服务器的速度更快
GSSAPIAuthentication no
# 这一行让较新的客户端允许使用旧老的算法来适应较老的ssh服务器
KexAlgorithms +diffie-hellman-group1-sha1
克隆项目
- 登录 Team Code 的 Web UI:http://teamcode.fangdd.net
- 在【Projects】列表中,找到你的项目
- 点击你的项目连接,进入【Projects】【General】页面
- 点击【Clone with commit-msg hook】这个 Tab
- 点击【git clone ssh ……】右边的复制图标,复制其中的命令;
或者直接选择【git clone ssh ……】来复制(注意要复制完整) - 进入你的 Git Bash,使用 cd /path/to/your/workspace 进入你的工作空间
- 粘贴刚刚复制的命令,敲回车执行
- 完成克隆,进入你的 {REPOSITORY-NAME} 开始工作
如果提示
fatal: could not fetch refs from ssh://{MY-USERNAME}@teamcode.fangdd.net:29418/{PROJECT-NAME}
或者提示
fatal: could not fetch refs from teamcode/{PROJECT-NAME}
说明这是一个空的仓库,你可以使用以下操作来继续
mkdir {REPOSITORY-NAME}
cd {REPOSITORY-NAME}
git init
scp -p -P 29418 {MY-USERNAME}@teamcode.fangdd.net:hooks/commit-msg .git/hooks
git remote add origin ssh://{MY-USERNAME}@teamcode.fangdd.net:29418/{PROJECT-NAME}
GIT 配置
如果你已经有全局的 GIT 的配置,跳过这一步。
# user.name 是你的中文名
git config user.name {MY-NAME}
git config user.email {MY-USERNAME}@fangdd.com
建议将 user.name 和 user.email 设置成全局的配置,以免每个项目都配一次
git config --global user.name {MY-NAME}
git config --global user.email {MY-USERNAME}@fangdd.com
使用 teamcode 工作
Team Code 工作流总图
作为 Contributor 和 Reviewer 的工作流
对于所有继承了 OpenReview-Projects 的项目,任何一位开发工程师,都是任意一个项目的
Contributor 和 Reviewer。
如果你是某个项目的 Team 成员,那你需要 Watch 该项目,以便收到该项目的 New Changes、
New Patch Sets、Comments、Submitted Changes、Abandoned Changes 等消息通知。
Watch 项目的步骤:
- 登录 Team Code 的 Web UI:http://teamcode.fangdd.net
- 点击右上角的【姓名】下拉菜单
- 点击【Settings】,进入个人配置页面
- 点击左侧导航的【Watched Projects】,进入 Watched Projects 页面
- 在【Project Name】输入项目名,或者点击【Browse】选择项目
- 点击【Watch】按钮
- 将 【Email Notifications】 下方的所有列都勾选
- 完成
工作目录:是指项目的根目录,该目录下有一个隐藏的 .git 目录。
以下所有的工作,除特别说明之外,都在你的项目的 工作目录 中进行:
- 进行编码工作:通常是在你的 IDE(Idea, Eclipse..)上工作
提交你的工作成果
git add {path/to/your/changed/FIELS...} # 如果是普通的提交,使用这样提交代码 git commit -m "{Your Commit Message}" # 此时你的 log 上的 message 中可以看到一个新的 Change-Id git log -n 1 # 如果是被第5步验证不通过、或者大家 Review 认为有必要再修改,就要下面这样提交 # 在弹出的 message 中你可以适当修改,也可以直接退出关闭。 # 这样做的目的是保持 Change-Id 不变,让这次提交变成一个 Patch Set git commit --amend
同步与合并远端仓库的提交
git fetch origin {BRANCH} git merge origin/{BRANCH}
如果有冲突,则解决冲突。
提交你的工作成果给大家 Review
git push origin HEAD:refs/for/{BRANCH}
成功后,会显示你的 Change 的 URL,你可以发送这个 URL 邀请大家来 Review 你的代码。
机器人会对你的代码进行构建、单元测试、Sonar 扫描、代码风格的检查等进行验证。
给出 -1 或 +1 的评分,如果给了 -1,则说明不能通过验证,需返回第 1 步修改代码,
再使用 git commit –amend 提交。所有人都可以 Review 你的代码,但主要的人是你通知到的、和跟你是同一个 Team 的,
他们会给你 -1 到 +1 的评分,或者添加一些评论。项目的 Owner 会给你 -2 到 +2 的
评分和一些评论。Owner 如果给出 -2 的评分,或者代码不能合并,则 Owner 或你自己就要
Abandon,或者返回第 1 步重新编辑并以 git commit –amend 提交代码。合并你的代码到服务器的目标分支,或者 Abandon 你的代码,结束这次的工作流。
作为 Reviewer 的工作流
- 登录:登录 Team Code 的 Web UI,导航到评审页面上。有多种方式达到该页面:
- 通过 Contributor 通过 IM、E-mail 等渠道发给你的链接
- 使用 Web UI 上的 【My】-【Changes】-【Incoming reviews】
- 使用 Web UI 上的 【All】-【Open】找到并点击你感兴趣的 Change
- 评论:在评审页面上,可以查看 Commit Message,Patch Sets,Files,并对 Commit message
和 Files 的某行或某个范围进行评论。此时所写的评论为【Draft】状态。 - 打分:在评审页面上,通过【Code-Review+1】或【Code-Review+2】,或【Reply…】进行评分
- 发表:点击【Reply..】弹层的【Post】,将【Draft】状态的评论提交
- 完成
作为 Committer 的工作流
Committer 由项目的 Owner 承担,其工作流如下:
- 完成 作为 Reviewer 的工作流。
- 如果给出 Code-Review 负的评分,可以进行【Abandon】操作,结束本次工作流。
- 如果给出 Code-Review+2 的评分,可以进行【Submit】合并操作,结束本次工作流。