從0開始學(xué)習(xí) GitHub 系列之「向GitHub 提交代碼」
讀完本文大概需要 5 分鐘戴尸。
之前的這篇文章「從0開始學(xué)習(xí) GitHub 系列之「Git速成」」相信大家都已經(jīng)對(duì) Git 的基本操作熟悉了,但是這篇文章只介紹了對(duì)本地 Git 倉(cāng)庫(kù)的基本操作,今天我就來介紹下如何跟遠(yuǎn)程倉(cāng)庫(kù)一起協(xié)作,教你們向 GitHub 上提交你們的第一行代碼距帅!
1
SSH
你擁有了一個(gè) GitHub 賬號(hào)之后李请,就可以自由的 clone 或者下載其他項(xiàng)目,也可以創(chuàng)建自己的項(xiàng)目侠碧,但是你沒法提交代碼。仔細(xì)想想也知道缠黍,肯定不可能隨意就能提交代碼的弄兜,如果隨意可以提交代碼,那么 GitHub 上的項(xiàng)目豈不亂了套了瓷式,所以提交代碼之前一定是需要某種授權(quán)的替饿,而 GitHub 上一般都是基于 SSH 授權(quán)的。
那么什么是 SSH 呢贸典?
簡(jiǎn)單點(diǎn)說视卢,SSH是一種網(wǎng)絡(luò)協(xié)議,用于計(jì)算機(jī)之間的加密登錄廊驼。目前是每一臺(tái) Linux 電腦的標(biāo)準(zhǔn)配置据过。而大多數(shù) Git 服務(wù)器都會(huì)選擇使用 SSH 公鑰來進(jìn)行授權(quán)颊埃,所以想要在 GitHub 提交代碼的第一步就是要先添加 SSH key 配置。
2
生成SSH key
Linux 與 Mac 都是默認(rèn)安裝了 SSH 蝶俱,而 Windows 系統(tǒng)安裝了 Git Bash 應(yīng)該也是帶了 SSH 的班利。大家可以在終端(win下在 Git Bash 里)輸入ssh如果出現(xiàn)以下提示證明你本機(jī)已經(jīng)安裝 SSH, 否則請(qǐng)搜索自行安裝下榨呆。
緊接著輸入ssh-keygen -t rsa罗标,什么意思呢?就是指定 rsa 算法生成密鑰积蜻,接著連續(xù)三個(gè)回車鍵(不需要輸入密碼)闯割,然后就會(huì)生成兩個(gè)文件?id_rsa 和 id_rsa.pub ,而 id_rsa 是密鑰竿拆,id_rsa.pub 就是公鑰宙拉。這兩文件默認(rèn)分別在如下目錄里生成:
Linux/Mac 系統(tǒng) 在~/.ssh下,win系統(tǒng)在/c/Documents and Settings/username/.ssh下丙笋,都是隱藏文件谢澈,相信你們有辦法查看的。
接下來要做的是把 id_rsa.pub 的內(nèi)容添加到 GitHub 上御板,這樣你本地的 id_rsa 密鑰跟 GitHub 上的 id_rsa.pub 公鑰進(jìn)行配對(duì)锥忿,授權(quán)成功才可以提交代碼。
3
GitHub 上添加 SSH key
第一步先在 GitHub 上的設(shè)置頁(yè)面怠肋,點(diǎn)擊最左側(cè)SSH and GPG keys:
然后點(diǎn)擊右上角的New SSH key按鈕:
需要做的只是在Key那欄把 id_rsa.pub 公鑰文件里的內(nèi)容復(fù)制粘貼進(jìn)去就可以了(上述示例為了安全粘貼的公鑰是無效的)敬鬓,Title那欄不需要填寫,點(diǎn)擊Add SSH key按鈕就ok了笙各。
這里提醒下钉答,怎么查看 id_rsa.pub 文件的內(nèi)容?
Linux/Mac 用戶執(zhí)行以下命令:
cd ~/.ssh
cat id_rsa.pub
Windows用戶杈抢,設(shè)置顯示隱藏文件数尿,可以使用 EditPlus 或者 Sublime 打開復(fù)制就行了。
SSH key 添加成功之后春感,輸入ssh -T git@github.com進(jìn)行測(cè)試砌创,如果出現(xiàn)以下提示證明添加成功了虏缸。
4
Push & Pull
在提交代碼之前我們先要了解兩個(gè)命令鲫懒,也是上次的文章沒有介紹的,因?yàn)檫@兩個(gè)命令需要跟遠(yuǎn)程倉(cāng)庫(kù)配合刽辙。
Push:直譯過來就是「推」的意思窥岩,什么意思呢?如果你本地代碼有更新了宰缤,那么就需要把本地代碼推到遠(yuǎn)程倉(cāng)庫(kù)颂翼,這樣本地倉(cāng)庫(kù)跟遠(yuǎn)程倉(cāng)庫(kù)就可以保持同步了晃洒。
代碼示例:git push origin master
意思就是把本地代碼推到遠(yuǎn)程 master 分支。
Pull:直譯過來就是「拉」的意思朦乏,如果別人提交代碼到遠(yuǎn)程倉(cāng)庫(kù)球及,這個(gè)時(shí)候你需要把遠(yuǎn)程倉(cāng)庫(kù)的最新代碼拉下來,然后保證兩端代碼的同步呻疹。
代碼示例:git pull origin master
意思就是把遠(yuǎn)程最新的代碼更新到本地吃引。一般我們?cè)?push 之前都會(huì)先 pull ,這樣不容易沖突刽锤。
5
提交代碼
添加 SSH key 成功之后镊尺,我們就有權(quán)限向 GitHub 上我們自己的項(xiàng)目提交代碼了,而提交代碼有兩種方法:
Clone自己的項(xiàng)目
我們以我在 GitHub 上創(chuàng)建的 test 項(xiàng)目為例并思,執(zhí)行如下命令:
git clone?git@github.com:stormzhang/test.git
這樣就把 test 項(xiàng)目 clone 到了本地庐氮,你可以把 clone 命令理解為高級(jí)點(diǎn)的復(fù)制,這個(gè)時(shí)候該項(xiàng)目本身就已經(jīng)是一個(gè)git 倉(cāng)庫(kù)了宋彼,不需要執(zhí)行 git init 進(jìn)行初始化弄砍,而且甚至都已經(jīng)關(guān)聯(lián)好了遠(yuǎn)程倉(cāng)庫(kù),我們只需要在這個(gè) test 目錄下任意修改或者添加文件输涕,然后進(jìn)行 commit 输枯,之后就可以執(zhí)行:
git push origin master
進(jìn)行代碼提交,這種是最簡(jiǎn)單方便的一種方式占贫。
至于怎么獲取項(xiàng)目的倉(cāng)庫(kù)地址呢桃熄?如下圖:
關(guān)聯(lián)本地已有項(xiàng)目
如果我們本地已經(jīng)有一個(gè)完整的 git 倉(cāng)庫(kù),并且已經(jīng)進(jìn)行了很多次 commit 型奥,這個(gè)時(shí)候第一種方法就不適合了瞳收。
假設(shè)我們本地有個(gè) test2 的項(xiàng)目,我們需要的是在 GitHub 上建一個(gè) test 的項(xiàng)目厢汹,然后把本地 test2 上的所有代碼 commit 記錄提交到 GitHub 上的 test 項(xiàng)目螟深。
第一步就是在 GitHub 上建一個(gè) test 項(xiàng)目,這個(gè)想必大家都會(huì)了烫葬,就不用多講了界弧。
第二步把本地 test2 項(xiàng)目與 GitHub 上的 test 項(xiàng)目進(jìn)行關(guān)聯(lián),切換到 test2 目錄搭综,執(zhí)行如下命令:
git remote add origingit@github.com:stormzhang/test.git
什么意思呢垢箕?就是添加一個(gè)遠(yuǎn)程倉(cāng)庫(kù),他的地址是git@github.com:stormzhang/test.git 兑巾,而 origin 是給這個(gè)項(xiàng)目的遠(yuǎn)程倉(cāng)庫(kù)起的名字条获,是的,名字你可以隨便取蒋歌,只不過大家公認(rèn)的只有一個(gè)遠(yuǎn)程倉(cāng)庫(kù)時(shí)名字就是 origin 帅掘,為什么要給遠(yuǎn)程倉(cāng)庫(kù)取名字委煤?因?yàn)槲覀兛赡芤粋€(gè)項(xiàng)目有多個(gè)遠(yuǎn)程倉(cāng)庫(kù)?比如 GitHub 一個(gè)修档,比如公司一個(gè)碧绞,這樣的話提交到不同的遠(yuǎn)程倉(cāng)庫(kù)就需要指定不同的倉(cāng)庫(kù)名字了。
查看我們當(dāng)前項(xiàng)目有哪些遠(yuǎn)程倉(cāng)庫(kù)可以執(zhí)行如下命令:
git remote -v
接下來吱窝,我們本地的倉(cāng)庫(kù)就可以向遠(yuǎn)程倉(cāng)庫(kù)進(jìn)行代碼提交了:
git push origin master
就是默認(rèn)向 GitHub 上的 test 目錄提交了代碼头遭,而這個(gè)代碼是在 master 分支。當(dāng)然你可以提交到指定的分支癣诱,這個(gè)之后的文章再詳細(xì)講解计维。
對(duì)了,友情提醒撕予,在提交代碼之前先要設(shè)置下自己的用戶名與郵箱鲫惶,這些信息會(huì)出現(xiàn)在所有的 commit 記錄里,執(zhí)行以下代碼就可以設(shè)置:
git config —global user.name "stormzhang"
git config —global user.email "stormzhang.dev@gmail.com"
6
總結(jié)
通過本文的介紹实抡,終于大家可以成功的向 GitHub 提交代碼了欠母,但是相信大家還有很多疑問,比如關(guān)于分支的理解與使用吆寨,比如 git 的其他一些有用的配置赏淌,比如怎么向一些開源項(xiàng)目貢獻(xiàn)代碼,發(fā)起 Pull Request 等啄清,之后的系列文章會(huì)逐一進(jìn)行介紹六水,敬請(qǐng)期待。
PS:昨天的文章「如何在一群程序員中識(shí)別Android開發(fā)辣卒?」掷贾,是我寫這么多文章以來第一次沒有一個(gè)反對(duì)意見的,回復(fù)全是清一色的「有理有據(jù)荣茫,深度好文」想帅,還有表示「看了我的文章后特意去照了下鏡子,突然發(fā)現(xiàn)說的太他媽對(duì)了」啡莉,還有說「終于找到了為什么一開始就選中 Android 的原因了」港准,我只能說,低調(diào)低調(diào)咧欣!
PS:以前你們生日的時(shí)候都在我文章底下評(píng)論求祝福浅缸,我給你們祝福過,號(hào)召點(diǎn)贊過该押,甚至還給有些人發(fā)過紅包疗杉,其實(shí)我想說,28年前的今天蚕礼,一位偉大的程序員誕生了烟具,因?yàn)樘焐L(zhǎng)得帥,所以命中注定選擇了 Android 開發(fā)奠蹬,今天終于輪到我生日了朝聋,還特意給你們準(zhǔn)備了一篇干貨,你們看著辦吧囤躁,贊賞冀痕、點(diǎn)擊廣告、轉(zhuǎn)發(fā)砸向我吧狸演!