華文網

教程:使用GitHub和BitBucket的正確姿勢

閒扯兩句

Git可能是目前地球上最好用的版本控制系統了(沒有之一)。

GitHub對開發者的知名程度也不囉嗦了,稍提兩點:

最流行的開原始程式碼託管服務(個人認為沒有之一),連 Linux Kernel 都在上面;

是最受歡迎的Git服務(也沒有之一);

幫助文檔詳細而友好;

開源項目可以免費;

Issue Tracking和Wiki等工具一應俱全,還能跟代碼提交注釋集成;

大家都用你為什麼不用!!!

吉祥物很萌有木有!(敲黑板!)。

GitHub吉祥物

風騷的貼紙

不過在國內訪問GitHub(包括BitBucket)的速度那叫一個慘不忍睹!

尤其git clone的速度那叫一個鬼哭狼嚎!clone的時候下著下著就失敗了,家常便飯!

解決方案

準備

shadowsocks等,我個人的配置是shadowsocks + kcptun,主要是為了速度。

至於science上網,這裡不再累贅,有機會可以下次介紹,感興趣的同學可以參考shadowsocks-go和xtaci的kcptun。

不過最近水錶查得緊,自行斟酌。

測試環境

這裡主要討論通過ssh通道代理socks的方式。


經本人驗證通過的環境有:

macOS (Sierra/High Sierra)

Windows (10 Version 1703)

Linux (Ubuntu 16.04.3 LTS && CentOS 7_1708)

理論上各個環境無版本號限制,方法是通用的。

因目前手頭設備限制,所以用macOS環境作演示。

開始

我們先看看正常情況下使用git clone的效果,不忍直視(以我Fork來的linux倉庫為例):

沒有使用代理時的效果

2.更改.ssh的config文件。

Windows下config檔位置在個人使用者目錄的.ssh資料夾下(路徑一般是C:UserYourUserName.ssh,這裡把YourUserName換成你自己的用戶名);在macOS/Linux下config檔位置在~/.ssh/目錄下如果沒有.ssh路徑和config檔,可以自己創建。

創建和編輯config檔

在config檔中寫下:

Host github.com User git ProxyCommand nc -x localhost:1080 %h %p

這裡github.com是你clone時需要走代理的Host主機功能變數名稱或IP位址,User一般都是git(哪怕是我們自己搭建的git託管伺服器一般情況下,

也是以git作為用戶名)。重點來了:ProxyCommand會根據作業系統和你代理配置的不同而不一樣,例如Windows下是沒有nc命令的。localhost是我本地代理的位址,你可以替換為你自己的代理伺服器位址。1080是我本地代理設置監聽的埠號,你可以替換為你自己設置的。針對不同作業系統下不同的ProxyCommand寫法,git官方也給出了解決方案,在此就不細談了。

當然如果你需要的話也可以把bitbucket.org或者其他功能變數名稱一併加上,

如下所示:

編輯好的config檔

寫完保存,Windows下推薦用Sublime Text編輯,如果你是用的vi/vim,記得切換回命令模式並:wq。

3.開始體驗”飛一樣的感覺“,打開shadowsocks和kcptun:

測試環境

開始git clone

代理後的git clone速度

由於我寫作時的網路環境並不是太好,其實在真實生產環境下速度還可以更快一些。

再提兩句:

關於視覺化介面的用戶端(GitHub Desktop/SourceTree)

使用GitHub Desktop和SourceTree用戶端進行clone、pull、push等一系列的操作,即使通過本文的加速方式也無效果,也許視覺化介面的用戶端走的是http/https的協議吧,在上述兩款視覺化介面用戶端的配置裡也未發現有任何關於using ssh的選項。

關於JetBrains

以CLion為例,JetBrains的產品中可以通過設置來提高Version Control功能的速度:

打開Preferences-Version Control-GitHub,勾上Clone git repositories using ssh選項

CLion中的Preferences介面

在Android Studio中也一樣(畢竟基於IntelliJ IDEA)

Android Studio中的Preferences介面

測試環境

開始git clone

代理後的git clone速度

由於我寫作時的網路環境並不是太好,其實在真實生產環境下速度還可以更快一些。

再提兩句:

關於視覺化介面的用戶端(GitHub Desktop/SourceTree)

使用GitHub Desktop和SourceTree用戶端進行clone、pull、push等一系列的操作,即使通過本文的加速方式也無效果,也許視覺化介面的用戶端走的是http/https的協議吧,在上述兩款視覺化介面用戶端的配置裡也未發現有任何關於using ssh的選項。

關於JetBrains

以CLion為例,JetBrains的產品中可以通過設置來提高Version Control功能的速度:

打開Preferences-Version Control-GitHub,勾上Clone git repositories using ssh選項

CLion中的Preferences介面

在Android Studio中也一樣(畢竟基於IntelliJ IDEA)

Android Studio中的Preferences介面