1. 程式人生 > >Git教程Git多人協作開發

Git教程Git多人協作開發

創建分支 是什麽 命令 osi 完成 兩個 表示 ges 開發人員

Git可以完成兩件事情:

1. 版本控制

2.多人協作開發

如今的項目,規模越來越大,功能越來越多,需要有一個團隊進行開發。

如果有多個開發人員共同開發一個項目,如何進行協作的呢。

Git提供了一個非常好的解決方案 ---- 多人協作開發。

1.多人協作原理

典型的做法是,首先創建一個git服務器,被多個人所操作。

技術分享

1.多人協助實現

分為如下幾個步驟:

1.創建一個git裸服務器 (git init --bare)

2.從裸服務器將版本庫克隆至本地(git clone )

3.本地常規操作

4.推送版本至服務器 (git remote + git push origin master)

5.從遠程服務器拉取版本(git pull)

一般而言,我們需要在Linux服務器上來搭建我們的git版本服務器,每個公司都會有。

由項目負責人開始。

我們現在是windows系統上模擬這個操作過程。

(1).創建一個git裸服務器 (git init --bare)

由負責人來完成的。服務器新建一個項目目錄,如git-server

技術分享

創建完畢,我們發現git-server內容和上次的不太一樣。

上次使用git init 創建之後,會有一個隱藏的.git目錄。目錄中的才是現在看到的內容。

也就是說,現在根本就沒有.git目錄了。

這就意味著在這個目錄中,不能做常規的開發。

(2).從裸服務器將版本庫克隆至本地(git clone )

在git版本服務器,一般是不做任何開發工作的。如果要開發項目,就需要將版本庫從服務器克隆到本地。

假設有一個程序員甲,開始自己的工作了。

使用命令 git clone git版本服務器地址

在windows下面,就是使用絕對路徑,如下:

技術分享

然後,甲就可以在這個目錄下,進行常規開發。

技術分享

我們可以在這個目錄下,創建自己的工作區目錄,完成常規開發。

(3).本地常規操作

甲可以,在本地進行常規開發。

技術分享

技術分享

這個過程,可以反復進行。

技術分享

技術分享

我的第一個模塊(功能)開發完畢。需要將其推送到服務器。

(4).推送版本至服務器 (git remote + git push origin master)

當在本地完成一個模塊(功能),需要推送到服務器,供其他同事使用。

第一件事情,需要知道服務器在哪兒?

git remote

技術分享

第二件事情,直接推送即可

git push origin master

其中origin就是使用git remote得到的遠程服務器的名稱。

master表示是主分支。

技術分享

對於甲來說,它的工作已經告一段落了,該輪到乙程序員出場了。

乙程序員,首先將版本庫從git服務器上克隆到本地。

技術分享

打開這個目錄,然後進可以看到最新新的內容,如下:

技術分享

對於乙而言,可以在本地進行常規開發。與此同時,甲繼續他的常規開發。

模擬乙程序員在本地的開發。

技術分享

技術分享

將完成的工作,推送到git服務器。

技術分享

回頭,再看看甲的開發。

技術分享

技術分享

技術分享

甲收工,準備下班了。在下班之前,需要將最新版本推送到git服務器。

開始使用命令,執行如下:

技術分享

結果出錯了,why?

之所以會出錯,原因在於:其他程序員已經將最新的一個版本提交到git服務器上,但是你在提交之前,已經不是最新的。

在這種情況下,甲,需要先從服務器拉取最新的版本。

(5).從遠程服務器拉取版本(git pull)

在多人協助開發時,每個開發人員在推送自己的最新版本時,都需要確保當前版本是最新的,所以就需要先獲取最新版本,也就是說需要從服務器拉取最新版本到本地。

需要使用 git pull命令

技術分享

如此一來,甲當前就是最新的版本。

然後再次使用 git push 命令推送至服務器。

技術分享

接下來需要分兩種情況:

如果有新的開發人員加入進來,重復2~5過程。

如果不是新的開發人員,重復3~5過程。

比如,對於乙而言,其實它現在已經不是最新的版本了,所以需要使用 git pull 拉取最新版本。

技術分享

所以,對很多開發人員而言,一打開電腦,馬上先git pull,拉取最新的。然後進行常規開發,

