歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Git大法好——4.Github作為遠程倉庫的使用詳解

Git大法好——4.Github作為遠程倉庫的使用詳解

日期:2017/3/1 12:15:52   编辑:關於Linux

Git大法好——4.Github作為遠程倉庫的使用詳解

標簽: Git


引言

首先我們先來回顧一下之前的三節我們都學了些什麼:
第一節:Git的引入以及關於Git的一些概念,讓我們對Git有了一個基本的認識;
第二節:Git的本地操作指令詳解,熟悉了一波Git本地操作的指令;
第三節:Git的分支操作,包括分支的創建,切換,處理沖突,合並;
假如學完前面三節,大家後面又自己撸了幾次指令,相信應該就有信手拈來的感覺了!
第一節中我們說Git由:工作空間,暫存區,本地倉庫和遠程倉庫這四個部分組成,
前三個部分我們都有涉獵,所以本節講解的是遠程倉庫部分的內容!
其實遠程倉庫也沒你想象的那麼復雜,可以理解成只是把本地倉庫丟到了某個
服務器上,然後別人把你的倉庫clone(克隆)或者說拷貝下來而已!又或者說是
多人協作時,各個人本地倉庫更改整合的一個媒介而已!

說回這個遠程倉庫,你可以自己搞台服務器,然後自己搭建,也可以將項目托管
到代碼托管網站,比如GithubGitCafeGit@OSCGitLabcoding.net等。
選哪個其實都差不多,都是用來托管代碼的而已,下面簡單介紹下這幾個吧:

Github:是最大的代碼托管網站,大部分的開發者都喜歡使用這個,但是開源項
目不收費,而私有項目是要交”保護費”的,而且Github服務器畢竟在國外,國內訪
問可能會有些緩慢! GitCafe:同樣私有倉庫收保護費,開源倉庫免費,但是相比起github有點坑,而且
是不時會掛掉,不是很推薦… Git@OSC:開源中國社區的,倉庫免費,不過協作功能還沒有完全體現。 GitLab:開源的版本管理系統,可以安裝Gitlab CE源碼,自己搭服務器;也可以使
用GitLab EE企業版,GitLab可以配合著其他IM工作使用,比如我司用的瀑布IM,當有人
推送更新的時候收到推送信息等! coding.net:國內體驗最接近Github的產品,有免費版和開發版,高級版,內容可
自行到官網查看。

好的,最後我們還是選擇GitHub作為我們的遠程倉庫,原因就不多說了。


1.Github賬號注冊與創建新倉庫

注冊Github賬號

打開注冊鏈接:https://github.com/join 依次填寫注冊相關信息:用戶呢稱,郵箱,密碼,填寫完畢後點擊Create an account 打開注冊郵箱,打開收到的驗證郵件,點擊完成賬號驗證 點擊右上角的”Sign in”輸入你剛注冊的注冊郵箱和密碼,登陸Github。

創建新倉庫

點擊右上角,創建一個新倉庫 \ 接著依次填寫:RepositZ喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcnkgbmFtZTwvc3Ryb25nPiiy1r/iw/uzximjrDxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz4ow+jK9tDFz6KjrL/J0LS/ybK70LQpo6w8YnIgLz4NCtGh1PE8c3Ryb25nPlB1YmxpY7LWv+I8L3N0cm9uZz6jrLm00aFJbml0aWFsaXplIHRoaXMgcmVwb3NpdG9yeSB3aXRoIGEgUkVBRE1Fo6zX1LavtLS9qNK7uPZSRUFETUUubWQ8YnIgLz4NCs7EvP6jrLXju/c8c3Ryb25nPkNyZWF0ZSByZXBvc2l0b3J5PC9zdHJvbmc+tLS9qNK7uPay1r/ioaMNCjxociAvPg0KPGgyIGlkPQ=="2把本地倉庫推送到新倉庫">2.把本地倉庫推送到新倉庫

這裡我們在Android Studio創建一個新的項目,然後來到項目所在的位置,右鍵git bash
鍵入:git init將這個項目變成帶有git倉庫的項目,這裡我們拷貝下Github那裡我們這個
倉庫的地址:\,然後鍵入下述指令:

git remote add origin https://github.com/coder-pig/SimpleTea.git

\

指定完遠程主機後,我們可以直接鍵入git remote來查看,或者加上-v:

接著我們鍵入下述命令把我們的倉庫push到github上,這裡的-u參數作為第一次提交使用,
作用是把本地master分支和遠程master分支關聯起來(設置默認遠程主機),後續提交不需要這
個參數!

git push -u origin master

\

這時候打開我們的GitHub就可以看到我們的項目已經成功push上來了!

這裡我們是通過git remote來設置遠程倉庫地址的,假如你想修改遠程倉庫地址,
比如你把倉庫托管換成了Git@OSC,你需要修改遠程地址,可以鍵入:

