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),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Git代碼治理藝術(shù)顧費(fèi)勇2023/11/7大綱Git簡介Git根底Git操作Git版本治理GIT分支治理在工程中的實(shí)踐2023/11/7Git簡史2023年,linux工程組開頭啟用分布式版本把握系統(tǒng)BitKeeper來治理和維護(hù)代碼。

2023年的時(shí)候,開發(fā)BitKeeper的商業(yè)公司同Linux內(nèi)核開源社區(qū)的合作關(guān)系完畢,他們收回了免費(fèi)使用BitKeeper的權(quán)力April5,2023–Linus公布首個(gè)git版本June15,2023-Git用作Linux源碼版本把握Git創(chuàng)立時(shí)的目標(biāo)速度簡潔的設(shè)計(jì)對非線性開發(fā)模式的強(qiáng)力支持〔允許上千個(gè)并行開發(fā)的分支〕完全分布式有力氣高效治理類似Linux內(nèi)核一樣的超大規(guī)模工程〔速度和數(shù)據(jù)量〕2023/11/72023/11/7Git簡介git是一個(gè)快速,開源,分布式的版本把握系統(tǒng),在開源和協(xié)作編程社區(qū)很快取代了svn??梢岳盟鼇碜粉櫣こ讨械奈募梢院秃献骰锇楣蚕戆姹練v史狀態(tài)可以將合作伙伴的工作和你的工作進(jìn)展合并可以對整個(gè)工程或某些文件跟歷史版本進(jìn)展比較或者恢復(fù)到早期的某個(gè)版本。2023/11/7Git簡介它的特點(diǎn)在于:1.開源2.高速3.節(jié)省大量空間4.靈敏、簡潔、高效的分支治理它能最大限度地發(fā)揮多人協(xié)同并發(fā)編程的效能,讓分支治理更快速,版本治理更簡潔2023/11/7GIT簡介-開源GIT源碼地址:git-scm/downloadGIT許可證:GNU通用公共許可證〔GNUGeneralPublicLicense〕2023/11/7大綱Git簡介Git根底Git操作Git版本治理GIT分支治理在工程中的實(shí)踐2023/11/7離線Git是完全的分布式處理,它可以離線工作。跟SVN完全不同,Git的全部操作幾乎不需要網(wǎng)絡(luò)連接,包括歷史回憶,差異顯示和提交2023/11/7快速Git比其他的VCS工具要快很多,由于git絕大局部是離線操作,對網(wǎng)絡(luò)依靠小timegitclonessh://gufeiyong@ease:2222/backend/datastream.git>/dev/nullreal 0m26.559suser 0m2.568ssys 0m1.028s

timesvncos://ease/svn/datastream>/dev/nullreal 3m14.684suser 1m1.156ssys 0m20.897s2023/11/7占用空間小git比較節(jié)省空間。Django工程為例。

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

git克隆比SVN要小很多,且git克隆包含整個(gè)工程的歷史版本。SVN只包含工程的最終一個(gè)版本。2023/11/7快照git是基于快照的,而不是補(bǔ)丁文件包含一些元數(shù)據(jù)〔提交信息〔message〕,作者,日期等等〕,一個(gè)commit指向這次提交時(shí)工程的快照。2023/11/7分支以前的VCS工具分枝的方法是對每一個(gè)分枝都放到一個(gè)獨(dú)立的名目中。而git可以讓你在同一個(gè)工作名目中切換〔switch〕到不同的分枝。創(chuàng)立和切換分枝幾乎是即時(shí)的〔instant〕,并且存在本地分支git開發(fā)者可以隨時(shí)創(chuàng)立,合并,刪除多個(gè)分枝。它鼓舞一種非線性的開發(fā)周期,它可以說是并行的多線程模式而不是多個(gè)步驟串行的模式。2023/11/7集中化的版本把握系統(tǒng)

2023/11/7集中化的版本把握系統(tǒng)害處:好處:每個(gè)人都可以在確定程度上看到工程中的其他人正在做些什么。而治理員也可以輕松掌控每個(gè)開發(fā)者的權(quán)限?!?〕中心效勞器的單點(diǎn)故障,無法提交更新,也就無法協(xié)同工作。〔2〕要是中心效勞器的磁盤發(fā)生故障,碰巧沒做備份,會有喪失數(shù)據(jù)的風(fēng)險(xiǎn)。最壞的狀況是徹底喪失整個(gè)工程的全部歷史更改記錄2023/11/7分布式版本把握系統(tǒng)

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

files

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

files

用來撤銷最終一次gitadd

files,你也可以用gitreset

撤銷全部暫存區(qū)域文件。gitcheckout--

files

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

溫馨提示

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

評論

0/150

提交評論