使用Git進行協同開發


 

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

很多項目開發會采用git這一優秀的分布式版本管理工具來進行項目版本管理。因為git的使用非常靈活,所以在實際操作中會有許多不同的工作流程。不同團隊對於不同項目會有不同的協作方式。掌握git版本管理開發,對以后的學習和開發都有很多好處。

首先基本名詞要懂:

倉庫(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM