版本控制工具-Git
?一、版本工具介紹
?1、 什么是版本控制
?? 版本控制(Revision control)是一種在開(kāi)發(fā)的過(guò)程中用于管理我們對(duì)文件、目錄或工程等內(nèi)容的修改歷史,方便查看更改歷史記錄,備份以便恢復(fù)以前的版本的軟件工程技術(shù)。
?2、常見(jiàn)的版本控制器
主流的版本控制器有如下這些:
Git
SVN(Subversion)
CVS(Concurrent Versions System)
VSS(Micorosoft Visual SourceSafe)
版本控制產(chǎn)品非常的多,現(xiàn)在影響力最大且使用最廣泛的是Git與SVN
? 2.1集中版本控制
所有的版本數(shù)據(jù)都保存在服務(wù)器上,協(xié)同開(kāi)發(fā)者從服務(wù)器上同步更新或上傳自己的修改;

所有的版本數(shù)據(jù)都存在服務(wù)器上,用戶的本地只有自己以前所同步的版本,如果不連網(wǎng)的話,用戶就看不到歷史版本,也無(wú)法切換版本驗(yàn)證問(wèn)題,或在不同分支工作。而且,所有數(shù)據(jù)都保存在單一的服務(wù)器上,有很大的風(fēng)險(xiǎn)這個(gè)服務(wù)器會(huì)損壞,這樣就會(huì)丟失所有的數(shù)據(jù),當(dāng)然可以定期備份。代表產(chǎn)品:SVN、CVS、VSS
? ?2.2、分布式版本控制
所有版本信息倉(cāng)庫(kù)全部同步到本地的每個(gè)用戶,這樣就可以在本地查看所有版本歷史,可以離線在本地提交,只需在連網(wǎng)時(shí)push到相應(yīng)的服務(wù)器或其他用戶那里。由于每個(gè)用戶那里保存的都是所有的版本數(shù)據(jù),只要有一個(gè)用戶的設(shè)備沒(méi)有問(wèn)題就可以恢復(fù)所有的數(shù)據(jù),但這增加了本地存儲(chǔ)空間的占用。
? ?

? 2.3、Git與SVN最主要區(qū)別
SVN是集中式版本控制系統(tǒng),版本庫(kù)是集中放在中央服務(wù)器的,而工作的時(shí)候,用的都是自己的電腦,所以首先要從中央服務(wù)器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服務(wù)器。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作,對(duì)網(wǎng)絡(luò)帶寬要求較高。

Git是分布式版本控制系統(tǒng),沒(méi)有中央服務(wù)器,每個(gè)人的電腦就是一個(gè)完整的版本庫(kù),工作的時(shí)候不需要聯(lián)網(wǎng)了,因?yàn)榘姹径荚谧约弘娔X上。協(xié)同的方法是這樣的:比如說(shuō)自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時(shí),你們兩之間只需把各自的修改推送給對(duì)方,就可以互相看到對(duì)方的修改了。
二、創(chuàng)建Git工作環(huán)境
下載Git
打開(kāi)?git官網(wǎng),下載git對(duì)應(yīng)操作系統(tǒng)的版本。

選擇版本

這里我選擇下載64-bit Git for Windows Setup

1.1、安裝Git

選擇安裝配置信息

一直Next默認(rèn)就好了,如果需要設(shè)置就要仔細(xì)讀一下安裝界面上的選項(xiàng)。
1.2、啟動(dòng)Git
安裝成功后在開(kāi)始菜單中會(huì)有Git項(xiàng),菜單下有3個(gè)程序:

Git Bash:Unix與Linux風(fēng)格的命令行,使用最多,推薦最多

Git GUI:圖形界面的Git,不建議初學(xué)者使用,盡量先熟悉常用命令

點(diǎn)擊Create New Repository可以直接創(chuàng)建一個(gè)新的倉(cāng)庫(kù)。
三、? Git工作流程介紹
Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)。首先了解下git的工作流程:

