2011-11-02 50 views
8

合併分支我想創建以下設置爲我的git回購協議:蠢貨,純倉庫

目前,我有我的所有工作文件的本地混帳回購協議。我希望能夠設置一箇中央裸存儲庫和另外兩個非裸存儲庫 - 一個用於實時應用程序,另一個用於測試版本。

我希望能夠在測試分支上將本地變更推送到中央裸回購。然後,在我的測試回購中,總是從裸倉庫的測試分支中取出。

準備好接受更改時,我希望能夠將測試分支和主分支合併到中央裸倉庫中。然後,現場回購可以從主分支拉。

所以在這個方案中,測試repo總是會從測試分支中拉出來的,而實時repo會一直從master分支拉出來。

我想不出如何在裸倉庫中合併分支。沒有工作樹,git-merge和git-checkout似乎不起作用。

所以,我的問題是雙重的:

  1. 是否有裸露的回購協議,以合併分支的標準方式?
  2. 這是不是直截了當,因爲我的回購設置是不好的? (在這種情況下,你會如何修改這個架構的最佳實踐?)
+0

這正是我所在的地方,您描述的場景是最常見的場景。 –

回答

10

git checkout檢查出一個分支到工作樹 - 你怎麼看待這個應該沒有工作樹工作?並且git merge和大多數其他命令不起作用,因爲裸倉庫中沒有HEAD。

要回答您的問題:您不在裸倉庫中工作。裸倉庫僅用於保存數據;如果你想使用它,使用一個不是光禿的克隆。

因此,從任何其他存儲庫中,您從裸存儲庫中取出,在本地合併,並將更改推回給它。你應該從你的開發資源庫中做到這一點。因此實時和測試版本庫僅從其分支中提取。

+0

謝謝!我將在本地回購中進行合併。 – user480029

2

您必須首先從裸倉庫克隆,合併您的分支,然後再次推入裸倉庫。因爲你沒有裸倉庫中的任何工作樹來解決衝突。

8

請注意,這實際上可以在裸露的回購庫上完成,但您必須解決常規接口問題。

$ git read-tree -i -m branch1 branch2 
$ COMMIT=$(git commit-tree $(git write-tree) -p branch1 -p branch2 < commit message) 
$ git update-ref mergedbranch $COMMIT