前言:
一、git是什么仪或?
事情是這樣的幼东,自2002年開始臂容,林納斯·托瓦茲決定使用BitKeeper作為L(zhǎng)inux內(nèi)核主要的版本控制系統(tǒng)用以維護(hù)代碼。到了2005年根蟹,Linux內(nèi)核開發(fā)團(tuán)隊(duì)的安德魯·垂鳩寫了一個(gè)簡(jiǎn)單程序脓杉,可以連接BitKeeper的存儲(chǔ)庫(kù)。這時(shí)BitKeeper著作權(quán)擁有者拉里·麥沃伊不高興了简逮,認(rèn)為這事對(duì)BitKeeper內(nèi)部使用的協(xié)議進(jìn)行逆向工程球散,于是決定收回Linux內(nèi)核開發(fā)團(tuán)隊(duì)無償使用BitKeeper的許可。這點(diǎn)小事肯定難不倒大神林納斯散庶,僅僅10天之后蕉堰,第一個(gè)git版本就寫出來了”辏看到這里大家應(yīng)該都知道git是一個(gè)版本控制管理系統(tǒng)了屋讶。對(duì),Git就是一款開源的分布式版本控制系統(tǒng)(Distributed Version Control System)须教。
二皿渗、版本控制系統(tǒng)
上栗中因?yàn)樗麤]有使用版本控制工具。如果使用Git做版本控制的話轻腺,只需在鍵盤上敲入幾行命令就能找回方案A的代碼乐疆,阿禿自然不用再通宵了。版本控制是指對(duì)軟件開發(fā)過程中各種程序代碼贬养、配置文件及說明文檔等文件變更的管理挤土,是軟件配置管理的核心思想之一。運(yùn)用版本控制系統(tǒng)煤蚌,我們可以對(duì)代碼進(jìn)行版本管理耕挨,可以隨時(shí)查看之前版本的內(nèi)容,隨時(shí)回溯到之前版本中尉桩。團(tuán)隊(duì)合作的時(shí)候也可以自動(dòng)合并代碼筒占,而不需要用一個(gè)共享文件,或者是進(jìn)行定期的備份蜘犁。
三翰苫、集中式和分布式版本控制系統(tǒng)
版本控制系統(tǒng)目前來講有兩大控制系統(tǒng):
集中式:svn
分布式:git
要理解SVN和Git的使用差別為什么那么大,最直接的辦法是搞清楚集中式和分布式版本控制系統(tǒng)之間的差別。集中式版本控制系統(tǒng)有單一的集中管理服務(wù)器奏窑,保存所有文件的修訂版本导披,所有的文件“Nǎ客戶端的電腦并不會(huì)保存歷史版本撩匕,所以如果想查看歷史版本,必須聯(lián)網(wǎng)才能查看墨叛,并且如果集中管理的服務(wù)器出現(xiàn)故障止毕,可能導(dǎo)致歷史版本丟失,最多只能從本地的文件恢復(fù)到最后的版本漠趁。另外網(wǎng)速直接影響提交和下載文件的速度扁凛,很多時(shí)候很影響使用體驗(yàn)。
分布式版本控制系統(tǒng)沒有集中管理的服務(wù)器闯传,每個(gè)人的電腦都有一個(gè)完整的版本庫(kù)谨朝,我們可以在本地進(jìn)行修改提交,查看歷史版本甥绿。這里很多人有個(gè)疑問字币,我們平時(shí)工作中,經(jīng)常把代碼推到“遠(yuǎn)程倉(cāng)庫(kù)”妹窖,這個(gè)“遠(yuǎn)程倉(cāng)庫(kù)”不就是集中式版本控制系統(tǒng)里面的集中管理服務(wù)器嘛纬朝?其實(shí),這只是分布式版本控制系統(tǒng)里面的一個(gè)節(jié)點(diǎn)而已骄呼,這和你自己的電腦還有你同事阿禿的電腦一樣共苛,都是可以理解為其中一個(gè)節(jié)點(diǎn)。為了協(xié)作方便蜓萄,我們都在這個(gè)“遠(yuǎn)程倉(cāng)庫(kù)”上面交換“修改”隅茎,所以容易給大家造成中央服務(wù)器的錯(cuò)覺。
四嫉沽、基本概念
工作拷貝(工作目錄):用于存放產(chǎn)品開發(fā)數(shù)據(jù)本地工作目錄辟犀。
暫存區(qū) (Index):用于存放待提交數(shù)據(jù)的緩存區(qū)。
本地倉(cāng)庫(kù):遠(yuǎn)端庫(kù)的一個(gè)完整的拷貝绸硕,包括所有文件的修改記錄堂竟,分支等。
遠(yuǎn)程倉(cāng)庫(kù):本地倉(cāng)庫(kù)clone來源玻佩。
快照(snapshot):版本庫(kù)某個(gè)時(shí)間點(diǎn)所有文件集合出嘹。
全球版本號(hào)(commitID):Git庫(kù)的版本號(hào)是通過SHA-1算法根據(jù)庫(kù)中的所有內(nèi)容計(jì)算出一個(gè)40位的哈希值,這個(gè)哈希值是全球唯一的咬崔,基本只要前六位就可以唯一標(biāo)識(shí)了税稼。
五烦秩、理解修改文件在Git的流動(dòng)
我們所有修改都是在工作目錄進(jìn)行的,修改完以后需要先添加到暫存區(qū)郎仆,然后再提交到本地倉(cāng)庫(kù)只祠。提交完以后會(huì)產(chǎn)生commitID,標(biāo)識(shí)當(dāng)次提交扰肌。在之后的操作中抛寝,可以通過commitID回滾到某次提交狀態(tài)。最后曙旭,我們還需要把本地的倉(cāng)庫(kù)的提交記錄推送到遠(yuǎn)程倉(cāng)庫(kù)墩剖。
六、基本操作
git config --global user.name "herion"
配置全局用戶名
執(zhí)行命令夷狰,如果沒有任何反應(yīng),代表命令執(zhí)行成功
git config --global user.email "herion@163.com
配置用戶郵箱
執(zhí)行命令郊霎,如果沒有任何反應(yīng)沼头,代表命令執(zhí)行成功
git config --list
查看配置的用戶信息
git config user.name "herion"
配置本項(xiàng)目的用戶名
git config user.eamil "herion@163.com
配置本項(xiàng)目的郵箱
在當(dāng)前項(xiàng)目下面查看的配置是全局配置+當(dāng)前項(xiàng)目的配置, 使用的時(shí)候會(huì)優(yōu)先使用當(dāng)前項(xiàng)目的配置
git init
git初始化本地倉(cāng)庫(kù)
git clone 倉(cāng)庫(kù)地址
克隆遠(yuǎn)程倉(cāng)庫(kù)到本地,即“復(fù)制”遠(yuǎn)程倉(cāng)庫(kù)到本地
git add 文件名
將單個(gè)文件添加到暫存區(qū)
git add .
將所有的文件添加到暫存區(qū)
git commit -m ‘提交信息'
提交更改到當(dāng)前分支书劝,后面的是提交日志
git status
查看當(dāng)前git的狀態(tài)进倍,例如文件是否更改
untracked files
顯示未跟蹤的文件,即未加入版本控制的文件
git branch
git branch 分支名稱
git checkout 分支名稱
git log
git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>
將分支合并到當(dāng)前分支
git merge <分支名稱>
git branch -d <分支名稱>
git push <遠(yuǎn)程主機(jī)名> --delete <BranchName>