版本控制工具

版本控制的起源

  • 現(xiàn)在的軟件項目通常是由一個研發(fā)小組共同分析,設(shè)計,編碼,維護(hù)以及測試的
  • 針對團(tuán)隊開發(fā)需要解決以下問題:
    • 備份多個版本,費(fèi)空間,費(fèi)時間
    • 難以恢復(fù)至以前正確版本
    • 難以解決代碼沖突困難
    • 難以追溯問題代碼的修改人和修改時間
    • 無法進(jìn)行權(quán)限控制
    • 項目版本發(fā)布困難
  • 源代碼管理工具就是為了解決上述問題應(yīng)運(yùn)而生的

版本控制

  • 是維護(hù)工程藍(lán)圖的標(biāo)準(zhǔn)做法,能追蹤工程藍(lán)圖從誕生一直到定案的過程,是一種記錄若干文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)
    • 如果是團(tuán)隊開發(fā),使用版本控制是強(qiáng)制性的
    • 如果是單人開發(fā),也強(qiáng)烈建議現(xiàn)在就開始使用版本控制
  • 使用版本控制
    • 不會對現(xiàn)有工作造成任何損害
    • 不會增加工作量
    • 添加新的功能拓展時,會變得更加容易

常見版本控制工具

  • CVS開啟版本控制之門
  • SVN集中式版本控制之王者
    • 又稱subversion,是CVS的接班人,是一款集中式源代碼管理工具,曾經(jīng)是絕大多數(shù)開源軟件的代碼管理工具,前幾年在國內(nèi)軟件企業(yè)使用最為普遍
  • GIT分布式版本控制之偉大作品
    • 一款分布式源代碼管理工具,目前國內(nèi)企業(yè)幾乎都已經(jīng)從SVN到GIT的轉(zhuǎn)換
  • 分布式與集中式最大的區(qū)別
    • 在集中式下,開發(fā)者只能將代碼提交到服務(wù)器,在分布式下,開發(fā)者可以在本地提交
    • 在集中式下,只有遠(yuǎn)程服務(wù)器上有代碼數(shù)據(jù)庫,在分布式下,每個開發(fā)者機(jī)器上都有一個代碼數(shù)據(jù)庫
Git和SVN的簡單對比
  • 速度
    • 在很多情況下,git的速度遠(yuǎn)遠(yuǎn)比SVN快
  • 結(jié)構(gòu)
    • SVN是集中式管理,git是分布式管理
  • 其他
    • SVN使用分支比較笨拙,git可以輕松擁有無限個分支
    • SVN必須聯(lián)網(wǎng)才能正常工作,git支持本地版本控制工作
    • 舊版本的SVN會在每一個目錄置放一個.svn,git只會在根目錄擁有一個.git

Git簡介

  • GIT是一款自由和開源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項目
  • 在世界上所有的分布式版本控制工具中,git是最快,最簡單,最流行的,是Linux之父李納斯的第二個偉大作品

Git工作原理

  • 工作區(qū)(Working Directory): 倉庫文件夾里面,除了.git目錄以外的內(nèi)容
  • 版本庫(Repository): .git目錄,用于儲存記錄版本信息
    • 版本庫中的暫緩區(qū)(stage)
    • 版本庫中的分支(master): git自動創(chuàng)建的第一個分支
    • 版本庫中的HEAD指針: 用于指向當(dāng)前分支

GIT單人開發(fā)

準(zhǔn)備工作(只做一次)
  1. 創(chuàng)建一個工作區(qū)
  2. 在工作區(qū)中打開git終端
  3. 通過git init指令,初始化版本庫
  4. 通過git config user.name "姓名" / git config user.email "郵箱"設(shè)置用戶名和郵箱
  5. 通過git config -l查看設(shè)置情況
開發(fā)階段
  1. 編寫代碼
  2. 通過git add 文件名 / git add .添加到版本庫的暫緩區(qū)中
  3. 通過git commit -m"說明"將暫緩區(qū)的文件添加到HEAD指針指向的分支中(默認(rèn)只有一個分支,master分支,也稱之為主分支)

注意點(diǎn)

  1. 不是寫一句代碼就add commit一次,應(yīng)該是完成一個功能后在add commit
  2. commit時-m注釋一定要認(rèn)真編寫,與當(dāng)前提交內(nèi)容保存一致