? ? ? ?Workspace:工作區(qū)
Index / Stage:暫存區(qū)
Repository:倉(cāng)庫(kù)區(qū)(或本地倉(cāng)庫(kù))
Remote:遠(yuǎn)程倉(cāng)庫(kù)
四、git基本操作
?1、 初始化配置
# 設(shè)置用戶名
git config --global user.name "你的名字"
# 配置用戶郵箱
git config --global user.email "你的常用郵箱"
# 查看配置列表項(xiàng)
git config --list
2、基本操作
git init --- 初始化倉(cāng)庫(kù)
要使用Git進(jìn)行版本管理,必須先初始化倉(cāng)庫(kù)。Git是使用git init命令進(jìn)行初始化操作。
? 如果初始化成功,執(zhí)行了git init命令的目錄就會(huì)生成.git目錄。這個(gè).git目錄里存儲(chǔ)著管理當(dāng)前目錄內(nèi)容所需要的倉(cāng)庫(kù)數(shù)據(jù)。 在Git中,我們將這個(gè)目錄的內(nèi)容稱為“附屬于該倉(cāng)庫(kù)的工作樹”。文件的編輯等操作在工作樹中進(jìn)行,然后記錄到倉(cāng)庫(kù)中,以此管理文件的歷史快照。如果想將文件恢復(fù)到原先的狀態(tài),可以從倉(cāng)庫(kù)中調(diào)取之前的快照。
git status ---- 查看倉(cāng)庫(kù)的狀態(tài)
git status命令用于顯示git倉(cāng)庫(kù)的狀態(tài)。非常有用,務(wù)必牢記。 工作樹和倉(cāng)庫(kù)在被操作的過(guò)程中,狀態(tài)會(huì)不斷發(fā)生變化。在Git操作過(guò)程中時(shí)常使用git status命令查看當(dāng)前狀態(tài)。
git add --- 向暫存區(qū)添加文件
如果只在Git倉(cāng)庫(kù)所在目錄里創(chuàng)建了文件或文件夾,該文件不會(huì)被記入Git倉(cāng)庫(kù)的版本管理對(duì)象中,我們用git status命令查看時(shí),它會(huì)顯示在未跟蹤文件中。 想要讓文件成為Git倉(cāng)庫(kù)的管理對(duì)象。就需要用git add命令將其加入暫存區(qū)。暫存區(qū)是提交前的一個(gè)臨時(shí)區(qū)域。
git commit?----保存?zhèn)}庫(kù)的歷史記錄(git commit -m “注釋內(nèi)容”)
git commit命令將當(dāng)前暫存區(qū)的文件實(shí)際保存到倉(cāng)庫(kù)的歷史記錄中。
git log?---- 查看提交日志
git log命令可以查看以往倉(cāng)庫(kù)中提交的日志,包括可以查看什么人在什么時(shí)候進(jìn)行了提交或合并,以及操作前后有怎么樣的差別[ git reflog :查看提交日志信息,經(jīng)常與回退命令結(jié)合使用]。
?Git reset----回退版本【基于索引的版本回退】
???? git reset --hard 版本標(biāo)識(shí)
?? 回到指定版本。
--什么是分支?
?在版本控制過(guò)程中,使用多條線同時(shí)推進(jìn)多個(gè)任務(wù)。幾乎所有的版本控制系統(tǒng)都以某種形式支持分支;使用分支意味著你可以把你的工作從開(kāi)發(fā)主線上分離開(kāi)來(lái),以免影響開(kāi)發(fā)主線。

