Git知識筆記
當(dāng)前項(xiàng)目開發(fā)使用Git來進(jìn)行版本管理
當(dāng)前有以下分支:
- Master:生產(chǎn)環(huán)境對應(yīng)代碼,最穩(wěn)定的代碼才能放入master
- Develop:開發(fā)環(huán)境對應(yīng)代碼,基本是項(xiàng)目的最新代碼
- Test:測試環(huán)境對應(yīng)代碼,開發(fā)自測完畢之后要上測試環(huán)境之前的代碼
- Hotfix:熱補(bǔ)丁,用于補(bǔ)丁開發(fā)的代碼
- UAT: 仿生產(chǎn)環(huán)境
初始開發(fā)的時(shí)候仍然是先獲取ssh秘鑰,然后通過git clone從iSource平臺獲取項(xiàng)目代碼
在clone的時(shí)候不僅僅是會下載當(dāng)前的最新代碼,同時(shí)會下載當(dāng)前項(xiàng)目的各個(gè)分支節(jié)點(diǎn)記錄,所以當(dāng)前項(xiàng)目倉庫中的各個(gè)分支記錄也會一并獲取到;
clone到代碼之后,首先git會根據(jù)你之前選擇的遠(yuǎn)端分支來創(chuàng)建一個(gè)本地git的分支,這里我使用的是develop分支(與遠(yuǎn)端倉庫的develop分支對應(yīng)),然后Git會創(chuàng)建一個(gè)HEAD來表明當(dāng)前選中的分支,這個(gè)時(shí)候HEAD就是指向develop的;
然后就可以開始碼代碼了,碼了一些代碼進(jìn)入項(xiàng)目目錄查看剛剛編輯的項(xiàng)目文件,發(fā)現(xiàn)Git系統(tǒng)已經(jīng)識別到了這些文件的狀態(tài)發(fā)生了改變,這個(gè)時(shí)候就需要先確保修改的文件加入了暫存區(qū)(Git ADD命令,實(shí)際在git clone的時(shí)候這些文件已經(jīng)加入了暫存區(qū),也可能是Tortoisegit自動識別文件加入暫存區(qū)),然后將改動提交到本地倉庫當(dāng)中去,提交完成之后,還需要將代碼推送到遠(yuǎn)端倉庫,在推送之前需要先將遠(yuǎn)端倉庫的最新內(nèi)容合并到本地倉庫,然后再做提交,這里使用Git pull命令(Git Fetch+Git Merge 先獲取遠(yuǎn)端存在而本地不存在的內(nèi)容,然后再將其與本地倉庫進(jìn)行合并),然后再push到遠(yuǎn)端倉庫,這個(gè)時(shí)候就可以使用最新的開發(fā)代碼部署環(huán)境進(jìn)行測試了
一般在提交完開發(fā)代碼之后,確認(rèn)代碼沒問題要把開發(fā)代碼與測試代碼進(jìn)行合并,首先在本地創(chuàng)建一個(gè)Test分支(之前本地是只有一個(gè)develop分支的),創(chuàng)建完成之后,切換到本地的Test分支,然后從遠(yuǎn)端倉庫拉取遠(yuǎn)端Test的內(nèi)容,此時(shí)本地存在了兩個(gè)分支,Test與Develop,但是HEAD已經(jīng)切換到了Test分支上面,然后將本地的Test分支與遠(yuǎn)端的Develop分支進(jìn)行合并(合并后本地Test分支已經(jīng)包含了最新開發(fā)的代碼了),最后將本地的Test分支push到遠(yuǎn)端Test,就可以讓測試開搞了;
Git本質(zhì)上是一個(gè)文件管理系統(tǒng),不過在實(shí)現(xiàn)上面使用了分布式的概念,作為文件管理系統(tǒng),Git會管理項(xiàng)目(當(dāng)前大目錄)下面的所有文件,負(fù)責(zé)文件的新增、刪除、修改的操作;
在對項(xiàng)目進(jìn)行初始化之后,項(xiàng)目目錄下會生成一個(gè).git目錄,里面主要有幾個(gè)重要的文件和目錄
- objects:存儲所有項(xiàng)目中的文件內(nèi)容
- refs:存儲分支信息
- HEAD:記錄當(dāng)前使用的分支
- index:存儲當(dāng)前Git系統(tǒng)暫存區(qū)信息
在Git中,系統(tǒng)一直記錄的是文件的快照(文件的改動信息),Git會將文件的內(nèi)容以及修改信息進(jìn)行壓縮后存儲起來,使用Blob對象關(guān)聯(lián)單個(gè)文件,Tree對象關(guān)聯(lián)多個(gè)文件(整個(gè)項(xiàng)目的文檔)
在進(jìn)行commit的時(shí)候,其實(shí)主要是創(chuàng)建了一個(gè)關(guān)聯(lián)了Tree對象的commit對象(以及commit的一些metadata)
后續(xù):
文件改動怎么記錄? 一并壓縮然后存儲到objects里面?。?br>
分支合并怎么弄? 怎么識別出哪些該合并,哪些是沖突?