“Github”里的“hub”改用Go語言開發(fā)
剛剛過去的2014年是Go語言重要的一年,不僅版本升級到了1.4,而且Go語言的集成開發(fā)環(huán)境LiteIDE也發(fā)布了x26,還在云計(jì)算方便吸引力不是的注意力。雖然有很多程序員不喜歡Go語言,但每種語言都有直接的缺點(diǎn)和優(yōu)點(diǎn),這是很正常的事情。最重要的是取之長、補(bǔ)己短。最近github宣布使用Go1.4重新開發(fā)了hub命令,就是要利用Go語言的長處。
Github是世界上最大的代碼托管服務(wù),它是在于最近幾年迅速超過了SoruceForge,很大程度上得益于Linux創(chuàng)始人Linus的影響力,和Git中去中心化的思想。相信很多人都使用過git和github,但估計(jì)很少人知道這個(gè)等式:git + hub = github,hub是一個(gè)用來封裝git的工具,為其擴(kuò)展更多的功能和特性,是GitHub運(yùn)行起來更加快捷方便。
- $ hub clone rtomayko/tilt
 - # expands to:
 - $ git clone git://github.com/rtomayko/tilt.git
 
hub命令的最佳使用方法是當(dāng)作git的別名,這樣,當(dāng)你輸入$ git <command> 時(shí),你不僅能獲得git的所有功能,而且能增添很多附加特性。設(shè)置別名的方法是在你的.bash_profile文件放置下一行代碼:
- eval "$(hub alias -s)"
 
從2.2.0版本開始,hub開始改用Go語言開發(fā),主要原因是Go語言的高效。要想從源代碼安裝hub 2.x版本,你需要有一個(gè)Go語言開發(fā)環(huán)境,版本要在1.4以上:
- $ git clone https://github.com/github/hub.git
 - $ cd hub
 - $ ./script/build
 - $ cp hub YOUR_BIN_PATH
 
hub2.x版本將對1.x版本保持最大的兼容。下面我里看一下hub命令提供了哪些額外的強(qiáng)大功能。
(下面這些代碼中假設(shè)你已經(jīng)做了git別名設(shè)置)
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 http://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)
 
原文鏈接:http://www.techug.com/hub-is-powered-by-go















 
 
 












 
 
 
 