開發完畢之後,在git push之前,還需要使用git pull再拉取一遍。

如果還有一個新的程序員丙,加入了,怎麽辦呢?

需要先git clone

技術分享

然後就進行常規開發,推送版本、拉取版本。

在整個協作開發時,有時候會出現沖突。通常都是由於開發人員分工不明確導致的,所以如果出現這種情況,需要兩個程序員協商解決。

3.分支

(1).什麽是分支

在前面所有的操作當中,我們一直使用的是master主分支。以剛才的項目版本控制為例

技術分享

有四個版本,在我們的版本庫中,都是存在於master主分支上的。

圖示如下:

技術分享

如果我們的項目本身比較簡單,只需要有主分支master就夠了。

但是,實際上並不是這樣的。

在這個世界上,有一種軟件叫做開源軟件 -- 源代碼開發,所有的人都可以免費使用。

開源軟件是由世界上無數的程序員共同來開發。

每個程序員都可以創建一個自己的分支,這個自己分支和主master完全獨立的兩個分支。

技術分享

相應的,每個程序員都可以擁有自己的分支,可以進行任何的開發,此時和master沒有什麽關系的。

一旦開發完畢,就可以將你的分支合並到主分支上去。

什麽時候會用到分支呢?

假設你準備開發一個新功能,但是需要兩周才能完成,第一周你寫了50%的代碼,如果立刻提交,由於代碼還沒寫完,不完整的代碼庫會導致別人不能幹活了。如果等代碼全部寫完再一次提交,又存在丟失每天進度的巨大風險,怎麽辦?

你可以創建一個屬於自己的分支,別人看不見,還繼續在原來的分支上工作,而你在自己的分支上進行開發,等開發完畢,合並即可。

在開源世界中,需用大量的程序員共同維護一個項目。也是需要使用分支,如Jquery。

(2).分支的基本操作

基本操作有如下幾個:

1. 查看當前分支 (git branch)

2. 創建分支 (git branch 分支名)

3.切換分支(git checkout 分支名)

4.分支上的常規操作

5.分支的合並 (git checkout master + git merge 分支名)

6.分支的刪除(git branch -d 分支名)

查看當前分支 (git branch)

技術分享

其中的 * 表示 當前分支。

默認情況下,只有一個master主分支。

創建分支 (git branch 分支名)

技術分享

切換分支(git checkout 分支名)

創建完成之後,就有了一個新的分支,但是並沒有立即切換到新的分支,需要使用命令切換一下。

技術分享

分支上的常規操作

已經切換到b1分支上,就可以在b1分支進行常規開發和操作。

技術分享

使用git add 和git commit提交。

使用git log查看即可:

技術分享

與之對應的,我們再次切換到master分支上看看是什麽情況:

技術分享

說明在master分支上,並沒有新提交的內容。

分支的合並 (git checkout master + git merge 分支名)

分支的合並,一定是在 主分支上進行的。

只能在主分支合並其它分支。

需要兩步:

1) 切換到主分支

2) 使用git merge 分支名 進行合並

技術分享

技術分享

再次查看master的一個log情況,如下:

技術分享

分支的刪除(git branch -d 分支名)

使用命令git branch -d 分支名

技術分享

如果你發現你的分支中所做的開發沒有任何用處,也可以不合並直接刪除。

(3).分支的原理

分支的過程及原理如下:

默認只有master的情況下,master總是指向最新的版本,而HEAD指針總是指向master的。

技術分享

現在,我創建了一個新的分支dev,將當前分支指定為dev,此時,master和dev都指向當前最新版本,但是HEAD指針已經指向了dev分支。

技術分享

接下來,我們提交了新的版本,dev指向最新版本,而master則原地不動。

HEAD指向當前分支dev的。

技術分享

當在dev分支上完成開發之後,可以將它合並到主分支master上。

合並時,需要先切換到master,意味著HEAD指向了master,合並的時候其實就是將master和dev的最新版本同步。

技術分享

dev分支的使命已經完成,沒有什麽作用了,將其刪除掉。只剩下一個主分支。

技術分享

轉:http://www.cnblogs.com/Josiah-Lin/p/6847973.html

Git教程Git多人協作開發