Git工做流

Git基於分支的工做流程

詳細內容看:https://github.com/xirong/my-...git

集中式工做流

集中式工做流是集中式版本控制工具中經常使用的開發流程,以主分支(mater)爲核心,全部開發人員經過更新主分支代碼完成代碼的開發工做。github

集中式工做流

工做流程是這樣的:bash

  • 如今團隊裏面有兩我的,子旺金康,他們兩我的分別克隆了遠程的倉庫gitdemo
  • 如今子旺進行了一次提交,遠程倉庫就多了一個版本的提交git push orgin master
  • 如今金康想要提交到遠程倉庫,發現沒辦法提交push,須要先git pull --rebase origin master 拉取的時候,同時進行變基操做,保證代碼版本歷史的漂亮(固然這種漂亮有時候也須要付出一些代價)
  • 總的來講,集中式的工做流,就須要不斷拉取遠程倉庫和本地的進行同步,即push前須要先pull。(不斷的pull是很是友好的,也是公司開發須要的)

功能開發工做流

功能分支工做流以集中式工做流爲基礎,不一樣的是爲各個新功能分配一個專門的分支來開發。這樣能夠在把新功能集成到正式項目前,用Pull Requests的方式討論變動。pull requests工做流能爲每一個分支發起一個討論,在分支合入正式項目以前,給其它開發者有表示贊同的機會。工具

功能開發工做流

工做流程是這樣的:fetch

  • 團隊裏面的子旺master分支上開了一個功能分支feature-xxx,如今子旺餓了,要去吃點東西,在去以前要把編寫的代碼提交push git push -u origin feature-xxx-u選項設置本地分支去跟蹤遠程對應的分支)到遠程的feature-xxx分支上面。
  • 如今子旺完成了功能開發,而且push到他的遠程分支feature-xxx,他發起一個Pull Request讓團隊的其它人知道功能已經完成。
  • 如今金康變成了領導,領導收到了子旺發來的pull request金康對工做有些不滿意,因此讓子旺進行修改,這些修改對話都是在pull request上完成的。終於,金康接受了pull request進行了merge金康在合併前必定要檢出master分支並確認是它是最新的,這樣才能夠合併到master上。

Gitflow工做流

  • 相對於使用僅有的一個master分支,Gitflow工做流使用兩個分支來記錄項目的歷史。master分支存儲了正式發佈的歷史,而develop分支做爲功能的集成分支。
  • 每一個新功能位於一個本身的分支,這樣能夠push到中央倉庫以備份和協做。但功能分支不是從master分支上拉出新分支,而是使用develop分支做爲父分支。
  • 一旦develop分支上有了作一次發佈的功能,就從develop分支上checkout一個發佈release分支。 新建的分支用於開始發佈循環,因此從這個時間點開始以後新的功能不能再加到這個分支上-----這個分支只應該作Bug修復、文檔生成和其它面向發佈任務。 一旦對外發布的工做都完成了,發佈release分支合併到master分支並分配一個版本號打好Tag。 另外,這些重新建發佈分支以來的作的修改要合併回develop分支
  • 維護分支或說是熱修復(hotfix)分支用於給產品發佈版本快速生成補丁,這是惟一能夠直接從master分支fork出來的分支。 修復完成,修改應該立刻合併回master分支和develop分支(當前的發佈分支),master分支應該用新的版本號打好Tag

Gitflow工做流

Forking工做流

Forking工做流和前面討論的幾種工做流有根本的不一樣,這種工做流不是使用單個服務端倉庫做爲『中央』代碼基線,而讓各個開發者都有一個服務端倉庫。這意味着各個代碼貢獻者有2個Git倉庫而不是1個:一個本地私有的,另外一個服務端公開的。spa

Forking工做流

工做流程是這樣的:版本控制

  • 團隊裏面的金康出去創業了,開了一家新公司,可是子旺捨不得金康,因此還在幫助金康開發,如今金康初識化了一個倉庫,並進行了一些提交,本身在玩。
  • 子旺是一個好心人,想幫助金康作一些貢獻,所以子旺fork了金康的項目,此時子旺須要在本身的倉庫中開設2個遠程別名 —— 一個指向正式倉庫(金康的倉庫),另外一個指向開發者本身的服務端倉庫(子旺的倉庫)。這樣作的目的是爲了可以拉取金康的倉庫更新。代碼以下:
# 給金康的倉庫起了一個遠程別名 upstream
git remote add upstream https://github/guojinkang/gitdemo
git pull upstream master
  • 子旺完成了功能的開發,準備合併到金康的庫上,須要先進行一個pull request,他想集成他的功能分支到上游遠程倉庫的master分支中
  • 金康收到了pull request金康此時要檢查子旺的代碼是否能夠合併 git fetch https://github/fuziwang/gitdemo feature-branch 發現能夠合併,所以進行合併。
  • 此時子旺須要拉取最新的代碼 git pull upstream master
相關文章
相關標籤/搜索