--分支的好處?
????? -->同時(shí)并行推進(jìn)多個(gè)功能的開(kāi)發(fā),提高開(kāi)發(fā)效率;
????? -->各個(gè)分支在開(kāi)發(fā)過(guò)程是相對(duì)獨(dú)立的,如果某一個(gè)分支開(kāi)發(fā)失敗,不會(huì)對(duì)其它分支有任何影響;失敗的分支刪除重新開(kāi)始即可。
?---分支的創(chuàng)建和合并
分支的創(chuàng)建
? ? $ git branch <branch name>.?
? ? $ git checkout -b <branch name>
分支的跳轉(zhuǎn)
? ? $ git checkout <branch name>
合并分支
?? 1、切換到接受修改的分支(被合并,增加新內(nèi)容)上,git checkout [分支名];
2、執(zhí)行merge命令。
? 如下:? $ git merge? <branch name>
?? ? ? // 把該分支修改并提交的內(nèi)容合并到master(主)分支
刪除分支
? ? $ git branch -D <branch name>
查看所有分支
? ? $ git branch -v
--合并的沖突
1、編輯文件,刪除特殊符號(hào);
2、把文件修改到滿意的程度,保存退出;
3、Git add[文件名];
4、Git commit -m “注釋” 。注意:此時(shí)commit一定不能帶具體文件名。
? 沖突需要自行修改
<<<<<<< HEAD
What's a Vegetable's favourite martial art? Carrotee!
=======
Why did the carrot get an award? Because he was outstanding in his field!
>>>>>>> your-branch
git中如何忽略文件上傳?
具體操作:
第一步進(jìn)入我們項(xiàng)目的根目錄,我是直接使用git bash直接進(jìn)入的。在項(xiàng)目的根目錄創(chuàng)建.gitignore文件,此時(shí)一定要在沒(méi)創(chuàng)建git倉(cāng)庫(kù)的時(shí)候創(chuàng)建該文件(也就是說(shuō)還沒(méi)使用git init的時(shí)候)。如下圖

我們?cè)谠撐募懭胛覀兒雎缘奈募臀募A即可。

在完成上訴操作之后,我們就可以開(kāi)始創(chuàng)建我們的git倉(cāng)庫(kù)了。

?===遠(yuǎn)程倉(cāng)庫(kù)===

4、建立遠(yuǎn)程倉(cāng)庫(kù)連接別名
// 建立remote(origin)的url別名
$ git remote add origin <repository URL>
// 更新已有的remote(origin)的url別名
???? ? $ git remote set-url origin <repository URL>
// 添加一個(gè)新的remote,名字為github
?? ? ?? ? $ git remote add? github? <new repository URL>
???????????? //刪除遠(yuǎn)程鏈接別名
$ git remote rm origin
???? //? 提交遠(yuǎn)程
? ??????? $ git push origin master
?? //拉取遠(yuǎn)程文件操作
? $ git pull origin master

5. 與遠(yuǎn)程版本庫(kù)協(xié)作
假設(shè)遠(yuǎn)程版本庫(kù)的地址?http://github.com/example/test.git? ? ? ? ? ? ?
? ? $ git clone?http://github.com/example/test.git
提交更改
? ? $ git push origin master
? ? ? // origin 指定遠(yuǎn)程版本庫(kù)的地址,master部分指定同步到哪一個(gè)分支
將遠(yuǎn)程版本庫(kù)的修改同步到本地
? ? $ git fetch origin master
? ? $ git merge origin/master
? ? $ git pull origin master
?? ? ? // pull 相當(dāng)于將fetch和merge兩個(gè)命令一起執(zhí)行
注:更新操作:
$ git pull$ git pull origin
將遠(yuǎn)程主機(jī) origin 的 master 分支拉取過(guò)來(lái),與本地的 brantest 分支合并。
git pull origin master:brantest
如果遠(yuǎn)程分支是與當(dāng)前分支合并,則冒號(hào)后面的部分可以省略。
git pull origin master
上面命令表示,取回 origin/master 分支,再與本地的 brantest 分支合并。
--跨團(tuán)隊(duì)協(xié)作開(kāi)發(fā)(知識(shí)拓展)