2013-10-07 25 views
1

因此,我們正在從CVSNT遷移到Perforce或Git,並且我在過去的幾週中一直在研究它們的功能,對我來說很明顯Perforce實際上有點因爲它是集中的,所以更類似。如何在併發環境中實際使用Git

Git的似乎快,但我們所有的開發人員留在同一個房間,儘管有100多名開發人員,還是所有的計算機都連接到CVSNT服務器公司...

出於這個原因,我看不到我怎麼能適應Git的工作以及Perforce公司會做..

對於離線,當一個克隆一個Git倉庫,他將複製歷史,所有關於該倉庫已是脫機工作,但是,以並行的方式工作,似乎有點奇怪,你有本地文件的歷史,例如...

因此,如果開發人員B承諾並推送到服務器,開發人員A不會知道它,它不會在他的文件的歷史記錄中......除非他真的從服務器上拉出來,對吧?! (只要他們在同一個分支..)

但是,如果它以這種方式工作,那麼我實際上是在一個集中的方式與分佈式SCM工作......並且必須「猜測」已經被推到了服務器。即使有一個命令知道,如果一個文件有一個新的版本,它是壞需要手動檢查它..

有人能解釋我如何更好的Git實際上可以並行工作方式沒有人必須知道其他人何時實際推送到服務器等。

另一件事,我無法找到任何的Git版本好看圖,我在龜的Git已經找到,但它更像是一個分支圖比修訂的圖..

回答

3

像git一樣的DVCS通常的工作流程不依賴於你猜測是否有人推或不推。

你只是推,如果其他人已經推到你面前,your action will be, by default, denied(因爲不是「快進」)。

然後你拉:

  • 理想情況下,你git pull --rebase以重做的最近分支的提交)的頂部您的工作。
  • 你是否寄託都仍然有效
  • 你逼退

至於版本圖,一個simple git log --graph可以幫你看看是怎麼回事(我like this alias)。

4

...和有「猜」當一個人推到服務器..即使 有一個命令知道,如果一個文件有一個新的版本,那就是不必手動檢查壞 ..

那麼這個有一個名爲git hooks的功能,它允許您在每次提交之前或之後啓動腳本(以及某些其他時間)。

因此,您可以使用它來通知(電子郵件,短信,鴿子)其他人在某個特定分支上工作,因此他們應該執行提取操作。

+1

+1鴿子,如果沒有別的:d – slebetman

2

的通常情況下(非常簡化)如下:

  1. 開發人員檢查出主分支到自己的機器(又名「象鼻」在SVN,與最近提交的地方)。
  2. 他分支從它,並創建一個本地分支。
  3. 在這個本地分支中,他創建了必要的提交。
  4. 他創建這個分支「拉入請求」(換句話說,要求它被重新合併到主)。
  5. 誰負責主分支的回顧了變化並將它們合併到主。

主分支可能會從開發人員分支的時間開始更改,但如果新更改不會與對主分支所做的更改相交,則會自動完成合並。因此,當git執行合併時,主分支僅在可忽略的時間內被阻止。

如果他們不相交(這是不是經常),也有解決它的兩種方式。首先,負責處理pull請求的人可以手動解決衝突。其次,他可以打電話給開發人員並要求他這樣做。然後開發人員簽出更新後的主分支,將其合併到本地分支(解決衝突)並創建一個新的拉取請求,該請求現在幾乎可以保證成功。

實際上,當然可能會有幾個併發的分支(比如master,主要功能的某些分支,發佈分支等等)和幾個管理人員。但在任何情況下,都沒有全局鎖,也不需要維護與主存儲庫的連接。

使用Git了很好的發展過程中Git Flow描述。

相關問題