單人使用Git管理項目好處
  1. 可以通過git status查看哪些文件沒有被管理,修改了哪些文件,紅色(沒有被管理或者被修改了),綠色(在暫緩區(qū))
  2. 可以通過git diff查看具體修改了哪些代碼
  3. 可以通過git log / git reflog查看項目演變歷史
  4. 可以通過git reset --hard 版本號在任意版本之間切換
  5. 無需備份多個文件,每次commit提交Git會自動備份

多人開發(fā)

在遠(yuǎn)程服務(wù)器上創(chuàng)建一個共享版本庫
  1. 項目負(fù)責(zé)人打開遠(yuǎn)程的服務(wù)器,然后創(chuàng)建一個工作區(qū)
  2. 在遠(yuǎn)程服務(wù)器上打開工作區(qū),在工作區(qū)中打開Git終端工具
  3. 在Git終端工具中輸入 git init --bare
  4. 經(jīng)過以上幾步,就代表遠(yuǎn)程服務(wù)器上的共享版本庫已經(jīng)創(chuàng)建好了
開發(fā)人員下載遠(yuǎn)程版本庫
  1. 開發(fā)人員在自己的電腦上打開Git終端工具
  2. 從遠(yuǎn)程服務(wù)器上下載當(dāng)前項目的共享版本庫 git clone 遠(yuǎn)程服務(wù)器共享版本庫的地址 (和單人開發(fā)使用Git的區(qū)別:單人開發(fā)是自己創(chuàng)建版本庫,而多人開發(fā)是從遠(yuǎn)程服務(wù)器下載版本庫)
開發(fā)階段(和單人開發(fā)一樣)
  1. 設(shè)置用戶名和郵箱
  2. 編寫代碼
  3. git add . 添加到暫緩區(qū)
  4. git commit -m 添加到HEAD指針指向的分支
  5. 注意點(diǎn)
    • commit是將編寫好的代碼提交到本地的版本庫,所以其他的開發(fā)人員是拿不到我們提交的代碼的
    • 如果想讓其他開發(fā)人員也能拿到我們提交的代碼,還必須將編寫好的代碼提交到遠(yuǎn)程的服務(wù)器
    • 通過 git push 將代碼提交到遠(yuǎn)程的服務(wù)器
    • 其他開發(fā)人員只需要通過 git pull 就可以拿到更新的代碼了
多人開發(fā)使用Git注意點(diǎn)
  1. 不能將不能運(yùn)行的代碼提交到本地和遠(yuǎn)程服務(wù)器
  2. 如果服務(wù)器上有其他開發(fā)人員的更新內(nèi)容,那么我們不能直接通過push將我們的代碼提交到服務(wù)器
  3. 如果服務(wù)器上有其他開發(fā)人員更新的內(nèi)容,我們必須先將其他開發(fā)人員更新的內(nèi)容更新到本地之后才能通過push提交我們的內(nèi)容
  4. 如果我們更新的內(nèi)容和其他同事更新的內(nèi)容有沖突(修改了同一文件的同一行代碼),這個時候需要我們自己手動修改沖突,修改完沖突后才能將代碼提交到遠(yuǎn)程服務(wù)器
  5. 只要開發(fā)完了一個功能就要立即提交代碼,因為在企業(yè)中誰后提交誰就負(fù)責(zé)解決沖突,誰的工作量就會變大

Git分支使用

如何查看有多少個分支
  • 通過git branch指令就可以查看當(dāng)前的版本庫中有多少個分支
  • 如果當(dāng)前的版本庫是空的,無法查看
  • 如果通過git branch指令查看當(dāng)前的版本庫中有多少個分支,輸出的內(nèi)容中哪一個分支前面有*號就代表當(dāng)前的HEAD指針指向哪一個分支,我們提交的代碼就會提交到指向的分支中
如何創(chuàng)建一個分支
  • 通過git branch 分支名稱 來創(chuàng)建一個新的分支
  • 在哪個分支中創(chuàng)建了新的分支,那么創(chuàng)建出來的新的分支就會繼承當(dāng)前分支的所有狀態(tài)
    • 例如
    • 在master分支中做了兩個操作,然后在master分支中創(chuàng)建了Dev分支,那么創(chuàng)建出來的Dev分支就會繼承master分支中的這兩個操作
  • 一旦分支被創(chuàng)建出來之后,分支就是獨(dú)立的,分支之間不會相互影響
