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

    xiaoxiao2024-05-15  140

    “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 你的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.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) 原文发布时间:2014-01-04 本文来自云栖合作伙伴“linux中国”
    最新回复(0)