1. 程式人生 > >git的工作模式和Pull Request用法詳解

git的工作模式和Pull Request用法詳解

Git的使用

Git的工作方式

分為集中式工作流、功能分支工作流、Gitflow工作流和Forking,其中集中式工作流和功能分支工作流是已經使用過的,Gitflow和Forking兩種工作流暫時沒有使用過。

集中式工作流

一個遠端倉庫,一個主分支master,團隊每個成員都有一個本地倉庫,在本地倉庫中進行程式碼的編輯、暫存和提交工作:

git add <some file> 或 git add .>
//`some file`代表要暫存的檔案,`.`代表工作目錄下的所有檔案
gie commit -m "一些描述"
//提交文,描述指的是本次提交修改了什麼功能或者修改了什麼bug,方便以後的檢視
git push -u origin master //-u選項設定本地分支去跟蹤遠端對應的分支。設定好跟蹤的分支後,就可以使用git push命令省去指定推送分支的引數 //釋出本地倉庫到遠端的中央倉庫中,origin是遠端倉庫名,master是引數告訴Git的分支,master代表主分支,當然分支可以不是主分支

注意:在一種情況下push命令會出錯,即如果小明第一次釋出程式碼到遠端倉庫,此時小紅在 本地開發自己的功能,那麼在小紅push自己的本地庫到遠端的時候會報錯,原因是小紅的本地庫和遠端庫有分歧,需要先pull遠端庫到本地,與本地庫合併之後再push到遠端庫。

功能分支工作流

在集中式工作流的基礎上,為各個新功能分配一個專門的分支來開發,即在master主分支外在建立一個分支,程式設計師開發的新功能全部push到此分支上,等到功能成熟的時候再把此分支合併到主分支master上

git checkout -b newbranch master
//checkout代表建立切換帶新分支newbranch
//-b代表如果新分支不存在則會建立一個新分支
//最後的master代表新分支是基於主分支建立的

新分支建立之後,對其的編輯、暫存和提交工作與之前一樣,對其push的命令變為git push origin newbranch,等到新功能完善之後,通過以下命令:

git checkout master
git pull
git pull origin newbranch
git push

首先git checkout master切換到主分支,然後執行git pull把本地倉庫的主分支上傳到遠端庫,再執行git pull origin newbranch保證合併newbranch分支和已經和遠端一致的本地master分支,你可以使用簡單git merge newbranch命令,但前面的命令可以保證總是最新的新功能分支。 最後把更新的master分支重新push到遠端庫。

Gitflow工作流

Gitflow工作流沒有用超出功能分支工作流的概念和命令,而是為不同的分支分配一個很明確的角色,並定義分支之間如何和什麼時候進行互動。
除了有master主分支(用於儲存正式釋出的歷史)外,還有一個作為功能整合分支的develop分支。當初始化完成後,某個程式設計師想要開發一個性能,並不是直接從master分支上拉出新分支,而是使用develop分支作為父分支,當新功能完成後,再合併會父分支,新功能的提交併不與master分支直接互動
Gitflow工作流
一旦develop分支上有了做一次釋出(或者說快到了既定的釋出日)的足夠功能,就從develop分支上checkout一個釋出分支。 新建的分支用於開始釋出迴圈,所以從這個時間點開始之後新的功能不能再加到這個分支上—— 這個分支只應該做Bug修復、文件生成和其它面向釋出任務。 一旦對外發布的工作都完成了,釋出分支合併到master分支並分配一個版本號打好Tag。 另外,這些從新建釋出分支以來的做的修改要合併回develop分支。

維護分支

維護分支
維護分支或說是熱修復(hotfix)分支用於生成快速給產品釋出版本(production releases)打補丁,這是唯一可以直接從master分支fork出來的分支。 修復完成,修改應該馬上合併回master分支和develop分支(當前的釋出分支),master分支應該用新的版本號打好Tag。
為Bug修復使用專門分支,讓團隊可以處理掉問題而不用打斷其它工作或是等待下一個釋出迴圈。 你可以把維護分支想成是一個直接在master分支上處理的臨時釋出。

工作流程

為master分支配套一個develop分支

git branch develop
git push -u origin develop

以後這個分支將會包含了專案的全部歷史,而master分支將只包含了部分歷史。其它開發者這時應該克隆中央倉庫,建好develop分支的跟蹤分支:

git clone ssh://[email protected]/path/to/repo.git
git checkout -b develop origin/develop

現在每個開發都有了這些歷史分支的本地拷貝。
小紅和小明開團隊成員始各自的功能開發。他們需要為各自的功能建立相應的分支。新分支不是基於master分支,而是應該基於develop分支:

git checkout -b some-feature develop

