“Github”里的“hub”改用Go语言开发

刚刚过去的2014年是Go语言重要的一年,不仅版本升级到了1.4,,而且Go语言的集成开发环境LiteIDE也发布了x26,还在云计算方便吸引力不是的注意力。虽然有很多程序员不喜欢Go语言,但每种语言都有直接的缺点和优点,这是很正常的事情。最重要的是取之长、补己短。最近github宣布使用,就是要利用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语言的高效。要想从源代码安装hub2.x版本,你需要有一个Go语言开发环境,版本要在1.4以上:

$ git clone https://github.com/github/hub.git$ cd hub$ ./script/build$ cp hub 你的BIN目录

hub2.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.gitgit 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.gitgit 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 xoebusgit cherry-pick$ git cherry-pick > 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 SHAgit 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.txtgit fork$ git fork[ repo forked on GitHub ]> git remote add -f YOUR_USER git@github.com:YOUR_USER/CURRENT_REPO.gitgit 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:featuregit 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-namegit 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.gitgit init$ git init -g> git init> git remote add origin git@github.com:YOUR_USER/REPO.gitgit push$ git push origin,staging,qa bert_timeout> git push origin bert_timeout> git push staging bert_timeout> git push qa bert_timeoutgit 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/networkgit 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/patchgit 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/pipgit 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)都属于昨天。哪怕那山再青,那水再秀,

“Github”里的“hub”改用Go语言开发

相关文章:

你感兴趣的文章:

标签云: