git在一个裸存储库中合并分支

时间:2011-11-02 17:51:50

标签: git merge git-bare

我想为我的git repos创建以下设置:

我目前有一个包含所有工作文件的本地git仓库。我希望能够设置一个中央裸存储库和另外两个非裸存储库 - 一个用于实时应用程序,另一个用于测试版本。

我希望能够在测试分支上将更改从本地更改为中央裸仓库。然后,在我的测试存储库中,总是从裸存储库的测试分支拉出来。

当准备好接受更改时,我希望能够将我的测试分支和我的主分支合并到中央裸存储库中。然后现场回购可以从主分支拉出来。

所以在这个方案中,测试repo将始终从测试分支中获取,而实时repo将始终从主分支中提取。

我无法弄清楚如何在裸存储库中合并分支。如果没有工作树,git-merge和git-checkout似乎不起作用。

所以,我的问题是双重的:

  1. 是否有标准方法在裸仓库中合并分支?
  2. 这不是直截了当的,因为我的回购设置很差吗? (在这种情况下,您将如何修改此体系结构以获得最佳实践?)

3 个答案:

答案 0 :(得分:13)

注意,这实际上可以在一个裸仓库上完成,但你必须解决正常的界面。

$ 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

答案 1 :(得分:10)

git checkout检查一个分支进入工作树 - 你认为如果没有工作树,这应该有效吗?并且git merge和大多数其他命令不起作用,因为裸存储库中没有HEAD。

回答你的问题:你不在裸存储库中工作。裸存储库只用于保存数据;如果你想使用它,请使用非裸的克隆。

因此,从任何其他存储库中,您从裸存储库中提取,在本地合并并将更改推送回它。您应该从开发库btw执行此操作。这样实时和测试存储库只能从它们的分支中拉出来。

答案 2 :(得分:2)

您必须首先从裸存储库克隆,合并您的分支,然后再次推送到裸存储库。因为您在裸存储库上没有任何工作树来解决冲突。