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

开发 前端
刚刚过去的2014年是Go语言重要的一年,不仅版本升级到了1.4,而且Go语言的集成开发环境LiteIDE也发布了x26,还在云计算方便吸引力不是的注意力。虽然有很多程序员不喜欢Go语言,但每种语言都有直接的缺点和优点,这是很正常的事情。最重要的是取之长、补己短。最近github宣布使用Go1.4重新开发了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运行起来更加快捷方便。

  1. $ hub clone rtomayko/tilt 
  2.  
  3. # expands to: 
  4. $ git clone git://github.com/rtomayko/tilt.git 

hub命令的最佳使用方法是当作git的别名,这样,当你输入$ git <command> 时,你不仅能获得git的所有功能,而且能增添很多附加特性。设置别名的方法是在你的.bash_profile文件放置下一行代码:

  1. eval "$(hub alias -s)" 

从2.2.0版本开始,hub开始改用Go语言开发,主要原因是Go语言的高效。要想从源代码安装hub 2.x版本,你需要有一个Go语言开发环境,版本要在1.4以上:

  1. $ git clone https://github.com/github/hub.git 
  2. $ cd hub 
  3. $ ./script/build 
  4. $ cp hub YOUR_BIN_PATH 

hub2.x版本将对1.x版本保持最大的兼容。下面我里看一下hub命令提供了哪些额外的强大功能。

(下面这些代码中假设你已经做了git别名设置)

git clone

  1. $ git clone schacon/ticgit 
  2. > git clone git://github.com/schacon/ticgit.git 
  3.  
  4. $ git clone -p schacon/ticgit 
  5. > git clone git@github.com:schacon/ticgit.git 
  6.  
  7. $ git clone resque 
  8. > git clone git@github.com/YOUR_USER/resque.git 

git remote add

  1. $ git remote add rtomayko 
  2. > git remote add rtomayko git://github.com/rtomayko/CURRENT_REPO.git 
  3.  
  4. $ git remote add -p rtomayko 
  5. > git remote add rtomayko git@github.com:rtomayko/CURRENT_REPO.git 
  6.  
  7. $ git remote add origin 
  8. > git remote add origin git://github.com/YOUR_USER/CURRENT_REPO.git 

git fetch

  1. $ git fetch mislav 
  2. > git remote add mislav git://github.com/mislav/REPO.git 
  3. > git fetch mislav 
  4.  
  5. $ git fetch mislav,xoebus 
  6. > git remote add mislav ... 
  7. > git remote add xoebus ... 
  8. > git fetch --multiple mislav xoebus 

git cherry-pick

  1. $ git cherry-pick http://github.com/mislav/REPO/commit/SHA 
  2. > git remote add -f mislav git://github.com/mislav/REPO.git 
  3. > git cherry-pick SHA 
  4.  
  5. $ git cherry-pick mislav@SHA 
  6. > git remote add -f mislav git://github.com/mislav/CURRENT_REPO.git 
  7. > git cherry-pick SHA 
  8.  
  9. $ git cherry-pick mislav@SHA 
  10. > git fetch mislav 
  11. > git cherry-pick SHA 

git am, git apply

  1. $ git am https://github.com/defunkt/hub/pull/55 
  2. [ downloads patch via API ] 
  3. > git am /tmp/55.patch 
  4.  
  5. $ git am --ignore-whitespace https://github.com/davidbalbert/hub/commit/fdb9921 
  6. [ downloads patch via API ] 
  7. > git am --ignore-whitespace /tmp/fdb9921.patch 
  8.  
  9. $ git apply https://gist.github.com/8da7fb575debd88c54cf 
  10. [ downloads patch via API ] 
  11. > git apply /tmp/gist-8da7fb575debd88c54cf.txt 

git fork

  1. $ git fork 
  2. [ repo forked on GitHub ] 
  3. > git remote add -f YOUR_USER git@github.com:YOUR_USER/CURRENT_REPO.git 

git pull-request

  1. # while on a topic branch called "feature": 
  2. $ git pull-request 
  3. [ opens text editor to edit title & body for the request ] 
  4. [ opened pull request on GitHub for "YOUR_USER:feature" ] 
  5.  
  6. # explicit title, pull base & head: 
  7. $ git pull-request -m "Implemented feature X" -b defunkt:master -h mislav:feature 

git checkout

  1. $ git checkout https://github.com/defunkt/hub/pull/73 
  2. > git remote add -f -t feature mislav git://github.com/mislav/hub.git 
  3. > git checkout --track -B mislav-feature mislav/feature 
  4.  
  5. $ git checkout https://github.com/defunkt/hub/pull/73 custom-branch-name 

