Git大法好——4.Github作為遠程倉庫的使用詳解
標簽: Git
引言
首先我們先來回顧一下之前的三節(jié)我們都學(xué)了些什么:
第一節(jié):Git的引入以及關(guān)于Git的一些概念赞厕,讓我們對Git有了一個基本的認識偷办;
第二節(jié):Git的本地操作指令詳解韭畸,熟悉了一波Git本地操作的指令;
第三節(jié):Git的分支操作鬼悠,包括分支的創(chuàng)建,切換江滨,處理沖突,合并厌均;
假如學(xué)完前面三節(jié)唬滑,大家后面又自己擼了幾次指令,相信應(yīng)該就有信手拈來的感覺了棺弊!
第一節(jié)中我們說Git由:工作空間晶密,暫存區(qū),本地倉庫和遠程倉庫這四個部分組成模她,
前三個部分我們都有涉獵稻艰,所以本節(jié)講解的是遠程倉庫部分的內(nèi)容!
其實遠程倉庫也沒你想象的那么復(fù)雜缝驳,可以理解成只是把本地倉庫丟到了某個
服務(wù)器上连锯,然后別人把你的倉庫clone(克隆)或者說拷貝下來而已归苍!又或者說是
多人協(xié)作時用狱,各個人本地倉庫更改整合的一個媒介而已!
說回這個遠程倉庫拼弃,你可以自己搞臺服務(wù)器夏伊,然后自己搭建,也可以將項目托管
到代碼托管網(wǎng)站吻氧,比如Github溺忧,GitCafe咏连,Git@OSC,GitLab鲁森,coding.net等祟滴。
選哪個其實都差不多,都是用來托管代碼的而已歌溉,下面簡單介紹下這幾個吧:
-
Github:是最大的代碼托管網(wǎng)站垄懂,大部分的開發(fā)者都喜歡使用這個,但是開源項
目不收費痛垛,而私有項目是要交"保護費"的草慧,而且Github服務(wù)器畢竟在國外,國內(nèi)訪
問可能會有些緩慢匙头! -
GitCafe:同樣私有倉庫收保護費漫谷,開源倉庫免費,但是相比起github有點坑蹂析,而且
是不時會掛掉舔示,不是很推薦... - Git@OSC:開源中國社區(qū)的,倉庫免費电抚,不過協(xié)作功能還沒有完全體現(xiàn)斩郎。
-
GitLab:開源的版本管理系統(tǒng),可以安裝Gitlab CE源碼喻频,自己搭服務(wù)器缩宜;也可以使
用GitLab EE企業(yè)版,GitLab可以配合著其他IM工作使用甥温,比如我司用的瀑布IM锻煌,當有人
推送更新的時候收到推送信息等! -
coding.net:國內(nèi)體驗最接近Github的產(chǎn)品姻蚓,有免費版和開發(fā)版宋梧,高級版,內(nèi)容可
自行到官網(wǎng)查看狰挡。
好的捂龄,最后我們還是選擇GitHub作為我們的遠程倉庫,原因就不多說了加叁。
1.Github賬號注冊與創(chuàng)建新倉庫
注冊Github賬號:
- 打開注冊鏈接:https://github.com/join
- 依次填寫注冊相關(guān)信息:用戶呢稱倦沧,郵箱,密碼它匕,填寫完畢后點擊Create an account
- 打開注冊郵箱展融,打開收到的驗證郵件,點擊完成賬號驗證
- 點擊右上角的"Sign in"輸入你剛注冊的注冊郵箱和密碼豫柬,登陸Github告希。
創(chuàng)建新倉庫:
-
點擊右上角扑浸,創(chuàng)建一個新倉庫
- 接著依次填寫:Repository name(倉庫名稱),Description(描述信息燕偶,可寫可不寫)喝噪,
選擇Public倉庫,勾選Initialize this repository with a README指么,自動創(chuàng)建一個README.md
文件仙逻,點擊Create repository創(chuàng)建一個倉庫。
2.把本地倉庫推送到新倉庫
這里我們在Android Studio創(chuàng)建一個新的項目涧尿,然后來到項目所在的位置系奉,右鍵git bash,
鍵入:git init將這個項目變成帶有g(shù)it倉庫的項目姑廉,這里我們拷貝下Github那里我們這個
倉庫的地址:
git remote add origin https://github.com/coder-pig/SimpleTea.git
指定完遠程主機后,我們可以直接鍵入git remote來查看桥言,或者加上-v:
接著我們鍵入下述命令把我們的倉庫push到github上萌踱,這里的-u參數(shù)作為第一次提交使用,
作用是把本地master分支和遠程master分支關(guān)聯(lián)起來(設(shè)置默認遠程主機)号阿,后續(xù)提交不需要這
個參數(shù)并鸵!
git push -u origin master
這時候打開我們的GitHub就可以看到我們的項目已經(jīng)成功push上來了!
這里我們是通過git remote來設(shè)置遠程倉庫地址的扔涧,假如你想修改遠程倉庫地址园担,
比如你把倉庫托管換成了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不是什么固定的東西咏闪,這個只是我們后面那個倉庫地址的一個別名!Kだ簟鸽嫂!
你可以寫成其他的東西,比如我的項目既托管在Github又托管在Git@OSC征讲,我可這樣設(shè)置:
git remote add github https://github.com/coder-pig/SimpleTea.git
git remote add osc git@git.oschina.net:coder-pig/SimpleTea.git
這一點要弄清楚>菽场!稳诚!
3.為項目添加SSH Key免去提交輸入賬號密碼的麻煩
不知道細心的你有沒有發(fā)現(xiàn)哗脖,倉庫地址除了Https外,還有一個SSH扳还,這里我們簡單介紹下
兩者的區(qū)別才避,第一點:使用Https url可以任意克隆Github上的項目;而是用SSH url
克隆的話氨距,你必須是項目的擁有者或管理員桑逝,而且還要添加SSH Key,否則會無法克隆俏让。
還有一點是楞遏,Https每次push都需要輸入用戶名和密碼,而使用SSH則不需要輸入用戶名
如果配置SSH Key時設(shè)置了密碼首昔,則需要輸入密碼寡喝,否則直接git push就可以了!
另外勒奇,SSH预鬓,Secure shell(安全外殼協(xié)議),專為遠程登陸會話與其他網(wǎng)絡(luò)服務(wù)提供安全性
的協(xié)議赊颠, 而SSH傳輸?shù)臄?shù)據(jù)是可以經(jīng)過壓縮的格二,可以加快傳輸?shù)乃俣龋鲇诎踩耘c速度竣蹦,
我們優(yōu)先考慮使用SSH協(xié)議顶猜,而SSH的安全驗證規(guī)則又分為基于密碼和基于密鑰兩種!
我們這里用的是基于第二種的痘括,即在本地創(chuàng)建一對密鑰长窄,公鑰(id_rsa.pub)和私鑰(id_rsa),
然后把公鑰的內(nèi)容貼到Github賬號的ssh keys中,這樣就建立了本地和遠程的認證關(guān)系纲菌,
當我們再push到遠程倉庫抄淑,會將你本地的公共密鑰與服務(wù)器的進行匹配,如果一致驗證通過
直接推送更新驰后!
下面我們來建立ssh key肆资,首先來到電腦的根目錄下,這里假定我們沒創(chuàng)建過SSH key:
執(zhí)行完ssh-keygen那個指令后灶芝,后面依次要你輸入文件名郑原,直接回車會生成兩個默認的
秘鑰文件,接著提示輸入密碼夜涕,直接回車犯犁,如果這里你輸入密碼了的話,那么push的時
候你還是需要輸入密碼女器,接著又輸多一次密碼酸役,同樣回車,然后出現(xiàn)最下面的這串東西
就說明ssh key已經(jīng)創(chuàng)建成功了!
我們接著可以用編輯器打開id_rsa.pub文件或者鍵入:
clip <id_rsa.pub
復(fù)制文件內(nèi)容涣澡,然后打開Github贱呐,點擊你的頭像,選擇:Settings入桂,然后點擊左側(cè)SSH Keys,
然后New SSH Key
然后Github會給你發(fā)來一個提示創(chuàng)建了一個新ssh key的郵件奄薇,無視就好,接下來我們可以
鍵入:ssh -T 779878443@qq.com抗愁,后面的是你的注冊郵箱馁蒂,然后如果你上面設(shè)置過
密碼則需要輸入密碼,否則直接輸入yes然后一直按回車就好蜘腌!沫屡,最后出現(xiàn)Hi xxx那句話
就說明ssh key配置成功了!
內(nèi)容參考:https://help.github.com/articles/generating-an-ssh-key/
4..gitignore文件的編寫
我們在Push項目的時候撮珠,可能會有一些無關(guān)的東西沮脖,不需要傳到遠程倉庫,我們可
以在項目目錄下新增一個.gitignore文件劫瞳,然后寫上不想提交的目錄倘潜,支持通配符,
比如筆者常用的android studio中的.gitignore的文件內(nèi)容:
*.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
你可以根據(jù)自己的需求來編寫志于,另外提供一個github上的一個.gitignore的模板的庫涮因,
要什么項目的可以來這里直接找:https://github.com/github/gitignore。
5.同步遠程服務(wù)器更新(fetch VS pull)
現(xiàn)在我們知道可以remote設(shè)置遠程倉庫地址伺绽,push推送更新到遠程服務(wù)器养泡,clone克隆遠程
倉庫,接著就到本地倉庫同步遠程倉庫了奈应,關(guān)于獲取遠程服務(wù)器更新的方式有兩種澜掩,他們
分別是fetch和pull,盡管都可以獲取遠程服務(wù)器更新杖挣,但是兩者卻又是不一樣的肩榕。
首先說下fetch吧,僅僅只是從遠處服務(wù)器獲取到最新版本到本地惩妇,假如你不去合并(merge)
的話株汉,本地工作空間是不會發(fā)生變化的!這里我們在Github上創(chuàng)建一個README.md文件
而是用pull確是一步到位的歌殃,或者說:pull = fetch + merge乔妈!這里我們
先改下Github上README.md的內(nèi)容!
好的氓皱,區(qū)別很顯而易見路召,實際使用中勃刨,使用git fetch顯得更安全一點,至少在merge
之前我們可以查看更新情況股淡,再決定是否進行合并身隐;而筆者實際開發(fā)中用pull
用得較多,主要是懶揣非,哈哈抡医,至于用哪個躲因,見仁見智吧早敬!
6.Github客戶端介紹
其實,安裝好Git后大脉,就一有一個Git Gui的東東了搞监,就可以直接用有用戶界面的
Git來做版本管理的工作了,而Github客戶端則是Github給我們提供的一個專門用來
管理Github項目的一個工具而已镰矿。比如琐驴,假如你裝了Github客戶端,在Clone項目
的時候秤标,你只需點擊:
就能直接把項目clone下來绝淡,就是一些Git操作的圖形化罷了,首先來到下面的鏈接
下載Github客戶端:https://desktop.github.com/
文件很小苍姜,后面點擊運行文件后牢酵,他還要在線下載安裝,100多m衙猪,然后傻瓜式安裝馍乙,
安裝完成后,會自動打開Github客戶端垫释,然后使用你的Github賬號登陸丝格,接著他會
默認為你創(chuàng)建SSH Key信息,接著的你自己摸索了棵譬!
這里另外補充一點显蝌,就是win 8.1裝Github客戶端的問題,昨晚安裝的時候一直
報這個錯誤:
直接订咸,win + x曼尊,選擇"命令行提示符(管理員)",執(zhí)行以下下面的這個指令:
%SYSTEMROOT%\SYSTEM32\REGSVR32.EXE %SYSTEMROOT%\SYSTEM32\WUAUENG.DLL
然后再點擊Github的安裝程序算谈,等待安裝完成即可涩禀,下載并不需梯子。
7.如何刪除Github上的倉庫
點擊進入你的倉庫然眼,點擊Setting艾船,拉到最后:
點擊Delete this repository
彈出的對話框中輸入要刪除的倉庫名稱,接著點擊刪除
8.如何為開源項目貢獻代碼
你可以Clone別人的開源項目,在看別人代碼的時候屿岂,你覺得作者有某些地方寫得不好践宴,
寫錯,或者你有更好的想法爷怀,你在本地修改后阻肩,想把修改push推送到開源項目上,
想法很好运授,但是你不是項目的擁有著和參與者烤惊,是無法推送更改的!S蹼柒室!這樣是為了
避免熊孩子,畢竟熊孩子無處不在逗宜,參與開源項目的方法有兩種:
第一種方法:
是讓作者把你加為寫作者雄右,添加協(xié)作者流程:點擊倉庫的Settings
-->Collaborators然后輸入想添加的人的用戶名或者郵箱,點擊添加即可纺讲。
第二種方法:
點擊Fork按鈕擂仍,把這個項目fork到自己的賬號下,然后Clone到本地熬甚,然后
做你想做的修改逢渔,commit提交,然后push到自己賬號里的倉庫则涯,然后打開開源
項目复局,點擊
倉庫亿昏,設(shè)置源分支,目標倉庫與目標分支档礁,然后還有pull request的標題和
描述信息角钩,填寫完畢后,確定呻澜,這個時候開源項目的作者就會收到一個pull
request的請求递礼,由他來進行審核,作者審查完代碼覺得沒問題的話羹幸,他可以
點擊一下merge按鈕即可將這個pull request合并到自己的項目中脊髓,假如作者
發(fā)現(xiàn)了你代碼中還有些bug,他可以通過Pull Request跟你說明栅受,要修復(fù)了
xxBUG才允許合并将硝,那么你再修改下BUG恭朗,提交,更改后的提交會進入Pull
Request依疼,然后作者再審核這樣痰腮!
PS:假如作者不關(guān)閉或者merge你的這個Pull Request,你可以一直commit
騷擾主項目...( ╯□╰ )
9.刪除服務(wù)器上的無用分支
直接鍵入:
git push origin :無用分支名
10.一些補充
限于篇幅和水平顯示律罢,關(guān)于Github的介紹還有些遺漏膀值,比如頁面介紹或其他東東,
這里貼下一些相關(guān)的文章误辑,可以看看沧踏,后續(xù)看到不錯的文章會補上:
另外稀余,再安利一個練習(xí)Git命令行很棒的一個開源項目:githug
通過闖關(guān)的形式讓你熟悉Git命令的使用悦冀,總共有55個關(guān)卡趋翻,不過只能夠在linux
系統(tǒng)上玩睛琳,因為安裝游戲的指令就是:gem install github,關(guān)于通關(guān)攻略
網(wǎng)上有很多踏烙,這里貼下之前在簡書上看到的一個:「Githug」Git 游戲通關(guān)流程
小結(jié)
本節(jié)給大家講解了Github作為遠程倉庫的可能會遇到的問題师骗,但還是記住:
遠程倉庫只是作為我們交換各自本地倉庫的一個媒介罷了讨惩,我們可以換成其他
的倉庫辟癌,換湯不換藥,我們更應(yīng)該關(guān)注的是本地倉庫的操作以及多人協(xié)作時的工作流
程荐捻,下節(jié)我們通過簡單的例子來闡述Git多人協(xié)作開發(fā)的流程黍少,敬請期待!
——作者:coder-pig处面,本教程不收取任何費用厂置,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處魂角,尊重作者
勞動成果昵济,請勿用于商業(yè)用途,侵權(quán)必究野揪!