Github 完整学习教程
前言
本文可能不會(huì)是非常詳細(xì)的關(guān)于 GitHub 的教程,只是把基本的步驟和重要的地方記錄下來(lái),方便查閱。關(guān)于 GitHub 的學(xué)習(xí),建議可以首先閱讀完參考資料中的 stormzhang 從 0 開(kāi)始學(xué)習(xí) GitHub。
說(shuō)道 GitHub,可能很多人也常聽(tīng)到 Git,那這兩是同一個(gè)東西嗎?答案不是的。很早的我、懵懂的我,雖然經(jīng)常聽(tīng)到這兩家伙,但是不是很清楚區(qū)別。我相信很多人也是的,認(rèn)為 GitHub 就是 Git,其實(shí)這是一個(gè)理解的誤區(qū)。
我們先看下 Wiki 百科上關(guān)于 GitHub 說(shuō)的吧:
GitHub 是個(gè)共享虛擬主機(jī)服務(wù),于存放使Git 版本控制的軟件代碼和內(nèi)容項(xiàng)它由 GitHub 公司(曾稱(chēng) Logical Awesome)的開(kāi)發(fā)者 ChrisWanstrath、 PJ Hyett 和 Tom Preston-Werner 使? Ruby on Rails 編寫(xiě)成。
可能這么說(shuō)大家不能理解其作用。
說(shuō)下什么是 Git?
Git 是一款免費(fèi)、開(kāi)源的分布式版本控制系統(tǒng),他是著名的 Linux 發(fā)明者 Linus Torvalds 開(kāi)發(fā)的。說(shuō)到版本控制系統(tǒng),估計(jì)很多人都用過(guò) SVN ,只不過(guò) Git 是新時(shí)代的產(chǎn)物,如果你還在用 SVN 來(lái)管理你的代碼,那就真的有些落伍了。
其實(shí)就和 SVN 一樣, Git 是代碼版本控制系統(tǒng),免費(fèi)開(kāi)源的,并且是一個(gè)分布式版本控制系統(tǒng)。不管是學(xué)GitHub,還是以后想從事編程行業(yè),可以說(shuō) Git 算是必備技能了。而 GitHub 上面說(shuō)了,主要提供基于 git 的版本托管服務(wù)。也就是說(shuō)現(xiàn)在 GitHub 上托管的所有項(xiàng)目代碼都是基于 Git 來(lái)進(jìn)行版本控制的,所以 Git 只是 GitHub 上用來(lái)管理項(xiàng)目的一個(gè)工具而已,但 GitHub 的功能可遠(yuǎn)不止于此! 只要你愿意慢慢玩你還能知道它的用處:
? 學(xué)習(xí)優(yōu)秀的開(kāi)源項(xiàng)目
? 多人協(xié)作
? 搭建博客、個(gè)人網(wǎng)站或者公司官網(wǎng)
? 寫(xiě)作
? 個(gè)人簡(jiǎn)歷
? 其他
比如基于 Hexo + Github Page 可以搭建免費(fèi)博客。關(guān)于 Github 和 Git 以及 git 和 svn 詳細(xì)區(qū)別可以看這篇文章:Git系列之初識(shí)Git與Github
首先是 Git 的簡(jiǎn)單使用
好了,廢話(huà)不多說(shuō),下面說(shuō)下自己的使用教程,本文的教程首要目標(biāo)就是帶你使用 git 上傳自己的項(xiàng)目代碼到 github 網(wǎng)站。
git 下載(有兩個(gè)網(wǎng)站都可以下載:https://git-scm.com/downloads、https://git-for-windows.github.io/)
毋庸置疑,提到這么多次git,肯定首先需要安裝 git 版本控制工具系統(tǒng)。下載完畢就是進(jìn)行安裝了,安裝教程就不多說(shuō)了,就類(lèi)似 Java 開(kāi)發(fā)需要安裝 JDK 一樣,這里也是,不安裝 git 怎么進(jìn)行代碼版本管理。安裝詳細(xì)教程網(wǎng)上搜索下。注意的地方,有個(gè)安裝頁(yè)面可以選擇勾選 git 自動(dòng)加入 系統(tǒng) path ,也可以不選,安裝完畢,自己加入 git 安裝目錄下 bin 文件目錄于 電腦 path 下。 path的作用:就是可以使你在電腦 cmd 命令窗口下能直接使用相關(guān)命令。判斷是否安裝成功:cmd 命令行下,輸入 git 可以看到一些信息,則證明安裝 ok。
隨便在哪個(gè)磁盤(pán)創(chuàng)建一個(gè)文件夾,比如 githubtest,然后在該目錄下,鼠標(biāo)右鍵選擇 GIt Bash Here 打開(kāi)git,輸入 git init 初始化 git 倉(cāng)庫(kù)。這樣能在”不顯示隱藏文件”的情況下,能看到 .git 文件夾。內(nèi)容如下圖:
此文件夾保存了版本控制的所有相關(guān)信息。
在 githubtest 文件夾下隨便創(chuàng)建一個(gè)文件,如創(chuàng)建一個(gè)名叫 readme.md 文件,然后輸入 git status 可以查看當(dāng)前版本庫(kù)狀態(tài),可以看到如下圖:
在Untracked files(未跟蹤文件)下,會(huì)出現(xiàn)紅色的readme.txt,代表此文件還未被Git所管理。
使用 git add readme.md,將該文件加入緩沖區(qū)(這里的緩沖區(qū)可以后面再好好了解下),如果你確定所有的修改都需要提交,可以使用 git add . 來(lái)加入所有修改?,F(xiàn)在用git status查看,將看到文件名變?yōu)榫G色。
使用 git commit -m "my first commit!" 來(lái)提交修改,-m 后面所帶的參數(shù)是本次提交的注釋說(shuō)明信息,一般用來(lái)記錄本次提交的主要意圖。
注:為什么先要再 add 一次呢?首先 git add 是先把改動(dòng)添加到一個(gè)「暫存區(qū)」 ,你可以理解成是一個(gè)緩存區(qū)域,臨時(shí)保存你的改動(dòng),而 git commit 才是最后真正的提交。這樣做的好處就是防止誤提交,當(dāng)然也有辦法把這兩步合并成一步。這個(gè)命令是:
git commit -am "my first commit!"該命令用于將工作區(qū)中的代碼直接提交到本地倉(cāng)庫(kù),而無(wú)需手動(dòng)添加到緩沖區(qū)。
但是執(zhí)行后,出現(xiàn)如下圖:
未提交成功,提示設(shè)置郵箱和用戶(hù)名。
是的,為了保證提交日志的準(zhǔn)確性,在提交的時(shí)候 user.name 和 user.email 會(huì)進(jìn)入日志,這些信息,是追蹤代碼變更的關(guān)鍵,比如是誰(shuí)修改的。以后會(huì)隨更新內(nèi)容一起被永久納入歷史記錄。
PS:在設(shè)置用戶(hù)名的時(shí)候,可以使用任意的字符。Git實(shí)際上是使用email進(jìn)行關(guān)聯(lián)每次提交的,只不過(guò)使用username作為標(biāo)示符來(lái)進(jìn)行顯示。當(dāng)你的email地址和github上的email地址一致時(shí),則會(huì)使用Github上面的name來(lái)進(jìn)行顯示。
全局配置:
如果工作中只涉及一個(gè) git 服務(wù)器,用一個(gè)全局配置就可以了。
git config --global user.name "strivebo" git config --global user.email "ishuzb@gmail.com"工作在多個(gè)git項(xiàng)目:
但是我們可能同時(shí)工作在多個(gè)項(xiàng)目中,公司內(nèi)部用自有的git管理項(xiàng)目,我們?cè)趃ithub上還有自己的項(xiàng)目。對(duì)于使用不同的用戶(hù)身份,需要設(shè)置不用的sshkey,具體的配置可以看這里:多個(gè)sshkey配置。這個(gè)時(shí)候,對(duì)于user.name和user.email我們不能采用全局的配置。而是要對(duì)各個(gè)項(xiàng)目單獨(dú)配置。
某個(gè)項(xiàng)目下的配置(去掉 --global):
git config user.name "strivebo" git config user.email "ishuzb@gmail.com"可以使用命令來(lái)查看修改后的配置:
git config --global user.name 或 git config user.name git config --global user.email 或 git config user.email取消全局配置:
git config --global --unset user.name git config --global --unset user.emailgit config --global user.name #(查看)全局配置賬戶(hù)已經(jīng)移除 git config --global user.email #(查看)全局配置郵箱已經(jīng)移除參考資料:
? 設(shè)置 Git 賬戶(hù)及郵箱
? git: 提交前強(qiáng)制檢查各個(gè)項(xiàng)目用戶(hù)名郵箱設(shè)置
? Git中的username的設(shè)置
多說(shuō)幾句,關(guān)于 github 頁(yè)面的設(shè)置哪個(gè)郵箱接收哪些消息,看下這篇文章:如何正確接收 GitHub 的消息郵件
提交成功后,可以用 git log 查看歷史提交記錄。每個(gè)記錄都會(huì)有提交id,作者和提交日期。
現(xiàn)在我想使用版本回退操作,我想把當(dāng)前的版本回退到上一個(gè)版本,要使用什么命令呢?可以使用如下2種命令,第一種是:
git reset --hard HEAD^那么如果要回退到上上個(gè)版本只需把 HEAD^ 改成 HEAD^^ 以此類(lèi)推。那如果要回退到前100個(gè)版本的話(huà),使用上面的方法肯定不方便,我們可以使用下面的簡(jiǎn)便命令操作:git reset --hard HEAD~100 即可。
假設(shè): 我進(jìn)行了兩次修改,第一次readme.txt文件添加了2222,第二次添加了3333,我已經(jīng)使用回退操作回到了第一次的修改,即現(xiàn)在文本內(nèi)容為2222,但我其實(shí)又想回到第二次的修改,該怎么辦呢(如何恢復(fù)3333內(nèi)容呢)?這里可以:
可以通過(guò)如下命令即可獲取到版本號(hào):git reflog,可以看到增加內(nèi)容3333的版本號(hào)是多少比如為 6fcfc89,我們現(xiàn)在可以命令:
git reset --hard 6fcfc89來(lái)恢復(fù)了。
你可以用 git branch 查看當(dāng)前有哪些分支,當(dāng)然,因?yàn)槲覀儧](méi)有創(chuàng)建任何分支,目前只會(huì)有一個(gè)master分支。
注:branch 即分支的意思,分支的概念很重要,尤其是團(tuán)隊(duì)協(xié)作的時(shí)候,假設(shè)兩個(gè)人都在做同一個(gè)項(xiàng)目,這個(gè)時(shí)候分支就是保證兩人能協(xié)同合作的最大利器了。舉個(gè)例子,A, B倆人都在做同一個(gè)項(xiàng)目,但是不同的模塊,這個(gè)時(shí)候A新建了一個(gè)分支叫a, B新建了一個(gè)分支叫b,這樣A、B做的所有代碼改動(dòng)都各自在各自的分支,互不影響,等到倆人都把各自的模塊都做完了,最后再統(tǒng)一把分支合并起來(lái)。
?
執(zhí)行 git init 初始化git倉(cāng)庫(kù)之后會(huì)默認(rèn)生成一個(gè)主分支 master ,也是你所在的默認(rèn)分支,也基本是實(shí)際開(kāi)發(fā)正式環(huán)境下的分支,一般情況下 master 分支不會(huì)輕易直接在上面操作的,你們可以輸入 git branch 查看下當(dāng)前分支情況,如圖:
如果我們想在此基礎(chǔ)上新建一個(gè)分支,很簡(jiǎn)單,執(zhí)行 git branch a 就新建了一個(gè)名字叫 a 的分支,這時(shí)候分支 a 跟分支 master 是一模一樣的內(nèi)容,我們?cè)佥斎?git branch 查看的當(dāng)前分支情況:
但是可以看到 master 分支前有個(gè) * 號(hào),即雖然新建了一個(gè) a 的分支,但是當(dāng)前所在的分支還是在 master 上,如果我們想在 a 分支上進(jìn)行開(kāi)發(fā),首先要先切換到 a 分支上才行,所以下一步要切換分支
git checkout a有人就說(shuō)了,我要先新建再切換,未免有點(diǎn)麻煩,有沒(méi)有一步到位的,有的:
git checkout -b a?
以下為常用的 Git 命令:
git mergeA同學(xué)在a分支代碼寫(xiě)的不亦樂(lè)乎,終于他的功能完工了,并且測(cè)試也都o(jì)k了,準(zhǔn)備要上線(xiàn)了,這個(gè)時(shí)候就需要把他的代碼合并到主分支master上來(lái),然后發(fā)布。git merge 就是合并分支用到的命令,針對(duì)這個(gè)情況,需要先做兩步,第一步是切換到 master 分支,如果你已經(jīng)在了就不用切換了,第二步執(zhí)行 git merge a ,意思就是把a(bǔ)分支的代碼合并過(guò)來(lái),不出意外,這個(gè)時(shí)候a分支的代碼就順利合并到 master 分支來(lái)了。為什么說(shuō)不出意外呢?因?yàn)檫@個(gè)時(shí)候可能會(huì)有沖突而合并失敗。
?
git branch -d有刪除分支,假如這個(gè)分支新建錯(cuò)了,或者a分支的代碼已經(jīng)順利合并到 master 分支來(lái)了,那么a分支沒(méi)用了,需要?jiǎng)h除,這個(gè)時(shí)候執(zhí)行 git branch -d a 就可以把a(bǔ)分支刪除了。
?
git branch -D有些時(shí)候可能會(huì)刪除失敗,比如如果a分支的代碼還沒(méi)有合并到master,你執(zhí)行 git branch -d
a 是刪除不了的,它會(huì)智能的提示你a分支還有未合并的代碼,但是如果你非要?jiǎng)h除,那就執(zhí)
行 git branch -D a 就可以**強(qiáng)制刪除**a分支。
?
git tag我們?cè)诳蛻?hù)端開(kāi)發(fā)的時(shí)候經(jīng)常有版本的概念,比如v1.0、v1.1之類(lèi)的,不同的版本肯定對(duì)應(yīng)不同的代碼,所以我一般要給我們的代碼加上標(biāo)簽,這樣假設(shè)v1.1版本出了一個(gè)新bug,但是又不曉得v1.0是不是有這個(gè)bug,有了標(biāo)簽就可以順利切換到v1.0的代碼,重新打個(gè)包測(cè)試了。所以如果想要新建一個(gè)標(biāo)簽很簡(jiǎn)單,比如 git tag v1.0 就代表我在當(dāng)前代碼狀態(tài)下新建了一個(gè)v1.0的標(biāo)簽,輸入 git tag 可以查看歷史 tag 記錄。 想要切換到某個(gè) tag,執(zhí)行:
git checkout v1.0就可以切換到 v1.0 的代碼狀態(tài)。
還有很多命令,待大家去找相關(guān)資料學(xué)習(xí)和練習(xí)了。
上傳代碼至 Github
以上都是講的本地倉(cāng)庫(kù)關(guān)于 Git 的操作,下面需要講的是項(xiàng)目代碼提交至 GitHub 開(kāi)源社區(qū)。
關(guān)于 GitHub 網(wǎng)站的操作教程包括注冊(cè)、功能、設(shè)置、新建代碼倉(cāng)庫(kù)等,請(qǐng)先看這篇文章吧:Git系列之Github基礎(chǔ)設(shè)置及使用詳解,寫(xiě)的很詳細(xì)很好。我自個(gè)寫(xiě)的,也只是簡(jiǎn)單記錄下步驟而已。
以自己 Github 的項(xiàng)目為例
首先注冊(cè) github 賬戶(hù)
這個(gè)我就不用說(shuō)了吧。
新建倉(cāng)庫(kù),即新建項(xiàng)目文件
如果想要新建私有倉(cāng)庫(kù),即別人不能看到的倉(cāng)庫(kù),則需要選擇收費(fèi)選項(xiàng),否則我們就選擇公共模式就可以。好像 github 有一個(gè)針對(duì)高校和學(xué)生有一個(gè)叫什么學(xué)生包申請(qǐng),可以去了解下,我在網(wǎng)上也隨便找了幾個(gè)文章,先看下:Github 學(xué)生包申請(qǐng)教程、利用學(xué)生身份可以享受到的相關(guān)學(xué)生優(yōu)惠權(quán)益…
然后就是克隆(下載)該項(xiàng)目
如圖:
復(fù)制該地址。
在 Git Bash 中輸入:
git clone https://github.com/strivebo/GitTest.git下載項(xiàng)目源碼。這個(gè)時(shí)候該本地項(xiàng)目本身已經(jīng)是一個(gè) git 庫(kù)了,不需要執(zhí)行 git init 進(jìn)行初始化,甚至已經(jīng)關(guān)聯(lián)好了遠(yuǎn)程倉(cāng)庫(kù)。
此時(shí),就可以去開(kāi)發(fā)里面的代碼了,添加新的功能,修改明顯的bug…
關(guān)于這部分已經(jīng)在前面 Git 本地庫(kù)講了相關(guān)命令。
最后就是要把本地的改動(dòng)提交到 github 賬戶(hù)了。
注: 你擁有了一個(gè) GitHub 賬號(hào)之后,就可以自由的 clone 或者下載其他項(xiàng)目,也可以創(chuàng)建自己的項(xiàng)目,但是你沒(méi)法提交代碼。仔細(xì)想想也知道,肯定不可能隨意就能提交代碼的,如果隨意可以提交代碼,那么GitHub 上的項(xiàng)目豈不亂了套了,所以提交代碼之前一定是需要某種授權(quán)的,而 GitHub 上一般都是基于 SSH 授權(quán)的。那么什么是 SSH 呢? 簡(jiǎn)單點(diǎn)說(shuō),SSH是一種網(wǎng)絡(luò)協(xié)議,用于計(jì)算機(jī)之間的加密登錄。目前是每一臺(tái) Linux 電腦的標(biāo)準(zhǔn)配置。而大多數(shù) Git 服務(wù)器都會(huì)選擇使用 SSH 公鑰來(lái)進(jìn)行授權(quán),所以想要在 GitHub 提交代碼的第一步就是要先添加 SSH key 配置。
SSH 設(shè)置
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è)回
車(chē)鍵(不需要輸入密碼) ,然后就會(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是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
接下來(lái)要做的是把 id_rsa.pub 的內(nèi)容添加到 GitHub 上,這樣你本地的 id_rsa 密鑰跟 GitHub
上的 id_rsa.pub 公鑰進(jìn)行配對(duì),授權(quán)成功才可以提交代碼。 在設(shè)置頁(yè)面打開(kāi) SSH and GPG keys 菜單欄:
需要做的只是在 Key 那欄把 id_rsa.pub 公鑰文件里的內(nèi)容復(fù)制粘貼進(jìn)去就可以了,Title 那欄不需要填寫(xiě),點(diǎn)擊 Add SSH key 按鈕就ok了。
SSH key 添加成功之后,輸入 ssh -T git@github.com 進(jìn)行測(cè)試,如果出現(xiàn)以下提示:
輸入 yes 出現(xiàn)如下圖則證明添加成功了。
?
在提交之前熟悉兩個(gè)命令:Push 和 Pull
Push :直譯過(guò)來(lái)就是「推」 的意思,什么意思呢?如果你本地代碼有更新了,那么就需要把本地代碼推到遠(yuǎn)程倉(cāng)庫(kù),這樣本地倉(cāng)庫(kù)跟遠(yuǎn)程倉(cāng)庫(kù)就可以保持同步了。
git push origin master意思就是把本地代碼推到遠(yuǎn)程 master 分支。
?
Pull:直譯過(guò)來(lái)就是「拉」 的意思,如果別人提交代碼到遠(yuǎn)程倉(cāng)庫(kù),這個(gè)時(shí)候你需要把遠(yuǎn)程倉(cāng)庫(kù)的最新代碼拉下來(lái),然后保證兩端代碼的同步。
git pull origin master意思就是把遠(yuǎn)程最新的代碼更新到本地。一般我們?cè)?push 之前都會(huì)先 pull ,這樣不容易沖突。
提交代碼
添加 SSH key 成功之后,我們就有權(quán)限向 GitHub 上我們自己的項(xiàng)目提交代碼了!執(zhí)行:
git push origin master進(jìn)行代碼提交,這種是最簡(jiǎn)單方便的一種方式。
注: 如果我們本地已經(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í)行如下命
令:
什么意思呢?就是添加一個(gè)遠(yuǎn)程倉(cāng)庫(kù),他的地址是 git@github.com:stormzhang/test.git ,而 origin 是給這個(gè)項(xiàng)目的遠(yuǎn)程倉(cāng)庫(kù)起的名字,是的,名字你可以隨便取,只不過(guò)大家公認(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è),這樣的話(huà)提交到不同的遠(yuǎn)程倉(cāng)庫(kù)就需要指定不同的倉(cāng)庫(kù)名字了。
查看我們當(dāng)前項(xiàng)目有哪些遠(yuǎn)程倉(cāng)庫(kù)可以執(zhí)行如下命令: git remote -v ,接下來(lái),我們本地的倉(cāng)庫(kù)就可以向遠(yuǎn)程倉(cāng)庫(kù)進(jìn)行代碼提交了:
git push origin master就是默認(rèn)向 GitHub 上的 test 目錄提交了代碼,而這個(gè)代碼是在 master 分支。當(dāng)然你可以提交到指定的分支。
以別人開(kāi)源項(xiàng)目為例
和上面很多步驟類(lèi)似的。
參考資料:
github 學(xué)習(xí):
- 知乎:怎樣使用 GitHub?
- 入門(mén)級(jí):GitHub和Git超超超詳細(xì)使用教程!
- 手把手教你如何加入到github的開(kāi)源世界!
- Git結(jié)合GitHub常用命令學(xué)習(xí)手冊(cè)
菜鳥(niǎo)教程:Github 簡(jiǎn)明教程
phodal:GitHub 漫游指南
- stormzhang:從 0 開(kāi)始學(xué)習(xí) GitHub
git 學(xué)習(xí):
- 廖雪峰Git教程:Git教程
- 猴子都能懂的GIT入門(mén)
- Git使用教程
happypeter:Git 北京
?
更新于 2017-11-05
總結(jié)
以上是生活随笔為你收集整理的Github 完整学习教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 尚硅谷_Ajax_学习笔记
- 下一篇: 电脑技巧汇总