git代碼管理藝術(shù)課件_第1頁
git代碼管理藝術(shù)課件_第2頁
git代碼管理藝術(shù)課件_第3頁
git代碼管理藝術(shù)課件_第4頁
git代碼管理藝術(shù)課件_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Git代碼管理藝術(shù)顧費(fèi)勇Git代碼管理藝術(shù)顧費(fèi)勇1大綱Git簡(jiǎn)介Git基礎(chǔ)Git操作Git版本管理GIT分支管理在項(xiàng)目中的實(shí)踐2023/10/6大綱Git簡(jiǎn)介2023/10/62Git簡(jiǎn)史2002年,linux項(xiàng)目組開始啟用分布式版本控制系統(tǒng)BitKeeper來管理和維護(hù)代碼。

2005年的時(shí)候,開發(fā)BitKeeper的商業(yè)公司同Linux內(nèi)核開源社區(qū)的合作關(guān)系結(jié)束,他們收回了免費(fèi)使用BitKeeper的權(quán)力April5,2005–Linus發(fā)布首個(gè)git版本June15,2005-Git用作Linux源碼版本控制2023/10/6Git簡(jiǎn)史2002年,linux項(xiàng)目組開始啟用分布式版本3Git創(chuàng)建時(shí)的目標(biāo)速度簡(jiǎn)單的設(shè)計(jì)對(duì)非線性開發(fā)模式的強(qiáng)力支持(允許上千個(gè)并行開發(fā)的分支)完全分布式有能力高效管理類似Linux內(nèi)核一樣的超大規(guī)模項(xiàng)目(速度和數(shù)據(jù)量)2023/10/6Git創(chuàng)建時(shí)的目標(biāo)速度2023/10/64Git簡(jiǎn)介git是一個(gè)快速,開源,分布式的版本控制系統(tǒng),在開源和協(xié)作編程社區(qū)很快取代了svn。可以利用它來追蹤項(xiàng)目中的文件可以和合作伙伴共享版本歷史狀態(tài)可以將合作伙伴的工作和你的工作進(jìn)行合并可以對(duì)整個(gè)工程或某些文件跟歷史版本進(jìn)行比較或者恢復(fù)到早期的某個(gè)版本。2023/10/6Git簡(jiǎn)介git是一個(gè)快速,開源,分布式的版本控制系統(tǒng),在開5Git簡(jiǎn)介它的特點(diǎn)在于:1.開源2.高速3.節(jié)省大量空間4.靈活、簡(jiǎn)潔、高效的分支管理它能最大限度地發(fā)揮多人協(xié)同并發(fā)編程的效能,讓分支管理更快速,版本管理更簡(jiǎn)單2023/10/6Git簡(jiǎn)介它的特點(diǎn)在于:2023/10/66GIT簡(jiǎn)介-開源GIT源碼地址:/downloadGIT許可證:GNU通用公共許可證(GNUGeneralPublicLicense)2023/10/6GIT簡(jiǎn)介-開源GIT源碼地址:/do7大綱Git簡(jiǎn)介Git基礎(chǔ)Git操作Git版本管理GIT分支管理在項(xiàng)目中的實(shí)踐2023/10/6大綱Git簡(jiǎn)介2023/10/68離線Git是完全的分布式處理,它可以離線工作。跟SVN完全不同,Git的所有操作幾乎不需要網(wǎng)絡(luò)連接,包括歷史回顧,差異顯示和提交2023/10/6離線Git是完全的分布式處理,它可以離線工作。跟SVN完全不9快速Git比其他的VCS工具要快很多,因?yàn)間it絕大部分是離線操作,對(duì)網(wǎng)絡(luò)依賴小timegitclonessh://gufeiyong@:2222/backend/datastream.git>/dev/nullreal 0m26.559suser 0m2.568ssys 0m1.028s

timesvnco

/svn/datastream>/dev/nullreal 3m14.684suser 1m1.156ssys 0m20.897s2023/10/6快速Git比其他的VCS工具要快很多,因?yàn)間it絕大部分是離10占用空間小git比較節(jié)省空間。Django項(xiàng)目為例。

