使用Git進行協同開發

 

用了一段時間github,一直想用時間來對git的使用來作一段筆記,前段時間比較忙,如今沉下心來學習也是極好的。git

不少項目開發會採用git這一優秀的分佈式版本管理工具來進行項目版本管理。由於git的使用很是靈活,因此在實際操做中會有許多不一樣的工做流程。不一樣團隊對於不一樣項目會有不一樣的協做方式。掌握git版本管理開發,對之後的學習和開發都有不少好處。github

首先基本名詞要懂:分佈式

倉庫(Repository)、分支(branch)、工做流(workflow)工具

 

1. 倉庫(Repository)學習

在項目的開始到結束,咱們會有兩種倉庫。一種是源倉庫(origin),一種是開發者倉庫。測試

源倉庫(origin)的有兩個做用:網站

  • 彙總參與該項目的各個開發者的代碼編碼

  • 存放趨於穩定和可發佈的代碼項目管理

源倉庫應該是受保護的,開發者不該該直接對其進行開發工做。只有項目管理者(一般是項目發起人)能對其進行較高權限的操做。開發

開發者倉庫:

    任何開發者都不會對源倉庫進行直接的操做,源倉庫創建之後,每一個開發者須要作的事情就是把源倉庫的「複製」一份,做爲本身平常開發的倉庫。這個複製,也就是github上面的fork。

    每一個開發者所fork的倉庫是徹底獨立的,互不干擾,甚至與源倉庫都無關。  每一個開發者倉庫至關於一個源倉庫實體的影像,  開發者在這個影像中進行編碼, 提交到本身的倉庫中,這樣就能夠輕易地實現團隊成員之間的並行開發工做。  而開發工做完成之後,   開發者能夠向源倉庫發送pull request,請求管理員把本身的代碼合併到源倉庫中,這樣就實現了分佈式開發工做,和最後的集中式的管理。

 

2. 分支(branch) 

在git中,分支操做則是每一個開發人員平常工做流。利用git的分支,能夠很是方便地進行開發和測試。

咱們爲git定下一種分支模型,在這種模型中,分支有兩類,五種:

  • 永久性分支

    • master branch:主分支

    • develop branch:開發分支

  • 臨時性分支

    • feature branch:功能分支

    • release branch:預發佈分支

    • hotfix branch:bug修復分支

master:主分支從項目一開始便存在,它用於存放通過測試,已經徹底穩定代碼;在項目開發之後的任什麼時候刻當中,master存放的代碼應該是可做爲產品供用戶使用的代碼。每一次master更新的時候都應該用git打上tag,說明你的產品有新版本發佈了。

develop:開發分支,一開始從master分支中分離出來,用於開發者存放基本穩定代碼。開發者把功能作好之後,是存放到本身的develop中,當測試完之後,能夠向管理者發起一個pull request,請求把本身倉庫的develop分支合併到源倉庫的develop中。

概括:全部開發者開發好的功能會在源倉庫的develop分支中進行彙總,當develop中的代碼通過不斷的測試,已經逐漸趨於穩定了,接近產品目標了。這時候,咱們就能夠把develop分支合併到master分支中,發佈一個新版本。

 

feature:功能性分支,是用於開發項目的功能的分支,是開發者主要戰鬥陣地。開發者在本地倉庫從develop分支分出功能分支,在該分支上進行功能的開發,開發完成之後再合併到develop分支上,這時候功能性分支已經完成任務,能夠刪除。功能性分支的命名通常爲feature-*,*爲須要開發的功能的名稱。

release:預發佈分支,當產品即將發佈的時候,要進行最後的調整和測試,這時候就能夠分出一個預發佈分支,進行最後的bug fix。測試徹底之後,發佈新版本,就能夠把預發佈分支刪除。預發佈分支通常命名爲release-*。

hotfix:修復bug分支,當產品已經發布了,忽然出現了重大的bug。這時候就要新建一個hotfix分支,繼續緊急的bug修復工做,當bug修復完之後,把該分支合併到master和develop之後,就能夠把該分支刪除。修復bug分支命名通常爲hotfix-*。

 

示範:舉一個例子,A正在作一個團隊項目,已經把源倉庫fork了,而且clone到了本地。如今要開發網站的某個功能。A在本地倉庫中能夠這樣作:

  1. 切換到develop分支 :>>> git checkout develop

  2. 分出一個功能性分支: >>> git checkout -b feature-discuss

  3. 在功能性分支上進行開發工做,屢次commit,測試之後...

  4. 把作好的功能合併到develop中:

    >>> git checkout develop    # 回到develop分支    

    >>> git merge--no-ff feature-discuss# 把作好的功能合併到develop中    

    >>> git branch -d feature-discuss    # 刪除功能性分支    

    >>> git push origin develop    # 把develop提交到本身的遠程倉庫中

 

3. 工做流(workflow)

    1) 源倉庫的構建,建立一個項目,初始化了兩個永久性分支master和develop.

    2) 開發者fork源倉庫

    3) 把本身開發者倉庫clone到本地,命令:git clone

    4) 構建功能分支進行開發,完成後合併到本身的develop分支。

     進入倉庫中,按照前面說所的構建功能分支的步驟,構建功能分支進行開發、合併,假設我如今要開發一個「討論」功能:

  >>> git checkout develop    # 切換到`develop`分支   

  >>> git checkout -b feature-discuss    # 分出一個功能性分支    

  >> touch discuss.js    # 僞裝discuss.js就是咱們要開發的功能    

  >> git add .    

  >> git commit -m 'finish discuss feature'# 提交更改    

  >>> git checkout develop    # 回到develop分支    

  >>> git merge--no-ff feature-discuss# 把作好的功能合併到develop中    

  >>> git branch -d feature-discuss    # 刪除功能性分支    

  >>> git push origin develop    # 把develop提交到本身的遠程倉庫中

 

    5) 向管理員提交pull request。通過測試之後,以爲沒問題,就能夠請求管理員把本身倉庫的develop分支合併到源倉庫的develop分支中,這就是傳說中的pull request。

    6) 管理員測試、合併

         1) 對代碼進行review,github提供很是強大的代碼review功能

         2) 在本地測試新建一個測試分支,測試pull request的代碼

         >> git checkout develop    # 進入本地的develop分支    

         >> git checkout -b livoras-develop    

             # 從develop分支中分出一個叫livoras-develop的測試分支測試pull request代碼    

         >> git pull https://github.com/livoras/git-demo.git develop    

            # 把pull request的代碼pull到測試分支中,進行測試

         3) 判斷是否贊成合併到源倉庫的develop中,若是通過測試沒問題,能夠把個人代碼合併到源倉庫的develop中:

         >> git checkout develop    

         >> git merge--no-ff livoras-develop    

         >> git push origin develop

相關文章
相關標籤/搜索