1. 程式人生 > >使用Git實現團隊協作開發提高效率

使用Git實現團隊協作開發提高效率

Git是一個開源的分散式版本控制系統,用以有效、高速的處理從很小到非常大的專案版本管理。Git 是 Linus Torvalds 

為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。

git與github有什麼區別?

git(工具)是一個版本控制工具
github(社群)是一個用git做版本控制的專案託管平臺,並附帶交友分享功能。。類似的平臺還有bitbucket、oschina的碼雲這裡寫圖片描述(逗逼名字)。 這些平臺基本都是以開源專案著稱的,當然也提供一定的收費私有化託管服務。 當然(私有化),估計大家還聽說過coding、gitlab、gogs,這些都是做一些私有化專案託管的平臺。gitlab、gogs都是開源的git託管平臺,可以自己私有化部署。
git和svn的區別


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


每一個SVN使用者都可以從伺服器checkout程式碼,同樣也可以像伺服器提交(commit)程式碼,可以更新(update)到別人提交的程式碼。

優勢:所有的操作都需要基於SVN中心伺服器,所以操作起來必然很簡單。
劣勢:正因為所有的操作都要基於SVN中心伺服器,所以只要SVN中心服務出現衝突(conflict)、錯誤(error)都會給整個團隊之中的成員帶來災難。

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


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

git的命令有很多,如果記不住的話, 可以使用圖形化的工具 地址在:https://tortoisegit.org/

理解分支(branch)是什麼?

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

這個時候為了防止影響已經穩定的線上版本,我們必然會對已經上線的版本做一個備份(master分支),使用另一個copy過來的專案進行開發(dev分支)


這樣公司的程式設計師小A就可以在dev分支上開發了,就算開發的時候小A腦殘,不小心把邏輯弄錯,無法正常執行的時候。我們還有穩定版本的Master分之,可以使用。(當然,你也可以回滾revert)


因為,存在一個本地倉庫,我們就可以在一個功能沒有完全開發完畢的時候先提交commit到本地倉庫,測試好沒有問題之後再push到遠端git伺服器。 避免了,沒有開發完成的專案產生任何差池無法處理。

如何進行團隊協作?

如果只有一個開發者開發,那麼上訴的操作並沒有什麼大礙。對於實際的開發工作中我們往往是多個開發者共同來開發一個專案。多人修改一個檔案必然會出現衝突(conflict); 不同人的思想開發一個邏輯難免會出現漏洞與錯誤;如何進行code review、程式碼質量把控、衝突降低才是git的優勢。


同理,A、B、C三位員工還是可以在自己的個人分之上進行開發,所有的提交都不會影響到其他人。


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

這個時候,就可以發起合併請求(merge request)


一些特殊需求與操作

線上緊急bug處理,快速發版 一個迭代開始的時候,我們往往相對於上一個迭代修改了很多程式碼。這個時候,由於開發時間與上線的速度問題,我們很難對上一個線上版本存在的bug進行快速修復。當然,如果出現p0級的bug,我們不得不進行快速修復上線的時候,我們之前設計的分之模型就比較有用了。

如下圖所示


因為master分之與線上的程式碼保持了一直,我們希望臨時性處理一些問題,我們就從master分之臨時性的拉出一個fix bug分之。 將正在開發的分之切換到fix bug分之,快速修復bug上線。然後在切換到自己的dev_xx分之進行迭代開發,做到的環境的快速切換。

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

使用git的時候,我們往往使用branch解決任務切換問題,例如,我們往往會建一個自己的分支去修改和除錯程式碼, 如果別人或者自己發現原有的分支上有個不得不修改的bug,我們往往會把完成一半的程式碼 commit提交到本地倉庫,然後切換分支去修改bug,改好之後再切換回來。這樣的話往往log上會有大量不必要的記錄。

其實如果我們不想提交完成一半或者不完善的程式碼,但是卻不得不去修改一個緊急Bug,那麼使用’git stash’就可以將你當前未提交到本地(和伺服器)的程式碼推入到Git的棧中。

usage: git stash list 列舉出自己的暫存程式碼

git stash show 檢視stash的詳情

git stash drop 丟棄stash

git stash ( pop | apply ) 彈出棧中的stash 

git stash branch stash某個分之 

git stash [save [--patch] 壓入棧stash

git stash clear 清空

操作流程

  • Git 的安裝
  • 建立倉庫
簡易的命令列入門教程:


Git 全域性設定:

 git config --global user.name "superworker"
 git config --global user.email "[email protected]"
建立 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合併     1.克隆倉庫
 git clone https://git.oschina.net/superworker/api.git
    2.切換到dev分支
 git checkout dev
    3.建立分支
 git checkout -b [new-feature]
    4.提交分支
 git push origin [new-feature]
    5.本地分支合併 ``` 檢視分支
 git branch
   6.建立分支
 git branch <name>
   7.切換分支
 git checkout <name>
   8.建立+切換分支
 git checkout -b <name>
   9.合併某分支到當前分支
 git merge <name>
  10.刪除分支
 git branch -d <name>