本地开发代码提交流程:
# 切换到master分支
git checkout master
# 新建并切换到开发分支develop
git checkout -b develop
git checkout -b develop origin/master # 指定上游分支
# 查看分支信息(是否有上游分支)
git branch -vv
# 若无上游分支,指定上游分支
git branch -u origin/master
或 git branch --set-upstream-to=origin/master develop
# 拉取最新的代码
git pull --rebase
# 修改本地文件,然后提交
git add .
git commit -m "message"
# 检查代码格式规范
arc lint
# 提交code review
# arc diff xxx --preview // 提交针对某个分支的commit,并只生成diff文件,不在web端创建revision
# arc diff HEAD^ # git: just the most recent commit
arc diff
或 arc diff --create
# 如果想跳过代码格式检查
arc diff --nolint
# 提交code review之后,点击生成的url在浏览器里打开,填写Title、Summary、Test Plan、Reviewers等信息
# 得到修改意见,在本地修改后提交
git add .
git commit -m "modified after review"
或 git commit --amend
# 再次提交code review(这个revision是上次创建code review时的id,比如D1234)
arc diff --update 1234
# --update 1234 也可以不加,默认会合到上一个review中
# reviewer已经Accept之后,提交代码
arc land
或 arc land develop
# 如果报错找不到对应的revision,带上revision号(比如1234)
arc land --revision 1234
# land使用之后会将当前develop分支merge到上游master分支,提供详细的提交信息,推送到master并且删除本地develop分支
使用 arc diff 只对特定范围的 commit 提交 code revision
arc diff 会合并提交一个范围内的所有 commit 为一条 revision,默认范围是 git merge-base origin/master HEAD
到 HEAD
。可以通过 arc diff <commit>
指定范围为从 git merge-base <commit> HEAD
到 HEAD
。
我们可以通过 arc which
查看 arc diff
的 commit 范围。当我们想合并的是中间的部分 commit 的时候,可以这么做:
git branch revision
git checkout revision
git reset --hard <last-commit>
arc diff <first-commit>
当 revision 被通过,我们可以通过 arc land <branch>
来合并 branch 到 master
分支,然后 push 到远端仓库。
有其他需求,详询官方文档:◉ Arcanist User Guide: arc diff
通过执行arc help land,可以找到land推送到的target的顺序:
A target branch is selected by examining these sources in order:
- the --onto flag;
- the upstream of the current branch, recursively (Git only);
- the arc.land.onto.default configuration setting;
- or by falling back to a standard default:
- "master" in Git;
- "default" in Mercurial.
arc land # 将当前分支推到上游分支,一般是master
arc land --onto foo/bar # 将当前分支推到foo/bar
arc land develop
arc land develop --onto foo/bar
arc set-config arc.land.onto.default foo/bar
# 当review别人的diff时,可以在自己本地打补丁进行测试
arc patch -h # arc patch --help
arc patch D12345 // 会新建一个arcpatch-D12345分支
arc patch --nobranch D12345 // 不会新建分支,使用当前分支
# arc patch实际执行的是git cherry-pick <commit_id>。如果patch发生冲突,先解决冲突,git add .,然后git cherry-pick --continue;如果放弃patch,git cherry-pick --abort
arc patch --diff <diff_id> # 可以只patch某个revision(如D12345)里面的某个diff,只需在History找到该Diff对应的ID,当错误地更新revision想要回退可用这个
在 ~/.arcrc 文件里有相应改动:
$ cat ~/.arcrc
{
"hosts": {
"https://phabricator.xxx.ai/api/": {
"token": "xxx"
}
},
"config": {
"arc.land.onto.default": "foo/bar",
"editor": "vim"
}
}