“Github”里的“hub”改用Go语言开发
刚刚过去的2014年是Go语言重要的一年,不仅版本升级到了1.4,而且Go语言的集成开发环境LiteIDE也发布了x26,还在云计算方便吸引力不是的注意力。虽然有很多程序员不喜欢Go语言,但每种语言都有直接的缺点和优点,这是很正常的事情。最重要的是取之长、补己短。最近github宣布使用Go1.4重新开发了hub命令,就是要利用Go语言的长处。
Github是世界上最大的代码托管服务,它是在于最近几年迅速超过了SoruceForge,很大程度上得益于Linux创始人Linus的影响力,和Git中去中心化的思想。相信很多人都使用过git和github,但估计很少人知道这个等式:git + hub = github
,hub是一个用来封装git
的工具,为其扩展更多的功能和特性,是GitHub运行起来更加快捷方便。
$ hub clone rtomayko/tilt # expands to: $ git clone git://github.com/rtomayko/tilt.git
hub命令的最佳使用方法是当作git
的别名,这样,当你输入$ git <command>
时,你不仅能获得git
的所有功能,而且能增添很多附加特性。设置别名的方法是在你的.bash_profile
文件放置下一行代码:
eval "$(hub alias -s)"
从2.2.0版本开始,hub
开始改用Go语言开发,主要原因是Go语言的高效。要想从源代码安装hub
2.x版本,你需要有一个Go语言开发环境,版本要在1.4以上:
$ git clone https://github.com/github/hub.git $ cd hub $ ./script/build $ cp hub YOUR_BIN_PATH
hub
2.x版本将对1.x版本保持最大的兼容。下面我里看一下hub
命令提供了哪些额外的强大功能。
(下面这些代码中假设你已经做了git别名设置)
git clone
$ git clone schacon/ticgit
> git clone git://github.com/schacon/ticgit.git
$ git clone -p schacon/ticgit
> git clone git@github.com:schacon/ticgit.git
$ git clone resque
> git clone git@github.com/YOUR_USER/resque.git
git remote add
$ git remote add rtomayko
> git remote add rtomayko git://github.com/rtomayko/CURRENT_REPO.git
$ git remote add -p rtomayko
> git remote add rtomayko git@github.com:rtomayko/CURRENT_REPO.git
$ git remote add origin
> git remote add origin git://github.com/YOUR_USER/CURRENT_REPO.git
git fetch
$ git fetch mislav
> git remote add mislav git://github.com/mislav/REPO.git
> git fetch mislav
$ git fetch mislav,xoebus
> git remote add mislav ...
> git remote add xoebus ...
> git fetch --multiple mislav xoebus
git cherry-pick
$ git cherry-pick https://github.com/mislav/REPO/commit/SHA
> git remote add -f mislav git://github.com/mislav/REPO.git
> git cherry-pick SHA
$ git cherry-pick mislav@SHA
> git remote add -f mislav git://github.com/mislav/CURRENT_REPO.git
> git cherry-pick SHA
$ git cherry-pick mislav@SHA
> git fetch mislav
> git cherry-pick SHA
git am, git apply
$ git am https://github.com/defunkt/hub/pull/55
[ downloads patch via API ]
> git am /tmp/55.patch
$ git am --ignore-whitespace https://github.com/davidbalbert/hub/commit/fdb9921
[ downloads patch via API ]
> git am --ignore-whitespace /tmp/fdb9921.patch
$ git apply https://gist.github.com/8da7fb575debd88c54cf
[ downloads patch via API ]
> git apply /tmp/gist-8da7fb575debd88c54cf.txt
git fork
$ git fork
[ repo forked on GitHub ]
> git remote add -f YOUR_USER git@github.com:YOUR_USER/CURRENT_REPO.git
git pull-request
# while on a topic branch called "feature":
$ git pull-request
[ opens text editor to edit title & body for the request ]
[ opened pull request on GitHub for "YOUR_USER:feature" ]
# explicit title, pull base & head:
$ git pull-request -m "Implemented feature X" -b defunkt:master -h mislav:feature
git checkout
$ git checkout https://github.com/defunkt/hub/pull/73
> git remote add -f -t feature mislav git://github.com/mislav/hub.git
> git checkout --track -B mislav-feature mislav/feature
$ git checkout https://github.com/defunkt/hub/pull/73 custom-branch-name
git merge
$ git merge https://github.com/defunkt/hub/pull/73
> git fetch git://github.com/mislav/hub.git +refs/heads/feature:refs/remotes/mislav/feature
> git merge mislav/feature --no-ff -m 'Merge pull request #73 from mislav/feature...'
git create
$ git create
[ repo created on GitHub ]
> git remote add origin git@github.com:YOUR_USER/CURRENT_REPO.git
# with description:
$ git create -d 'It shall be mine, all mine!'
$ git create recipes
[ repo created on GitHub ]
> git remote add origin git@github.com:YOUR_USER/recipes.git
$ git create sinatra/recipes
[ repo created in GitHub organization ]
> git remote add origin git@github.com:sinatra/recipes.git
git init
$ git init -g
> git init
> git remote add origin git@github.com:YOUR_USER/REPO.git
git push
$ git push origin,staging,qa bert_timeout
> git push origin bert_timeout
> git push staging bert_timeout
> git push qa bert_timeout
git browse
$ git browse
> open https://github.com/YOUR_USER/CURRENT_REPO
$ git browse -- commit/SHA
> open https://github.com/YOUR_USER/CURRENT_REPO/commit/SHA
$ git browse -- issues
> open https://github.com/YOUR_USER/CURRENT_REPO/issues
$ git browse -- issues/10
> open https://github.com/YOUR_USER/CURRENT_REPO/issues/10
$ git browse schacon/ticgit
> open https://github.com/schacon/ticgit
$ git browse schacon/ticgit commit/SHA
> open https://github.com/schacon/ticgit/commit/SHA
$ git browse resque
> open https://github.com/YOUR_USER/resque
$ git browse resque network
> open https://github.com/YOUR_USER/resque/network
git compare
$ git compare refactor
> open https://github.com/CURRENT_REPO/compare/refactor
$ git compare 1.0..1.1
> open https://github.com/CURRENT_REPO/compare/1.0...1.1
$ git compare -u fix
> (https://github.com/CURRENT_REPO/compare/fix)
$ git compare other-user patch
> open https://github.com/other-user/REPO/compare/patch
git submodule
$ git submodule add wycats/bundler vendor/bundler
> git submodule add git://github.com/wycats/bundler.git vendor/bundler
$ git submodule add -p wycats/bundler vendor/bundler
> git submodule add git@github.com:wycats/bundler.git vendor/bundler
$ git submodule add -b ryppl --name pip ryppl/pip vendor/pip
> git submodule add -b ryppl --name pip git://github.com/ryppl/pip.git vendor/pip
git ci-status
$ git ci-status [commit]
> (prints CI state of commit and exits with appropriate code)
> One of: success (0), error (1), failure (1), pending (2), no status (3)
git help
$ git help
> (improved git help)
$ git help hub
> (hub man page)
(程序师网原创,CC licensed)
你也许感兴趣的:
- GitHub 删除代码等于“任何人均可永久访问”!微软回应:我们有意为之
- 【外评】”GitHub “开始让人感觉像传统软件
- 编码20年,现在的我想放弃GitHub!
- GitHub 变 Twitter?强“喂”新推荐算法引公愤,开发者从“编程乌托邦”被驱赶到了信息茧房
- 让部署更快更安全,GitHub 无密码部署现已上线
- 开发者危机!微软GitHub启动裁员:印度工程师团队几乎整体裁撤
- 因使用 GitHub ,我们被取消了参赛资格
- 告别SVN,Git成“独苗”:GitHub 在 13 年后宣布淘汰Subversion支持
- GitHub被起诉,版权问题再引热议,网友类比谷歌图书:毕竟谷歌没拿用户内容写小说
- GitHub 前 CTO:全面微服务是最大的架构错误!网友:这不是刚改完 GitHub 吗
go语言目前还是比较火的,不过任何语言都是万变不离其宗的,如果掌握了一门语言后,要想跨越其他语言其实还是相对较容易的,简单入门,最近也在研究人工智能自然语言解析处理技术DeepQA,有兴趣的朋友可以一起来研究研究http://www.tuling123.com/openapi/cloud/proexp.jsp