git merge

  1. $ git merge https://github.com/defunkt/hub/pull/73 
  2. > git fetch git://github.com/mislav/hub.git +refs/heads/feature:refs/remotes/mislav/feature 
  3. > git merge mislav/feature --no-ff -m 'Merge pull request #73 from mislav/feature...' 

git create

  1. $ git create 
  2. [ repo created on GitHub ] 
  3. > git remote add origin git@github.com:YOUR_USER/CURRENT_REPO.git 
  4.  
  5. # with description: 
  6. $ git create -d 'It shall be mine, all mine!' 
  7.  
  8. $ git create recipes 
  9. [ repo created on GitHub ] 
  10. > git remote add origin git@github.com:YOUR_USER/recipes.git 
  11.  
  12. $ git create sinatra/recipes 
  13. [ repo created in GitHub organization ] 
  14. > git remote add origin git@github.com:sinatra/recipes.git 

git init

  1. $ git init -g 
  2. > git init 
  3. > git remote add origin git@github.com:YOUR_USER/REPO.git 

git push

  1. $ git push origin,staging,qa bert_timeout 
  2. > git push origin bert_timeout 
  3. > git push staging bert_timeout 
  4. > git push qa bert_timeout 

git browse

  1. $ git browse 
  2. > open https://github.com/YOUR_USER/CURRENT_REPO 
  3.  
  4. $ git browse -- commit/SHA 
  5. > open https://github.com/YOUR_USER/CURRENT_REPO/commit/SHA 
  6.  
  7. $ git browse -- issues 
  8. > open https://github.com/YOUR_USER/CURRENT_REPO/issues 
  9.  
  10. $ git browse -- issues/10 
  11. > open https://github.com/YOUR_USER/CURRENT_REPO/issues/10 
  12.  
  13. $ git browse schacon/ticgit 
  14. > open https://github.com/schacon/ticgit 
  15.  
  16. $ git browse schacon/ticgit commit/SHA 
  17. > open https://github.com/schacon/ticgit/commit/SHA 
  18.  
  19. $ git browse resque 
  20. > open https://github.com/YOUR_USER/resque 
  21.  
  22. $ git browse resque network 
  23. > open https://github.com/YOUR_USER/resque/network 

git compare

  1. $ git compare refactor 
  2. > open https://github.com/CURRENT_REPO/compare/refactor 
  3.  
  4. $ git compare 1.0..1.1 
  5. > open https://github.com/CURRENT_REPO/compare/1.0...1.1 
  6.  
  7. $ git compare -u fix 
  8. > (https://github.com/CURRENT_REPO/compare/fix) 
  9.  
  10. $ git compare other-user patch 
  11. > open https://github.com/other-user/REPO/compare/patch 

git submodule

  1. $ git submodule add wycats/bundler vendor/bundler 
  2. > git submodule add git://github.com/wycats/bundler.git vendor/bundler 
  3.  
  4. $ git submodule add -p wycats/bundler vendor/bundler 
  5. > git submodule add git@github.com:wycats/bundler.git vendor/bundler 
  6.  
  7. $ git submodule add -b ryppl --name pip ryppl/pip vendor/pip 
  8. > git submodule add -b ryppl --name pip git://github.com/ryppl/pip.git vendor/pip 

git ci-status

  1. $ git ci-status [commit] 
  2. > (prints CI state of commit and exits with appropriate code) 
  3. > One of: success (0), error (1), failure (1), pending (2), no status (3) 

git help

  1. $ git help 
  2. > (improved git help) 
  3. $ git help hub 
  4. > (hub man page) 

原文链接:http://www.techug.com/hub-is-powered-by-go

责任编辑:张伟 来源: 程序师
相关推荐

2024-02-26 19:38:20

GitHubGo库Golang

2022-09-04 23:24:45

Go语言监控

2022-03-13 23:51:39

Web项目Go

2022-01-17 16:18:14

Go枚举源码

2012-07-06 13:16:37

Google Go

2021-07-28 09:32:57

Go社区GitHutGo模块

2012-10-08 09:25:59

GoGo语言开发语言

2018-03-12 22:13:46

GO语言编程软件

2014-07-15 11:16:17

Go语言

2023-11-06 01:39:02

Go语言开发

2022-01-17 16:09:43

Go语言开发

2012-05-19 22:17:30

Android

2013-04-08 15:52:06

Go语言

2014-10-31 09:48:36

Go语言

2023-12-30 10:22:57

Go语言函数开发

2019-04-26 09:37:30

Go 开源技术

2019-01-22 15:32:05

Go语言工具开发

2022-07-18 08:08:16

Go​语言技巧

2020-11-24 09:50:22

大数据语言go

2016-10-13 19:11:45

Go语言Java语言
点赞
收藏

51CTO技术栈公众号