2011-12-13 142 views
7

我遵循描述的工作流程here,因爲我發現許多指向此頁面的引用都是一個很好的工作流程。正如文章中提到的,「功能」分支是由開發人員共享的,但不要去中央存儲庫。如何與多個開發人員共享git功能(或主題)分支

比方說,開發者「A」啓動一個新的功能分支git checkout -b newfeature develop。現在讓我們說開發者「B」也需要處理這個功能。這是我的問題。

我所做的:

  1. 開發商「B」,增加了發展商的機器用作遠程
  2. 開發商「B」運行git branch remoteA/newfeature
  3. 開發商「B」工作在這個分支,提交他的工作和將更改推回到remoteA。

第3步現在不工作。我收到一條消息:

remote: error: By default, updating the current branch in a non-bare repository is denied, because it will make the index and work tree inconsistent with what you pushed, and will require 'git reset --hard' to match the work tree to HEAD.

remote: error: You can set 'receive.denyCurrentBranch' configuration variable to 'ignore' or 'warn' in the remote repository to allow pushing into its current branch; however, this is not recommended unless you arranged to update its work tree to match what you pushed in some other way.

remote: error: To squelch this message and still keep the default behaviour, set receive.denyCurrentBranch' configuration variable to 'refuse'.

我已經設置了sharedRepository = true,但它沒有幫助。

我有2個問題:

  1. 什麼對開發者之間共享功能分支的正確方法是什麼?
  2. 如何將開發者B的存儲庫中的更改推回到開發者A的原始版本?
+1

和:我建議對非裸存儲庫之間推動的變化,因爲它只是介紹你不想的問題要:) :) – Tigraine 2011-12-14 12:29:16

回答

5

您可以推送到非裸回購。你不能做的是推到一個非裸露的回購,有你正在推出檢查分支。這是有道理的。更改其他人正在處理的文件可能不正確。

通常情況下,您需要推送到主人或其他普通共享分支。爲了避免這種衝突,遠程非裸回購的所有者應該在本地分支或至少某個其他分支上工作。然後你可以推送到共享分支。

要使用你的例子:

  1. 開發商 「B」,增加了發展商的機器用作遠程
  2. 開發商 「B」 運行git branch remoteA/newfeature
    1. 開發上的本地分支 「A」 不工作。 git checkout -b work-newfeature
  3. 開發人員「B」在此分支上工作,提交他的工作並將更改推回remoteA。
    1. 開發「A」變基來獲得新的工作:再次git rebase newfeature
7

共享功能分支的最簡單方法是將它們簡單地推送到中央存儲庫,以便任何人都可以從中央存儲庫中取出。這樣,您可以簡單地使用您已經擁有的用於主存儲庫的基礎架構,並且可以輕鬆共享代碼。

一旦遙控器上的一個特性分支不再需要您可以通過簡單地刪除它

git push <server> :branch 

我建議對開發人員計算機之間直接共享,因爲這是容易出現的問題,如用戶正對不同的網絡(不相互連接)。

如果可能的話,還可以在服務器上有一箇中央存儲庫(即主要存儲庫)的情況下使用GitHub模型。 除了主存儲庫之外,每個開發人員都擁有該存儲庫的「分支」,他擁有完整的提交訪問權限,並且可以將分支推送到他喜歡的位置。

在這種情況下,您可以將同事的叉子作爲遙控器添加到您的存儲庫,同時保持對一臺集中服務器的輕鬆訪問(節省您在每臺機器上設置SSH密鑰的麻煩等)。

在GitHub的模型描述可以在這裏找到: http://www.eqqon.com/index.php/Collaborative_Github_Workflow

更新:作爲評註者指出,這是開始使用集中式功能分支流程一個很好的鏈接:http://nvie.com/posts/a-successful-git-branching-model/

UPDATE2:要擴大你的第二個問題:

你所試圖做的是推到另一家開發商的非純倉庫。 Git在一些以前的版本(我認爲1.6左右)中引入了裸倉庫的概念 - 這是一個存儲庫,它有沒有檢出狀態,但只包含通常進入.git的數據庫。

這種變化背後的原因是,無論何時你推送給你的同事倉庫(他目前正在做某件事情) - 你正在操縱倉庫。因此,他檢查出版本特徵A-1 ..開始工作..然後您將featureA-2推入他的回購庫,並且當他想提交時,他遇到了麻煩,因爲他所在的分支已經通過一次未提交的提交發展。

因爲這是相當大的破壞性 - 大多數人都採用本地的Git倉庫的概念(那些積極地將做的工作)應私人,而你有一個公共的git回購(該),其中您收到並分享更改。這樣,在工作中,任何人都不會打斷你的工作(這就是分散模型背後的全部理念),只能整合你想要的改變。 (沒有人可以推動你目前的工作)。

+0

以下是組織中央存儲庫方法的一種方法:http:// nvie。com/posts/a-successful-git-branching-model/ – tback 2011-12-13 21:34:24

相關問題