如何使用git實現團隊協做開發

如何使用git實現團隊協做開發

Git是一個開源的分佈式版本控制系統,用以有效、高速的處理從很小到很是大的項目版本管理。Git 是 Linus Torvalds 
爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。

git與github有什麼區別?

  • git(工具)是一個版本控制工具
  • github(社區)是一個用git作版本控制的項目託管平臺,並附帶交友分享功能。。相似的平臺還有bitbucket、oschina的碼雲這裏寫圖片描述(逗逼名字)。 這些平臺基本都是以開源項目著稱的,固然也提供必定的收費私有化託管服務。 固然(私有化),估計你們還據說過coding、gitlab、gogs,這些都是作一些私有化項目託管的平臺。gitlab、gogs都是開源的git託管平臺,能夠本身私有化部署。

git和svn的區別

  • svn是一箇中心化的版本控制工具

svn

每個SVN用戶均可以從服務器checkout代碼,一樣也能夠像服務器提交(commit)代碼,能夠更新(update)到別人提交的代碼。git

  • 優點:全部的操做都須要基於SVN中心服務器,因此操做起來必然很簡單。程序員

  • 劣勢:正由於全部的操做都要基於SVN中心服務器,因此只要SVN中心服務出現衝突(conflict)、錯誤(error)都會給整個團隊之中的成員帶來災難。github

  • git是一個去中心化的分佈式版本控制工具api

git

每個節點均可以充當控制中心的做用,因此從GIT服務器複製(clone)一份到本地,一樣也能夠單獨對本身的本地git版本進行單獨管理。 在針對單個git版本庫的操做(commit,pull)就如同SVN的commit與update操做。固然,不一樣版本庫之間的操做就是拉取(pull),推送(push)。服務器

git的命令有不少,若是記不住的話, 可使用圖形化的工具 地址在:https://tortoisegit.org/


理解分支(branch)是什麼?

以一個APP爲例,咱們研發一款移動APP的過程當中,必然是一個迭代迭代的來。首先是1.0、1.一、1.2…….2.0…..3.0等等~。app

這個時候爲了防止影響已經穩定的線上版本,咱們必然會對已經上線的版本作一個備份(master分支),使用另外一個copy過來的項目進行開發(dev分支)分佈式

branch

這樣公司的程序員小A就能夠在dev分支上開發了,就算開發的時候小A腦殘,不當心把邏輯弄錯,沒法正常運行的時候。咱們還有穩定版本的Master分之,可使用。(固然,你也能夠回滾revertsvn

clone

由於,存在一個本地倉庫,咱們就能夠在一個功能沒有徹底開發完畢的時候先提交commit到本地倉庫,測試好沒有問題以後再push到遠程git服務器。 避免了,沒有開發完成的項目產生任何差池沒法處理。工具

如何進行團隊協做?

若是隻有一個開發者開發,那麼上訴的操做並無什麼大礙。對於實際的開發工做中咱們每每是多個開發者共同來開發一個項目。多人修改一個文件必然會出現衝突(conflict); 不一樣人的思想開發一個邏輯不免會出現漏洞與錯誤;如何進行code review、代碼質量把控、衝突下降纔是git的優點。gitlab

團隊協做

同理,A、B、C三位員工仍是能夠在本身的我的分之上進行開發,全部的提交都不會影響到其餘人。

分支開發

儘可能可能的下降耦合性就是git版本控制工具的核心思想。每一個人均可以在本身的分支盡情操做,直到本身的分配的功能開發完畢。 這個時候就須要,將本身新增的功能迴歸到dev分支上,與團隊其餘的成員所開發的功能進行合併。

這個時候,就能夠發起合併請求(merge request

pr


一些特殊需求與操做

線上緊急bug處理,快速發版 一個迭代開始的時候,咱們每每相對於上一個迭代修改了不少代碼。這個時候,因爲開發時間與上線的速度問題,咱們很難對上一個線上版本存在的bug進行快速修復。固然,若是出現p0級的bug,咱們不得不進行快速修復上線的時候,咱們以前設計的分之模型就比較有用了。

以下圖所示

bug

由於master分之與線上的代碼保持了一直,咱們但願臨時性處理一些問題,咱們就從master分之臨時性的拉出一個fix bug分之。 將正在開發的分之切換到fix bug分之,快速修復bug上線。而後在切換到本身的dev_xx分之進行迭代開發,作到的環境的快速切換。

多分支切換,本地修改暫存

使用git的時候,咱們每每使用branch解決任務切換問題,例如,咱們每每會建一個本身的分支去修改和調試代碼, 若是別人或者本身發現原有的分支上有個不得不修改的bug,咱們每每會把完成一半的代碼 commit提交到本地倉庫,而後切換分支去修改bug,改好以後再切換回來。這樣的話每每log上會有大量沒必要要的記錄。

其實若是咱們不想提交完成一半或者不完善的代碼,可是卻不得不去修改一個緊急Bug,那麼使用’git stash’就能夠將你當前未提交到本地(和服務器)的代碼推入到Git的棧中。

usage: git stash list 列舉出本身的暫存代碼 or: git stash show 查看stash的詳情 or: git stash drop 丟棄stash or: git stash ( pop | apply ) 彈出棧中的stash or: git stash branch stash某個分之 or: git stash [save [--patch] 壓入棧stash or: git stash clear 清空

操做流程

  • Git 的安裝

  • 建立倉庫

    簡易的命令行入門教程:

    Git 全局設置:

    git config --global user.name "superworker"
    git config --global user.email "huyanliang@inpingo.com"

    建立 git 倉庫:

    mkdir api
    cd api
    git init
    touch README.md
    git add README.md
    git commit -m "first commit"
    git remote add origin https://git.oschina.net/superworker/api.git
    git push -u origin master

    已有項目?

    cd existing_git_repo
    git remote add origin https://git.oschina.net/superworker/api.git
    git push -u origin master

公有庫開發過程

  • fork倉庫
    • 一般fork公有庫的Master分支做爲當前的開發分支
  • 提交pr
  • pr審覈
  • pr合併

fork倉庫 | 提交pr | pr審覈 | pr合併

  • 克隆倉庫
git clone https://git.oschina.net/superworker/api.git
  • 切換到dev分支
git checkout dev
  • 建立分支
git checkout -b [new-feature]
  • 提交分支
git push origin [new-feature]
  • 本地分支合併
查看分支:git branch

建立分支:git branch <name>

切換分支:git checkout <name>

建立+切換分支:git checkout -b <name>

合併某分支到當前分支:git merge <name>

刪除分支:git branch -d <name>
``
相關文章
相關標籤/搜索