Git和Github詳細(xì)教程
一 概述
說到Git和Github,前幾天我們知道微軟以75億美元收購全球最大的代碼托管和寫作平臺GitHub,而GitHub是全球最大的代碼倉庫,很多開發(fā)人員都將代碼存放在Github,許多開發(fā)者因?yàn)閾?dān)心微軟無法讓 GitHub 在運(yùn)營上保持開放和獨(dú)立,將無數(shù)項(xiàng)目遷移到了 GitLab上,博主也擔(dān)心微軟是否會讓GitHub按照以前一樣運(yùn)營,不管那么多,下面正式開始講解Git:
說到Git,很多人會想到svn,svn是集中式的版本控制工具,相比Git,博主認(rèn)為Git更強(qiáng)大,Git出自linux之父林納斯之手,而Git又全面兼容linux,這對編程開發(fā)人員來說是非常爽的,下面我們看看版本控制工具應(yīng)該具備的功能 :
1 協(xié)同修改,多人并行不悖的修改服務(wù)器端的同一個文件,數(shù)據(jù)備份。
2 不僅保存目錄和文件的當(dāng)前狀態(tài), 還能夠保存每一個提交過的歷史狀態(tài)。
3 版本管理
4 在保存每一個版本的文件信息的時(shí)候要做到不保存重復(fù)數(shù)據(jù), 以節(jié)約存儲空間, 提高運(yùn)行效率。 這方面 SVN 采用 的是增量式管理的方式, 而 Git 采取了文件系統(tǒng)快照的方式。
5 權(quán)限控制
6 對團(tuán)隊(duì)中參與開發(fā)的人員進(jìn)行權(quán)限控制。
7 對團(tuán)隊(duì)外開發(fā)者貢獻(xiàn)的代碼進(jìn)行審核——Git 獨(dú)有。
8 歷史記錄
9 查看修改人、 修改時(shí)間、 修改內(nèi)容、 日志信息。
10 將本地文件恢復(fù)到某一個歷史狀態(tài)。
11 分支管理
12 允許開發(fā)團(tuán)隊(duì)在工作過程中多條生產(chǎn)線同時(shí)推進(jìn)任務(wù), 進(jìn)一步提高效率。
二 版本控制介紹
2.1 版本控制簡介
工程設(shè)計(jì)領(lǐng)域中使用版本控制管理工程藍(lán)圖的設(shè)計(jì)過程。 在 IT 開發(fā)過程中也可以
使用版本控制思想管理代碼的版本迭代.
2.2 版本控制工具
1.集中式版本控制工具:CVS、 SVN、 VSS and so on
集中式版本控制工具的模式主要是將代碼專門放在一個服務(wù)器,如下:

2\. 分布式版本控制工具:Git、 Mercurial、 Bazaar、 Darcs and so on
分布式版本控制工具像Git支持分支管理,如下:

三 Git歷史
3.1 Git發(fā)展史