他們用老套路新增提交到各自功能分支上:編輯、暫存、提交:

git status
git add <some-file>
git commit

添加了提交後,功能OK了之後,如果團隊使用Pull Requests,這時候可以發起一個用於合併到develop分支。 否則她可以直接合併到她本地的develop分支後push到中央倉庫:

git pull origin develop
git checkout develop
git merge some-feature
git push
git branch -d some-feature

第一條命令在合併功能前確保develop分支是最新的。注意,功能決不應該直接合併到master分支。 衝突解決方法和集中式工作流一樣。

Forking工作流

分散式工作流,充分利用了Git在分支和克隆上的優勢,既可以管理大團隊的開發者(developer)和接受不信任貢獻者(contributor)的提交。這種工作流使得每個開發者都有一個服務端倉庫(此倉庫只有自己可以push,但是所有人都可以pull修改),每個程式設計師都push程式碼到自己的服務端倉庫,但不能push到正式倉庫,只有專案維護者才能push到正式倉庫,這樣專案維護者可以接受任何開發者的提交,但無需給他正式程式碼庫的寫許可權。
這種工作流適合網上開源社群的開源專案,大家統一對專案做貢獻,但是有一個人或一個團隊作為開發者來管理專案,所有的貢獻者的程式碼由開發者稽核,其功能完善之後再由開發者push到正式倉庫中。

Pull Request

  • Pull Request是一個為討論提交功能的專門論壇,是一個友好的web介面(在個人github專案中也有這樣一個選項),大家在其中做一些Code Review的工作,把結果反饋到Pull Request中,還可以在其中push新的提交微調功能,等到討論結束後醒目維護者合併所有的功能到官方倉庫中,關閉Pull Request。
  • 發起一個Pull Request,就是要請求另一個開發者來pull自己倉庫的一個分支到它的倉庫中,因此需要提供四個資訊:源倉庫、源分支、目的倉庫、目的分支。
  • Pull Request可以用於上述除了集中式工作流的其他三種工作流,因為其要求要麼分支不同,要麼倉庫不同,而集中式工作流只有一個倉庫,一個master分支。
  • 例:在功能分支工作流中使用Pull Request
    功能分支工作流只有一個公開的倉庫,所以Pull Request的目的倉庫和源倉庫總是同一個。 通常開發者會指定他的功能分支作為源分支,master分支作為目的分支。
    收到Pull Request後,專案維護者要決定如何做。如果功能沒問題,就簡單地合併到master分支,關閉Pull Request。但如果提交的變更有問題,他可以在Pull Request中反饋。之後新加的提交也會評論之後接著顯示出來。
    在功能還沒有完全開發完的時候,也可能發起一個Pull Request。 比如開發者在實現某個需求時碰到了麻煩,他可以發一個包含正在進行中工作的Pull Request。 其它的開發者可以在Pull Request提供建議,或者甚至直接新增提交來解決問題。

相關推薦

git工作模式Pull Request用法

Git的使用 Git的工作方式 分為集中式工作流、功能分支工作流、Gitflow工作流和Forking,其中集中式工作流和功能分支工作流是已經使用過的,Gitflow和Forking兩種工作流暫時沒有使用過。 集中式工作流 一個遠端倉庫,一個主分

oracle中的exists not exists 用法

sdn ref 用法詳解 html nbsp e30 .net tail sin oracle中的exists 和not exists 用法詳解 http://blog.csdn.net/zhiweianran/article/details/7868894oracle

js數組中foEachmap的用法 jq中的$.each$.map

cnblogs arr 對象 cal for index source asc 原生js 數組中foEach和map的用法詳解 相同點: 1.都是循環遍歷數組(僅僅是數組)中的每一項。 2.forEach() 和 map() 裏面每一次執行匿名函數都支持3個參數:數組中的

Django基礎(10): URL重定向的HttpResponseDirect, redirectreverse的用法

detail djang 包含 war sed 模型 博客 nbsp rep 利用django開發web應用, 我們經常需要進行URL重定向,有時候還需要給URL傳遞額外的參數。比如用戶添加文章完成後需要轉到文章列表或某篇文章詳情。因此熟練掌握HttpResponseDir

java中的值傳遞引用傳遞用法

       值傳遞:方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際參 數的值。   引用傳遞:也稱為傳地址。方法呼叫時,實際引數的引用(地址,而不是引數的值)被傳遞給方法中相對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引數的