git remote set-url origin xxxx

來修改遠程地址,你也可以先刪除origin然後再添加:

git remote rm origin
git remote add origin https://github.com/coder-pig/SimpleTea.git

還可以直接修改.git文件夾裡的config文件,直接替換圈住位置:

\

另外,這個origin不是什麼固定的東西,這個只是我們後面那個倉庫地址的一個別名!!!
你可以寫成其他的東西,比如我的項目既托管在Github又托管在Git@OSC,我可這樣設置:

git remote add github https://github.com/coder-pig/SimpleTea.git
git remote add osc [email protected]:coder-pig/SimpleTea.git

這一點要弄清楚!!!


3.為項目添加SSH Key免去提交輸入賬號密碼的麻煩

不知道細心的你有沒有發現,倉庫地址除了Https外,還有一個SSH,這裡我們簡單介紹下
兩者的區別,第一點:使用Https url可以任意克隆Github上的項目;而是用SSH url
克隆的話,你必須是項目的擁有者或管理員,而且還要添加SSH Key,否則會無法克隆。
還有一點是,Https每次push都需要輸入用戶名和密碼,而使用SSH則不需要輸入用戶名
如果配置SSH Key時設置了密碼,則需要輸入密碼,否則直接git push就可以了!

另外,SSH,Secure shell(安全外殼協議),專為遠程登陸會話與其他網絡服務提供安全性
的協議, 而SSH傳輸的數據是可以經過壓縮的,可以加快傳輸的速度,出於安全性與速度,
我們優先考慮使用SSH協議,而SSH的安全驗證規則又分為基於密碼基於密鑰兩種!
我們這裡用的是基於第二種的,即在本地創建一對密鑰,公鑰(id_rsa.pub)私鑰(id_rsa),
然後把公鑰的內容貼到Github賬號的ssh keys中,這樣就建立了本地和遠程的認證關系,
當我們再push到遠程倉庫,會將你本地的公共密鑰與服務器的進行匹配,如果一致驗證通過
直接推送更新!

下面我們來建立ssh key,首先來到電腦的根目錄下,這裡假定我們沒創建過SSH key:

\

執行完ssh-keygen那個指令後,後面依次要你輸入文件名,直接回車會生成兩個默認的
秘鑰文件,接著提示輸入密碼,直接回車,如果這裡你輸入密碼了的話,那麼push的時
候你還是需要輸入密碼,接著又輸多一次密碼,同樣回車,然後出現最下面的這串東西
就說明ssh key已經創建成功了!

我們接著可以用編輯器打開id_rsa.pub文件或者鍵入:

clip 

復制文件內容,然後打開Github,點擊你的頭像,選擇:Settings,然後點擊左側SSH Keys,
然後New SSH Key

\

然後Github會給你發來一個提示創建了一個新ssh key的郵件,無視就好,接下來我們可以
鍵入:ssh -T [email protected],後面的是你的注冊郵箱,然後如果你上面設置過
密碼則需要輸入密碼,否則直接輸入yes然後一直按回車就好!,最後出現Hi xxx那句話
就說明ssh key配置成功了!

\

內容參考:https://help.github.com/articles/generating-an-ssh-key/


4..gitignore文件的編寫

我們在Push項目的時候,可能會有一些無關的東西,不需要傳到遠程倉庫,我們可
以在項目目錄下新增一個.gitignore文件,然後寫上不想提交的目錄,支持通配符,
比如筆者常用的android studio中的.gitignore的文件內容:

*.DS_Store


# Gradle files
build/
.gradle/
*/build/


# IDEA
*.iml
.idea/.name
.idea/encodings.xml
.idea/inspectionProfiles/Project_Default.xml
.idea/inspectionProfiles/profiles_settings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/vcs.xml
.idea/workspace.xml
.idea/libraries


# Built application files
*.apk
*.ap_


# Files for the Dalvik VM
*.dex


# Java class files
*.class


# Generated files
antLauncher/bin
antLauncher/gen


# Local configuration file (sdk path, etc)
local.properties


# Log Files
*.log

你可以根據自己的需求來編寫,另外提供一個github上的一個.gitignore的模板的庫,
要什麼項目的可以來這裡直接找:https://github.com/github/gitignore。


5.同步遠程服務器更新(fetch VS pull)

現在我們知道可以remote設置遠程倉庫地址,push推送更新到遠程服務器,clone克隆遠程
倉庫,接著就到本地倉庫同步遠程倉庫了,關於獲取遠程服務器更新的方式有兩種,他們
分別是fetchpull,盡管都可以獲取遠程服務器更新,但是兩者卻又是不一樣的。
首先說下fetch吧,僅僅只是從遠處服務器獲取到最新版本到本地,假如你不去合並(merge)
的話,本地工作空間是不會發生變化的!這裡我們在Github上創建一個README.md文件

\