44M./django-git53M./django-svn

git克隆比SVN要小很多,且git克隆包含整個(gè)項(xiàng)目的歷史版本。SVN只包含項(xiàng)目的最后一個(gè)版本。2023/10/6占用空間小git比較節(jié)省空間。Django項(xiàng)目為例。202311快照git是基于快照的,而不是補(bǔ)丁文件包含一些元數(shù)據(jù)(提交信息(message),作者,日期等等),一個(gè)commit指向這次提交時(shí)項(xiàng)目的快照。2023/10/6快照git是基于快照的,而不是補(bǔ)丁文件2023/10/612分支以前的VCS工具分枝的方法是對(duì)每一個(gè)分枝都放到一個(gè)獨(dú)立的目錄中。而git可以讓你在同一個(gè)工作目錄中切換(switch)到不同的分枝。創(chuàng)建和切換分枝幾乎是即時(shí)的(instant),并且存在本地分支git開發(fā)者可以隨時(shí)創(chuàng)建,合并,刪除多個(gè)分枝。它鼓勵(lì)一種非線性的開發(fā)周期,它可以說是并行的多線程模式而不是多個(gè)步驟串行的模式。2023/10/6分支以前的VCS工具分枝的方法是對(duì)每一個(gè)分枝都放到一個(gè)獨(dú)立的13集中化的版本控制系統(tǒng)

2023/10/6集中化的版本控制系統(tǒng)

2023/10/614集中化的版本控制系統(tǒng)壞處:好處:每個(gè)人都可以在一定程度上看到項(xiàng)目中的其他人正在做些什么。而管理員也可以輕松掌控每個(gè)開發(fā)者的權(quán)限。(1)中央服務(wù)器的單點(diǎn)故障,無法提交更新,也就無法協(xié)同工作。(2)要是中央服務(wù)器的磁盤發(fā)生故障,碰巧沒做備份,會(huì)有丟失數(shù)據(jù)的風(fēng)險(xiǎn)。最壞的情況是徹底丟失整個(gè)項(xiàng)目的所有歷史更改記錄2023/10/6集中化的版本控制系統(tǒng)壞處:好處:每個(gè)人都可以在一定程度上看到15分布式版本控制系統(tǒng)

2023/10/6分布式版本控制系統(tǒng)

2023/10/616分布式版本控制系統(tǒng)像GIT這種系統(tǒng),客戶端并不只提取最新版本的文件快照,而是把原始的代碼倉庫完整地鏡像下來。2023/10/6分布式版本控制系統(tǒng)像GIT這種系統(tǒng),客戶端并不只提取最新版本17比較:SVN(上)和GIT(下)2023/10/6比較:SVN(上)和GIT(下)2023/10/618大綱Git簡(jiǎn)介Git基礎(chǔ)Git操作Git版本管理GIT分支管理在項(xiàng)目中的實(shí)踐2023/10/6大綱Git簡(jiǎn)介2023/10/619創(chuàng)建倉庫Gitinit創(chuàng)建一個(gè)空倉庫gitclonegit:///schacon/grit.gitmygrit復(fù)制一個(gè)遠(yuǎn)程倉庫到本地2023/10/6創(chuàng)建倉庫Gitinit創(chuàng)建一個(gè)空倉庫2023/10/620文件生命周期2023/10/6文件生命周期2023/10/621常用文件操作命令gitstatus查看文件狀態(tài)gitadd<file>跟蹤新文件或暫存已修改文件gitdiff查看文件變化gitcommit–m<msg>提交更新gitrmfile移除文件gitlog查看提交日志gitcommit–ammend修改最后一次提交gitresetHEAD<file>取消已暫存文件gitcheckout--<file>取消文件修改2023/10/6常用文件操作命令gitstatus查看文件狀態(tài)2023/22遠(yuǎn)程倉庫操作gitclone<倉庫地址>gitremote–v列出所有遠(yuǎn)程倉庫gitpush<倉庫名><分支名>推送本地分支更新到遠(yuǎn)程倉庫gitfetch從遠(yuǎn)程倉庫獲取更新gitpull 從遠(yuǎn)程倉庫獲取更新并merge本地分支2023/10/6遠(yuǎn)程倉庫操作gitclone<倉庫地址>2023/1023大綱Git簡(jiǎn)介Git基礎(chǔ)Git操作GIT版本管理GIT分支管理在項(xiàng)目中的實(shí)踐2023/10/6大綱Git簡(jiǎn)介2023/10/624Git目錄Git一共有三個(gè)目錄工作目錄(WorkingDirectory)暫存目錄(index)倉庫(History)2023/10/6Git目錄Git一共有三個(gè)目錄2023/10/625GIT文件狀態(tài)切換gitadd