3.2 Git官網(wǎng)
Git官網(wǎng)地址:https://git-scm.com/
3.3 Git優(yōu)勢
1 大部分操作在本地完成,不需要聯(lián)網(wǎng)
2 完整性保證
3 盡可能添加數(shù)據(jù)而不是刪除或修改數(shù)據(jù)
4 分支操作非??旖萘鲿?
5 與 Linux 命令全面兼容
3.4 Git的安裝
這是我的百度網(wǎng)盤鏈接,里面有32位和64位安裝包
[ 鏈接:https://pan.baidu.com/s/16LHA-qajOw5h_EfP25LD7g 密碼:jsfb ](https://pan.baidu.com/s/16LHA-qajOw5h_EfP25LD7g)
安裝很簡單,跟著提示點(diǎn)擊過來就好了,有問題可以聯(lián)系博主。
3.5 Git的結(jié)構(gòu)

3.6 Git和代碼托管中心
局域網(wǎng)環(huán)境 GitLab服務(wù)器
外網(wǎng)環(huán)境下 GitHub 碼云
3.6 本地庫和遠(yuǎn)程庫

本地庫是存在在個人本地的,而Github中創(chuàng)建的是遠(yuǎn)程庫,本地庫push/pull從遠(yuǎn)程庫中上傳代碼或者拉取代碼,而其他開發(fā)者可以直接clone到本地庫,當(dāng)然還有夸團(tuán)隊(duì)協(xié)作,其實(shí)差不多,fork一下就好了。
四 Git操作
4.1 本地庫初始化
首先我在自己的工作區(qū)創(chuàng)建一個目錄gitDev,專門用來存放gitDev這個項(xiàng)目,將gitDev比作我將要開發(fā)的項(xiàng)目。
mkdir gitDev,進(jìn)入創(chuàng)建好的目錄,pwd看下我的位置

ls -la 可以看到我現(xiàn)在只有2個隱藏的目錄

下面我開始初始化: (git init)

ls -la查看,多了.git的隱藏文件,說明已經(jīng)初始化成功了

4.2 設(shè)置簽名
1 項(xiàng)目級別/倉庫級別:僅在當(dāng)前本地庫范圍內(nèi)有效


git config user.name xxxx
git config user.email xxxx
這是設(shè)置當(dāng)前庫范圍有效的
2 系統(tǒng)用戶級別:登錄當(dāng)前操作系統(tǒng)的用戶范圍
git config --global user.name xxxx
git config --global user.eamil xxxx
3 級別優(yōu)先級
就近原則:項(xiàng)目級別優(yōu)先于系統(tǒng)用戶級別,二者都有時(shí)采用項(xiàng)目級別的簽名
如果只有系統(tǒng)用戶級別的簽名,就以系統(tǒng)用戶級別的簽名為準(zhǔn)
二者都沒有不允許
4.3 查看狀態(tài)

查看工作區(qū)、暫存區(qū)狀態(tài)
4.4 添加至緩存區(qū)
首先我建立一個文件,寫入test內(nèi)容


查看內(nèi)容

這個時(shí)候git status查看下狀態(tài)

這個時(shí)候提示我們使用git add命令添加到暫存區(qū)

再git status一下

提示我們 git rm 用來刪除,我們git commit提交一下

再看看git status,發(fā)現(xiàn)沒有需要提交的內(nèi)容了

4.5 查看歷史記錄
剛剛我們提交了信息,加入想看到我提交的內(nèi)容的話
1.git log: 很清楚的看到我剛剛提交的信息,master代碼主分區(qū)

2.git log --pretty=oneline可以更清楚的看到我的提交記錄

3.git reflog 也能查看日志記錄

4.6 前進(jìn)和后退(git reset --hard [局部索引值] )
我先多提交幾次,讓記錄更加多

現(xiàn)在可以看到我的日志記錄,我提交了4次,每次新加的內(nèi)容就是后面的消息,現(xiàn)在這個版本的內(nèi)容如下:


現(xiàn)在我要回到cc37538這個版本的記錄的話:

可以看到,給我們的提示是Head已經(jīng)在cc37538了,cat test.txt一下

可以看到回到了以前的狀態(tài)。

現(xiàn)在可以看到HEAD指向cc37538了
當(dāng)然還有其他方法進(jìn)行回退,博主推薦大家使用這種方式。
只要提交到本地庫的文件,都可以在歷史版本中找回原來的信息
4.7 分支管理
1.分支可以理解多個功能同時(shí)推進(jìn),最后再合并

2.好處
同時(shí)并行推進(jìn)多個功能開發(fā),提高開發(fā)效率
各個分支在開發(fā)過程中,如果某一個分支開發(fā)失敗,不會對其他分支有任何影響。失敗的分支刪除重新開始即可。
3.創(chuàng)建分支(git branch [分支名])

首先我創(chuàng)建修復(fù)bug的分支hot_fix,git branch -v 查看下分支

git checkout hot_fix來切換分支

git branch -v 查看下分支,現(xiàn)在就切換到hot_fix分支了

在hot_fix分支,輸入ll,在查看下之前的內(nèi)容


其實(shí)hot_fix復(fù)制了一份master分支的內(nèi)容
4.合并分支(git merge [ 有新內(nèi)容分支名 ])
第一步:切換到接受修改的分支(被合并,增加新內(nèi)容)上 gitcheckout [被合并分支名]
第二步:執(zhí)行 merge 命令 git merge [有新內(nèi)容分支名]
首先,我在hot_fix上修改test.txt文件,添加了new content內(nèi)容

git commit到本地庫

git checkout 到master分支

git merge hot_fix : 合并hot_fix 分支的內(nèi)容

再查看下test.txt中的內(nèi)容,已經(jīng)將new content中的內(nèi)容合并到mster中

5.解決沖突
團(tuán)隊(duì)開發(fā)的時(shí)候很有可能會發(fā)生沖突,如何解決沖突,如下:
首先查看下我在master分支

我修改了第4行的內(nèi)容: edit by master

將內(nèi)容保存到本地庫中

切換到hot_fix分支

查看

同樣修改test.txt中的第4行內(nèi)容

提交到本地庫中

現(xiàn)在我想把hot_fix分支的內(nèi)容合并到master分支中
切換分支:

合并got_fix分支修改的內(nèi)容

查看狀態(tài)

打開test.txt文件后

修改內(nèi)容后,如下,保存退出

添加到暫存區(qū)

查看狀態(tài)

提交

查看合并后的內(nèi)容

沖突的解決:
第一步:編輯文件,刪除特殊符號
第二步:把文件修改到滿意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m "日志信息"
注意:此時(shí) commit 一定不能帶具體文件名
五 Github
1.github
GitHub 首頁就是注冊頁面:https://github.com/

2.在github中創(chuàng)建遠(yuǎn)程庫


3.為遠(yuǎn)程庫地址創(chuàng)建別名

git remote -v 查看當(dāng)前所有遠(yuǎn)程地址別名
git remoteadd [別名] [遠(yuǎn)程地址]


4.將本地庫內(nèi)容推送到github中(git push origin master)

這個時(shí)候會彈出登陸框,輸入賬號密碼

成功之后,會有如下提示信息:

5\. 刷新github,可以看到提交上去的信息

進(jìn)入test.txt文件,這個時(shí)候信息成功被push到github上了

6\. 團(tuán)隊(duì)協(xié)同開發(fā)
我重新創(chuàng)建了一個目錄zhangsan,假如團(tuán)隊(duì)中的zhangsan協(xié)同開發(fā)的話,我就去github上面把信息clone下來

這個時(shí)候?qū)τ趜hangsan的話,創(chuàng)建目錄不用進(jìn)行任何的操作,直接
git clone https://github.com/liuXinJianGithub/gitDev.git

ls -la 查看



可以發(fā)現(xiàn)從github上把信息給克隆下來了.
現(xiàn)在zhangsan修改了信息想要提交到github上面的話,可以看到新加了一條內(nèi)容:my name is zhangsan

git push origin master 會彈出登錄信息,我用另外一個新賬號登陸


可以看到現(xiàn)在是拒絕讓zhangsan這個賬號push,因?yàn)閦hangsan還沒有被邀請到團(tuán)隊(duì)進(jìn)行協(xié)同開發(fā)

登陸遠(yuǎn)程庫創(chuàng)建者的github賬號,如下



切換zhangsan的github賬號,輸入邀請地址https://github.com/liuXinJianGithub/gitDev/invitations

點(diǎn)擊接受邀請即可。這個時(shí)候push到github上

可以看到已經(jīng)成功上傳
