CODE的命令行工具
项目描述
这是一个方便使用 code 进行合作开发的工具。
安装
使用virtualenv
$ virtualenv codecli $ codecli/bin/pip install -e git+http://code.dapps.douban.com/codecli.git#egg=codecli $ ln -s `pwd`/codecli/bin/code $HOME/bin/ # make sure add $HOME/bin to your $PATH
用法
创建本地clone
如果你要向一个仓库贡献代码,先在 code 上从其 fork 一份(这部分目前只能手工操作 ,等code提供fork api后可自动进行),然后运行
$ code fork {repo} {your_fork} {dir} $ cd dir
其中,repo 和 your_fork 只需要填写在 code 上的项目名即可,例如
$ code fork codecli hongqn/codecli codecli
your_fork``和``dir``可以忽略,默认值分别为``{user_name}/{repo}``和``{repo},例如
$ code fork codecli
就等同于前一个例子(需要确保你在~/.codecli.conf里设置了user.email)
如果你只是想管理自己的仓库,而不是向其他人的仓库贡献代码,可以用 code clone 命令
$ code clone codecli
code fork 和 code clone 命令都会创建 origin 和 upstream 两个 remote ,在 codecli 的其他命令中,会默认这两个 remote 均存在, origin 指向 你自己的fork, upstream 指向上游仓库(即你希望贡献代码的仓库)。对于使用 code clone 的仓库而言, origin 和 upstream 均指向你自己的仓库。
同时, codecli 还会设置 user.email 和 user.name ,并保存在 ~/.codecli.conf 中 。之后每次使用 codecli 创建本地仓库时,都会自动从 ~/.codecli.conf 中读取之前保存的用户信息。
开始一个分支
任何时候,你想开发一个新的 feature 、修改一个 bug 、甚至只是修复一个 typo 时, 都可以使用如下命令
code start {branch-name}
会自动从最新的upstream/master创建分支。相当于
git fetch upstream git checkout -b {branch} --no-track upstream/master
不用担心创建了太多 branch 发送 pullreq 时选择麻烦, codecli 为你提供了快速提交 pullreq 的方法(见 提交pull request )。
与upstream/master同步
当你的分支开发了一段时间,希望和上游其他人已经提交的改动合并,以便可以确保你的 改动在最新代码上也可正常工作时,你需要同步上游代码
code sync
相当于
git fetch upstream git merge upstream/master
可以用 --rebase 参数(缩写为 -r )指定执行 git rebase 而非 git merge 。
如果你的分支是从 code hotfix (见 从非master分支进行hotfix ) 创建的, 不用担心, codecli 会正确处理,不会不小心把 master merge 进来弄得一团糟。
提交pull request
当你的新 feature 或者 bugfix 已经完成,准备提交 pullreq 时(当然建议你先用 git rebase -i 清理一下提交,squash 无意义的 oops 或者 tmpsav 之类的 commits 先) ,在你的分支下执行如下命令
code pr
会自动合并master分支,推送到origin,然后打开浏览器直接进入创建pull request页面。相当于
code sync git push --set-upstream origin {branch} open http://code.dapps.douban.com/{upstream}/newpull/new?head_ref={branch}&base_ref=master
如果是hotfix分支,也会设置正确的目标分支(比如release)
加上-t参数可以给其他人的fork提交pull request,比如
code pr -t satoru
此时,也可以用user:branch的形式,指定向其他人的指定branch提交pull request,比如
code pr -t satoru:zsh_completion
从非master分支进行hotfix
不少对稳定性有要求的项目在线上部署的不是master分支,而是其他分支(常见的是release分支)。如果发现一个线上bug需要立刻修复,但此时master已经有一些新的改动,如果在master上修复然后merge到release上的话,可能解决了此问题但又带来了新的问题。所以希望只上线针对紧急bug的改动。
这时你需要codecli的hotfix功能
code hotfix {release-branch-name} {hotfix-name}
其中{release-branch-name}为线上branch名,例如
code hotfix release ahbei-404
会从upstream/{release-branch-name}创建分支,起名为hotfix-{release-branch-name}-{hotfix-name}。相当于
git fetch upstream git checkout -b hotfix-release-ahbei-404 --no-track upstream/release
当执行code pr时,会自动将目标分支指向{release-branch-name}。
检出某个pullreq
在审查某个pullreq时,有时我们希望能够在本地检出改动的代码,以便在本地执行单元测试、调试等工作。感谢code提供的使用refs拉取pr的功能,可以用如下命令
code pr {pr_id}
抓取指定pullreq并自动检出其代码。
使用-t参数可以检出某个用户的fork上的pull request。
在检出pullreq后,如果此pullreq还有后续提交,可以使用
code sync
命令进行同步。并且还可以在本地编辑代码,提交。然后使用
code pr
命令向此pullreq的发起仓库的对应分支发起pullreq。当发起人merge了你的pullreq后,你提交的改动会自动出现在最初的pullreq中。
fetch其他人的fork
当合作开发一个项目时,可能其他人也有对upstream项目的fork,有时你需要检出或者merge他的代码。手工用长长的git url加remote然后fetch?不用那么麻烦,用code fetch轻松搞定
code fetch {username}
即可自动创建一个新的remote,指向其他人的fork,并fetch之。相当于
git remote add {username} http://code.dapps.douban.com/{username}/{repo}.git git fetch {username}
这要求其他人的fork遵循code的新二级目录结构(即username/repo)。如果origin也是一个fork的话,也需要遵循此结构。
结束分支的开发
当结束一个功能的开发时,你可以用code end来搞定
code sync code end {branchname}
即可自动删除远程和本地的branch,结束这个功能的开发。相当于
git br -d {branchname} git push origin :{branchname}
branchname默认值为当前branch,所以用code end会直接删除当前的branch。
如果需要同时删除多个branch,也可以用code end br1 br2 br3这种方式。
将upstream的一个分支merge到另一个分支
如果你维护的项目采用如release这样的分支标记正式上线版本和开发版本,并且用code hotfix命令来给线上版本做hotfix,那么你可能会经常有这样两个需求:
把master分支中的commits合并到release分支,准备上线。
把做了hotfix的release分支中的改动合并到master分支中。
这时,你可以用code merge命令来简化操作。对第一种情况,执行
code merge master release
会发起一个将upstream中的master分支合并到release分支的pull request。对第二种情况,执行
code merge release master
则会发起一个从release到master的pull request。
使用--push参数可以在本地创建一个分支执行merge操作,然后直接push到upstream(需要有upstream的push权限)。如果有冲突,可以在本地修复冲突后,重新用--push运行。
定制webbrowser的行为
在发送pullreq时,codecli会使用默认浏览器打开code的提交界面。可以用以下命令来定制此行为:
code config webbrowser.name firefox
指定使用Firefox来打开。此处可选择的值为Python的webbrowser模块中注册的名字。
code config webbrowser.name /path/to/executable
使用指定脚本打开,待打开的URL会作为参数传递给脚本。
code config webbrowser.name none
不使用浏览器打开,仅在终端显示URL地址。
code config webbrowser.name –unset
恢复成使用默认浏览器打开。
让code与git命令结合更紧密
在使用codecli的时候,经常会出现一会使用code命令一会使用git命令的情况,为了让两个命令结合更紧密,你可以配置一下~/.gitconfig,参考配置如下
[alias] start = !code start pr = !code pr sync = !code sync end = !code end
zsh下的code命令补全
将_code复制到$fpath中的某个目录,重启zsh就可以。
ChangeLog
2013-11-13
bugfix: 修复当webbrowser.name未设置或者设置为script时会抛异常的问题。感谢xupeng!
2013-11-08
feature: 增加code config命令,可以使用code config webbrowser.name定制webbrowser行为。
feature: 允许code clone使用URL作为参数。感谢satoru!
feature: code fork时默认使用自己的fork仓库名。感谢satoru!
feature: code fork时默认clone到仓库同名目录。感谢satoru!
feature: 支持code ssh url。感谢chenzheng和yaofeng!
feature: 允许code end结束多个branches。感谢satoru!
bugfix: 修正当仓库名中含有g i t 字符时会出错的问题。感谢anrs!
bugfix: 修复判断分支是否已经push到remote的方法,避免误判。感谢satoru!
bugfix: 修复重复开启pr-on-pr会出错的问题。感谢menghan!
2013-07-11
在首次发 pullreq 的分支上使用 rebase master 代替 merge master,减少无谓的 merge commit
2013-07-11
docfix: 修正了 code fork --help 帮助信息中的样例仓库名 (感谢 satoru)
bugfix: code merge --push 没有执行 git fetch upstream ,导致 merge 的数据不是最新的
2013-06-26
code end 命令增加 -f 参数,可删除未 push 的分支 (感谢 guibog)
2013-06-18
允许 remote 为 “用户名@” 的形式的 URL (感谢 guibog)
2013-06-13
bugfix: 在非 git repo 目录下运行 code 会出错
2013-06-09
code end 命令默认关闭当前分支 (感谢 guibog)
2013-06-04
增加 code merge 命令,简化 release 分支的管理。
2013-05-20
code pr -t 参数支持指定目标仓库的 branch。
2013-04-01
code start 时如果目标 branch 已存在,会提示是要切换还是重建。
2013-03-26
不使用 commands.getoutput ,以支持windows
项目详情
下载文件
下载适用于您平台的文件。如果您不确定该选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
CodeCLI-0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 78244d634d7d9985c612f4b8a7fbd3303d84f2af5f8a8ec9e72df8beff47e6eb |
|
MD5 | 3f1fd484198b87876374e6fe7c726204 |
|
BLAKE2b-256 | 9069d93fd6d4555ff95c7e1722b89a4a4be17c14f59575b008968d3eb5609ff8 |
CodeCLI-0.1-py2-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 57cab17386658012b15d6e360a02619527ddd0c4a8af4b60f1e91f460ce9d74a |
|
MD5 | 490147544f403ab358b4e28e459bf0a5 |
|
BLAKE2b-256 | 00192bc02567ac1be024ae6d35e395b106544f6d503cadfed210ddaf59d71d75 |