files

把當(dāng)前文件放入暫存區(qū)域。gitcommit給暫存區(qū)域生成快照并提交。gitreset--

files

用來撤銷最后一次gitadd

files,你也可以用gitreset

撤銷所有暫存區(qū)域文件。gitcheckout--

files

把文件從暫存區(qū)域復(fù)制到工作目錄,用來丟棄本地修改。2023/10/6GIT文件狀態(tài)切換2023/10/626GIT圖示2023/10/6GIT圖示2023/10/627GIT版本Git版本號(hào)是一個(gè)40位的SHA-1編碼的字符串例如:4dd6bd612a121b24e1877dbc632e422e305dde6c它不像svn那樣版本號(hào)是連續(xù)的,很容易從版本號(hào)看出哪個(gè)是新版本,git的版本號(hào)是不連續(xù)的2023/10/6GIT版本Git版本號(hào)是一個(gè)40位的SHA-1編碼的字符串228查看歷史版本可以通過gitlog命令來查看歷史版本的提交gitlog的操作都是本地操作,基本都能瞬間完成,比SVN快很多,查看歷史版本或進(jìn)行diff比較都非常方便也可以通過gitrevert操作來回退到歷史版本2023/10/6查看歷史版本可以通過gitlog命令來查看歷史版本的提交29查看祖先引用gitlog--pretty=format:'%h%s'--graph2023/10/6查看祖先引用gitlog--pretty=format:30gitlog$gitlogcommit734713bc047d87bf7eac9674765ae793478c50d3Author:ScottChacon<schacon@>Date:FriJan218:32:332009-0800fixedrefshandling,addedgcauto,updatedtestscommitd921970aadf03b3cf0e71becdaab3147ba71cdefMerge:1c002dd...35cfb2b...Author:ScottChacon<schacon@>2023/10/6gitlog$gitlog2023/10/631SHA-1SHA-1摘要長(zhǎng)度是20字節(jié)如果地球上65億的人類都在編程,每人每秒都在產(chǎn)生等價(jià)于整個(gè)Linux內(nèi)核歷史(一百萬個(gè)Git對(duì)象)的代碼,并將之提交到一個(gè)巨大的Git倉庫里面,那將花費(fèi)5年的時(shí)間才會(huì)產(chǎn)生足夠的對(duì)象,使其擁有50%的概率產(chǎn)生一次SHA-1對(duì)象沖突。2023/10/6SHA-1SHA-1摘要長(zhǎng)度是20字節(jié)2023/10/632查看提交范圍gitlogmaster..experiemntDC2023/10/6查看提交范圍gitlogmaster..experiem33查看提交范圍gitlogorigin/master..HEAD這條命令顯示任何在你當(dāng)前分支上而不在遠(yuǎn)程origin上的提交。如果你運(yùn)行g(shù)itpush并且的你的當(dāng)前分支正在跟蹤origin/master,被gitlogorigin/master..HEAD2023/10/6查看提交范圍gitlogorigin/master..H34儲(chǔ)藏一個(gè)很實(shí)用的功能在git切換分支的時(shí)候,他會(huì)提示你有未提交的更新,你需要commit才能切換,但可能當(dāng)前代碼很亂不能提交gitstash-將未提交代碼儲(chǔ)藏gitstashapply-取出儲(chǔ)藏的代碼2023/10/6儲(chǔ)藏一個(gè)很實(shí)用的功能2023/10/635變更歷史git允許你修改提交歷史,這個(gè)很有用,可以減少那些亂七八糟的提交弄亂git倉庫gitcommit-ammend這會(huì)更改Sha-1值,不能再push之后再修改2023/10/6變更歷史git允許你修改提交歷史,這個(gè)很有用,可以減少那些亂36git調(diào)試Git有個(gè)挺有用的功能,可以找出你覺得有問題的代碼在哪個(gè)版本引入的gitblame-L32,36xxx.java2023/10/6git調(diào)試Git有個(gè)挺有用的功能,可以找出你覺得有問題的代37子模塊第三方開發(fā)的庫或者是你獨(dú)立開發(fā)和并在多個(gè)父項(xiàng)目中使用的項(xiàng)目作為一個(gè)子模塊放入git倉庫$gitsubmoduleaddgit:///chneukirchen/rack.gitrack2023/10/6子模塊第三方開發(fā)的庫或者是你獨(dú)立開發(fā)和并在多個(gè)父項(xiàng)目中使用的38filter-branch核彈級(jí)應(yīng)用,盡可能小心使用可以從所有歷史提交中刪除一個(gè)文件,悔棋用,可能你誤提交了個(gè)私密文件,可以通過這個(gè)功能來從歷史提交中全部刪除gitfilter-branch--tree-filter'rm-fpasswords.txt'HEAD2023/10/6filter-branch核彈級(jí)應(yīng)用,盡可能小心使用202339Codereview公司有個(gè)gerrit網(wǎng)站,用來做git代碼的codereviewCodereview流程:代碼commit之后,push的地址是codereview的地址,而不是倉庫地址提交之后,owner就會(huì)收到codereview的郵件,顯示代碼的改動(dòng)可以在ui上review代碼,并做評(píng)注Commiter就會(huì)收到郵件,修改并重新發(fā)起codereview2023/10/6Codereview公司有個(gè)gerrit網(wǎng)站,用來做git40大綱Git簡(jiǎn)介Git基礎(chǔ)Git操作GIT版本管理GIT分支管理在項(xiàng)目中的實(shí)踐2023/10/6大綱Git簡(jiǎn)介2023/10/641GIT開分支Git開分支代價(jià)非常小僅增加幾十字節(jié)的存儲(chǔ)開分支不需要管理員來開開分支僅需要數(shù)秒鐘2023/10/6GIT開分支Git開分支代價(jià)非常小2023/10/642創(chuàng)建分支Gitbranch<branchName>創(chuàng)建分支gitcheckout<branchName>切換分支2023/10/6創(chuàng)建分支Gitbranch<branchName>創(chuàng)建43分支merge-ff當(dāng)一個(gè)分支是另一個(gè)分支的祖父節(jié)點(diǎn),即從該分支分離后原來分支未做任何改變2023/10/6分支merge-ff當(dāng)一個(gè)分支是另一個(gè)分支的祖父節(jié)點(diǎn),即從該44分支merge-non-ff當(dāng)不滿足fast-farward條件時(shí),就會(huì)發(fā)生三方合并2023/10/6分支merge-non-ff當(dāng)不滿足fast-farward45衍合分支-rebase衍合是另一種分支合并策略,會(huì)在當(dāng)前分支上重演被衍合分支的歷史,他是一種線性的合并2023/10/6衍合分支-rebase衍合是另一種分支合并策略,會(huì)在當(dāng)前分支46分支管理遇到的問題多人并行開發(fā),開分支需求多,但分支開銷太大,只能湊合著用分支合并特別麻煩,項(xiàng)目后期經(jīng)常為了合并分支要花費(fèi)一下午的時(shí)間,特別是treeconflict問題項(xiàng)目使用時(shí)間長(zhǎng)后,svn服務(wù)器速度越來越慢,導(dǎo)致svn操作都很慢,喝杯咖啡回來繼續(xù)2023/10/6分支管理遇到的問題多人并行開發(fā),開分支需求多,但分支開銷太大47GIT的優(yōu)勢(shì)使用GIT很大程度上解決了我們?cè)陧?xiàng)目中碰到的問題分支隨意開,幾乎0代價(jià),鼓勵(lì)大家并行開發(fā)本地分支,方便進(jìn)行一些調(diào)研性的feature開發(fā)分支合并快,每天合并分支十來次,也沒啥感覺圖形化工具能方便管理分支,檢查有無分支未被合并2023/10/6GIT的優(yōu)勢(shì)使用GIT很大程度上解決了我們?cè)陧?xiàng)目中碰到的問題48Git在Datastream中的運(yùn)用Datastream項(xiàng)目從今年下半年開始正式使用git作為代碼管理的工具,摸索出了一些使用心得GIT雖然是一個(gè)分布式版本管理框架,理論上沒有中心庫的概念。但在實(shí)際應(yīng)用中還是要有一個(gè)中心庫,方便多人開發(fā)的代碼做同步盡量多使用本地分支進(jìn)行開發(fā)、單元測(cè)試,測(cè)試通過再合并到協(xié)同開發(fā)的分支上2023/10/6Git在Datastream中的運(yùn)用Datastream項(xiàng)目49項(xiàng)目分支管理策略2023/10/6項(xiàng)目分支管理策略2023/10/650項(xiàng)目分支管理策略一共有以下一些分支Master:主干分支用于上線Releasebranches:預(yù)發(fā)布分支Develop:開發(fā)分支Hotfixbranches:線上bug修復(fù)分支Featurebranches:長(zhǎng)期功能分支2023/10/6項(xiàng)目分支管理策略一共有以下一些分支2023/10/651分支-環(huán)境如果僅僅有分支管理,還無法管理好一個(gè)大型的項(xiàng)目,需要針對(duì)不同的分支,有不同的環(huán)境對(duì)應(yīng)開發(fā)環(huán)境->develop分支QA環(huán)境->Release分支、hotfix分支Per環(huán)境->性能測(cè)試相關(guān)的featurebranch線上環(huán)境->Master分支只有分支和環(huán)境對(duì)應(yīng)關(guān)系理清楚,我們才能規(guī)劃好每一步,否則還是一團(tuán)亂2023/10/6分支-環(huán)境如果僅僅有分支管理,還無法管理好一個(gè)大型的項(xiàng)目,需52開發(fā)Develop是一個(gè)長(zhǎng)期分支,也是項(xiàng)目中最重要的一個(gè)分支,在項(xiàng)目里它主要承擔(dān)協(xié)同開發(fā)、集成測(cè)試的作用。開發(fā)人員在開發(fā)feature時(shí),先本地開本地分支進(jìn)行開發(fā)和單元測(cè)試(如果該模塊開發(fā)需要其他模塊協(xié)助,也可以把這個(gè)本地分支push到遠(yuǎn)端),單元測(cè)試通過后merge到develop分支進(jìn)行集成測(cè)試。Develop分支不要求絕對(duì)穩(wěn)定,但是也要保證一定的穩(wěn)定度,至少新feature編譯和單元測(cè)試要通過,否則會(huì)影響其他同事的開發(fā)2023/10/6開發(fā)Develop是一個(gè)長(zhǎng)期分支,也是項(xiàng)目中最重要的一個(gè)分支53測(cè)試Release預(yù)發(fā)布分支一般會(huì)在項(xiàng)目有第一個(gè)feature提交時(shí)開,主要用于QA測(cè)試只有develop分支集成測(cè)試通過的才可以提交到release分支供QA測(cè)試QA如果在Release分支測(cè)試出有bug,最好的方式是通過Release上開個(gè)分支,修復(fù)bug,并借用下develop環(huán)境調(diào)試bug(這步過程需要協(xié)商),修復(fù)完成后merge到Release分支以及Develop分支2023/10/6測(cè)試Release預(yù)發(fā)布分支一般會(huì)在項(xiàng)目有第一個(gè)featur54上線QA在Release分支測(cè)試通過后,會(huì)通過配置管理員將Release分支通過fast-forward模式merge到master分支,這樣不會(huì)有任何conflict。Master分支上打TAG,然后部署上線。這樣一個(gè)項(xiàng)目流程就結(jié)束了。2023/10/6上線QA在Rele

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論