教程:使用GitHub和BitBucket的正確姿勢
閒扯兩句
Git可能是目前地球上最好用的版本控制系統了(沒有之一)。
GitHub對開發者的知名程度也不囉嗦了,稍提兩點:
最流行的開源代碼託管服務(個人認為沒有之一),連 Linux Kernel 都在上面;
是最受歡迎的Git服務(也沒有之一);
幫助文檔詳細而友好;
開源項目可以免費;
Issue Tracking和Wiki等工具一應俱全,還能跟代碼提交註釋集成;
大家都用你為什麼不用!!!
吉祥物很萌有木有!(敲黑板!)。
不過在國內訪問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:\User\YourUserName\.ssh,這裡把YourUserName換成你自己的用戶名);在macOS/Linux下config文件位置在~/.ssh/目錄下如果沒有.ssh路徑和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或者其他域名一併加上,如下所示:
寫完保存,Windows下推薦用Sublime Text編輯,如果你是用的vi/vim,記得切換回命令模式並:wq。
3.開始體驗”飛一樣的感覺“,打開shadowsocks和kcptun:
開始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選項
在Android Studio中也一樣(畢竟基於IntelliJ IDEA)