Xshell拖拽檔案到linux(rzsz命令用法

在linux中rz 和 sz 命令允許開發板與主機通過串列埠進行傳遞檔案了,下面我們就來簡單的介紹一下rz 和 sz 命令的例子。 rz,sz是Linux/Unix同Windows進行ZModem檔案傳輸的命令列工具。 優點就是不用再開一個sftp工具登入上去上傳下

Linux中rzsz命令用法,上傳下載命令

在linux中rz 和 sz 命令允許開發板與主機通過串列埠進行傳遞檔案了,下面我們就來簡單的介紹一下rz 和 sz 命令的例子。 rz,sz是Linux/Unix同Windows進行ZModem檔案傳輸的命令列工具。 優點就是不用再開一個sftp工具登入上去上傳下載檔案。

swift 中的 感嘆號 問號 雙問號用法

首先介紹一下swift 中的 Optional! 點到 Optional 的標頭檔案可以看到, Optional 其實是個enum,裡面有 case None 和 case Some(Wrapped)兩種型別。其實所謂None 就是 nil, Some

expdpimpdp的用法

ORCALE10G提供了新的匯入匯出工具,資料泵。 Oracle官方對此的形容是:OracleDataPump technology enables Very High-Speed movement of data and metadata from one datab

Android activity棧、啟動模式intent flag屬性

一、Activity棧的概念        1.每個app應用程式啟動的activity都會儲存在一個單獨的棧裡面。        2.有可能某個activity發生棧轉移。二、acitivity的

ExtJS之Ext.Ajax.request用法

該請求所用的http方面,預設值為配置的方法,或者當沒有方法被配置時,如果沒有傳送引數時用get,有引數時用post。 The HTTP method to use for the request. Defaults to the configured method, or if no method was

Android中的Context類簇(裝飾模式)及Context用法,Application用法

一,Context類簇中的類概述 Context的API文件 類關係: Context類 Context是一個抽象類,原始碼位於android.content包中。描述的是一個應用程式環境的資訊,即上下文。通過它我們可以獲取應用程式的資源和類

Linux下的萬用字元特殊符號用法

在Linu系統中我們會遇到一些特殊符號 ,下面讓我給大家大致說一下 * 代表0個或者多個特殊字元 例子 yum.*

Git工作模式工作流程

Git 工作流程 git的優缺點 git屬於分布式版本控制系統:客戶端並不只提取最新版本的文件快照,而是把原始的代碼倉庫完整的鏡像下來。 優點: 1.由於任何人每次提取操作,實際上都是一次對代碼倉庫的完整備份,因此近乎所有的操作都可以在本地執行,速度就是相當的快,並且可以在網絡斷開的時候操作仍

Git 中的forkPull Request

這兩個東西是用來幹嘛的? 為開源專案貢獻自己的程式碼 你使用開源專案的時候發現一個bug並且你機智的解決了,那麼你就可以告訴作者“hi 我幫你修復了一個bug!”,作者看到你的修復後覺得不錯,就同意了加入你的程式碼,這樣你的程式碼也會開源被更多人使用! fork

git使用之六——github協同工作的Fork+Pull Request

部落格: 安卓之家 微博: 追風917 CSDN: 蔣朋的家 簡書: 追風917 部落格園: 追風917 網上你看到某個大神的專案很炫,很燦爛,你看了看,發現有bug或者你參與開源專案,需要參與進去,那麼你來對了地方,這裡帶你如何和大神一

SVN trunk(主線) branch(分支) tag(標記) 用法詳細操作步驟

trac load mar span 必須 最可 objc copy 右鍵 原文地址:http://blog.csdn.net/vbirdbest/article/details/51122637 使用場景: 假如你的項目(這裏指的是手機客戶端項目)的某個版本(例如1.0

GIT的PushPull,強制Pull覆蓋本地命令

所有 name 舉例 添加 commit 連接 -a 標識 更新 連接命令: git remote add origin + 你Git庫的地址 其中,origin是你對這個Git庫地址的標識。 一. 把文件從本地上傳到庫中 第一步:使用命令 git add命令把文件添

C#中的IDisposable模式用法

數據庫 nor 是否 entry block 記錄日誌 自定義 技術分享 ssa 本文實例講述了C#中IDisposable模式的用法,針對垃圾資源的回收進行了較為詳細的講解。分享給大家供大家參考之用。具體方法如下: 首先,對於垃圾回收而言,在C#中,托管資源的垃圾回收是

市面上觸摸IC原廠直銷代理哪家好?IIC設置工作模式參數--- VINTEK元泰觸摸感應觸控IC選型表

功耗 謝謝 pwm 代理商 先生 bcd 直銷 正品 渠道 我們的優勢: 1:我司為VINTE/臺灣元泰半導體股份有限公司/VINKA的獨家授權大中華區代理商,產品渠道正宗,確保原裝正品,大量庫存現貨,客戶批量不懼假貨! 2:公司工程力量雄厚,真誠技術服務支持,搭配原廠服務