如何切換分支
  • 通過git switch 分支名稱 來修改HEAD指針的指向
  • 只要HEAD指針的指向發(fā)生了改變,那么commit的代碼就會發(fā)生改變
  • HEAD指針指向誰commit提交的代碼就提交到哪個分支中
如何合并分支
  • 可以通過git merge 分支名稱 來合并分支
    • 例如
    • 在master分支中執(zhí)行 git merge Dev就代表需要將Dev分支中的代碼都合并到master分支中
    • 在Dev分支中執(zhí)行 git merge master就代表需要將master分支中的代碼都合并到Dev分支中
如何刪除分支
  • 通過git branch -d 分支名稱 來刪除本地的分支
  • 通過git push origin --delete 分支名稱 來刪除遠(yuǎn)程服務(wù)器的分支

Gitflow工作流程

準(zhǔn)備階段
  1. 初始化遠(yuǎn)程工作區(qū)和共享版本庫
  2. 項目經(jīng)理初始化項目,并在master定制標(biāo)記
  3. 將master分支提交到遠(yuǎn)程服務(wù)器
  4. 項目經(jīng)理基于master分支創(chuàng)建Develop分支
  5. 項目經(jīng)理將新建的分支提交到遠(yuǎn)程的服務(wù)器
  6. 項目經(jīng)理給開發(fā)人員分配工作
開發(fā)階段
  1. 開發(fā)人員基于develop分支創(chuàng)建功能分支
  2. 開發(fā)人員在自己的分支上add commit push
  3. 開發(fā)完成告訴項目經(jīng)理,由項目經(jīng)理審核代碼并合并到develop分支
準(zhǔn)備上線階段
  1. 項目經(jīng)理基于develop分支創(chuàng)建release分支
  2. 測試人員獲取release分支代碼進(jìn)行測試
  3. 發(fā)現(xiàn)bug由開發(fā)人員基于release分支創(chuàng)建bugfix分支進(jìn)行修復(fù)
  4. 開發(fā)人員修復(fù)完成后重新合并到release分支
  5. 項目經(jīng)理將測試和修復(fù)完所有bug的最終代碼合并到master分支和develop分支
正式上線階段
  1. 項目經(jīng)理給master分支制定標(biāo)記
  2. 項目經(jīng)理將標(biāo)記提交到遠(yuǎn)程服務(wù)器
  3. 項目完成上線
上線之后
  1. 項目上線后如果出現(xiàn)了緊急bug
  2. 基于master分支創(chuàng)建hotfix分支,在該分支上修復(fù)bug
  3. 修復(fù)完成后重新合并到master分支和develop分支
  4. 項目經(jīng)理在master分支定制標(biāo)記
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盖腿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子俘闯,更是在濱河造成了極大的恐慌恢共,老刑警劉巖奇钞,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡涯雅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門展运,熙熙樓的掌柜王于貴愁眉苦臉地迎上來活逆,“玉大人,你說我怎么就攤上這事拗胜≌岷颍” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵埂软,是天一觀的道長锈遥。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么所灸? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任丽惶,我火速辦了婚禮,結(jié)果婚禮上爬立,老公的妹妹穿的比我還像新娘钾唬。我一直安慰自己,他們只是感情好侠驯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布知纷。 她就那樣靜靜地躺著,像睡著了一般陵霉。 火紅的嫁衣襯著肌膚如雪琅轧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天踊挠,我揣著相機(jī)與錄音乍桂,去河邊找鬼。 笑死效床,一個胖子當(dāng)著我的面吹牛睹酌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剩檀,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼憋沿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沪猴?” 一聲冷哼從身側(cè)響起辐啄,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎运嗜,沒想到半個月后壶辜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡担租,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年砸民,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奋救。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡岭参,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尝艘,到底是詐尸還是另有隱情演侯,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布利耍,位于F島的核電站蚌本,受9級特大地震影響盔粹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜程癌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一舷嗡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嵌莉,春花似錦进萄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沿癞,卻和暖如春援雇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背椎扬。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工惫搏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚕涤。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓筐赔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親揖铜。 傳聞我的和親對象是個殘疾皇子茴丰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容