而是用pull確是一步到位的,或者說:pull = fetch + merge!這裡我們
先改下Github上README.md的內容!

\

好的,區別很顯而易見,實際使用中,使用git fetch顯得更安全一點,至少在merge
之前我們可以查看更新情況,再決定是否進行合並;而筆者實際開發中用pull
用得較多,主要是懶,哈哈,至於用哪個,見仁見智吧!


6.Github客戶端介紹

其實,安裝好Git後,就一有一個Git Gui的東東了,就可以直接用有用戶界面的
Git來做版本管理的工作了,而Github客戶端則是Github給我們提供的一個專門用來
管理Github項目的一個工具而已。比如,假如你裝了Github客戶端,在Clone項目
的時候,你只需點擊:

\

就能直接把項目clone下來,就是一些Git操作的圖形化罷了,首先來到下面的鏈接
下載Github客戶端:https://desktop.github.com/
文件很小,後面點擊運行文件後,他還要在線下載安裝,100多m,然後傻瓜式安裝,
安裝完成後,會自動打開Github客戶端,然後使用你的Github賬號登陸,接著他會
默認為你創建SSH Key信息,接著的你自己摸索了!

這裡另外補充一點,就是win 8.1裝Github客戶端的問題,昨晚安裝的時候一直
報這個錯誤:

\

直接,win + x,選擇”命令行提示符(管理員)“,執行以下下面的這個指令:

%SYSTEMROOT%\SYSTEM32\REGSVR32.EXE %SYSTEMROOT%\SYSTEM32\WUAUENG.DLL

然後再點擊Github的安裝程序,等待安裝完成即可,下載並不需梯子。


7.如何刪除Github上的倉庫

點擊進入你的倉庫,點擊Setting,拉到最後:

\

點擊Delete this repository

\

彈出的對話框中輸入要刪除的倉庫名稱,接著點擊刪除

\


8.如何為開源項目貢獻代碼

你可以Clone別人的開源項目,在看別人代碼的時候,你覺得作者有某些地方寫得不好,
寫錯,或者你有更好的想法,你在本地修改後,想把修改push推送到開源項目上,
想法很好,但是你不是項目的擁有著和參與者,是無法推送更改的!!!這樣是為了
避免熊孩子,畢竟熊孩子無處不在,參與開源項目的方法有兩種:

第一種方法
是讓作者把你加為寫作者,添加協作者流程:點擊倉庫的Settings
–>Collaborators然後輸入想添加的人的用戶名或者郵箱,點擊添加即可。

第二種方法
點擊Fork按鈕,把這個項目fork到自己的賬號下,然後Clone到本地,然後
做你想做的修改,commit提交,然後push到自己賬號裡的倉庫,然後打開開源
項目,點擊 \,然後新建一個pull request,接著設置自己的倉庫為**源
倉庫,設置源分支目標倉庫目標分支**,然後還有pull request的標題和
描述信息,填寫完畢後,確定,這個時候開源項目的作者就會收到一個pull
request的請求,由他來進行審核,作者審查完代碼覺得沒問題的話,他可以
點擊一下merge按鈕即可將這個pull request合並到自己的項目中,假如作者
發現了你代碼中還有些bug,他可以通過Pull Request跟你說明,要修復了
xxBUG才允許合並,那麼你再修改下BUG,提交,更改後的提交會進入Pull
Request,然後作者再審核這樣!

PS:假如作者不關閉或者merge你的這個Pull Request,你可以一直commit
騷擾主項目…( ╯□╰ )


9.刪除服務器上的無用分支

直接鍵入:

git push origin :無用分支名

10.一些補充

限於篇幅和水平顯示,關於Github的介紹還有些遺漏,比如頁面介紹或其他東東,
這裡貼下一些相關的文章,可以看看,後續看到不錯的文章會補上:

怎樣使用 GitHub? 如何高效利用GitHub

另外,再安利一個練習Git命令行很棒的一個開源項目:githug
通過闖關的形式讓你熟悉Git命令的使用,總共有55個關卡,不過只能夠在linux
系統上玩,因為安裝游戲的指令就是:gem install github,關於通關攻略
網上有很多,這裡貼下之前在簡書上看到的一個:「Githug」Git 游戲通關流程


小結

本節給大家講解了Github作為遠程倉庫的可能會遇到的問題,但還是記住:
遠程倉庫只是作為我們交換各自本地倉庫的一個媒介罷了,我們可以換成其他
的倉庫,換湯不換藥,我們更應該關注的是本地倉庫的操作以及多人協作時的工作流
程,下節我們通過簡單的例子來闡述Git多人協作開發的流程,敬請期待!

——作者:coder-pig,本教程不收取任何費用,歡迎轉載,轉載請注明出處,尊重作者
勞動成果,請勿用於商業用途,侵權必究!

Copyright © Linux教程網 All Rights Reserved