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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

files

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

files

用來撤銷最后一次gitadd

files,你也可以用gitreset

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

files

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

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論