14

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

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

我希望能够将更改从本地推送到测试分支上的中央裸仓库。然后,在我的测试存储库中,始终从裸存储库的测试分支中提取。

当准备好进行更改时,我希望能够将我的测试分支和我的主分支合并到中央裸存储库中。然后实时 repo 可以从 master 分支中提取。

所以在这个方案中,testing repo 总是从 testing 分支拉取,live repo 总是从 master 分支拉取。

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

所以,我的问题有两个:

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

3 回答 3

18

请注意,这实际上可以在裸仓库上完成,但您必须围绕正常界面工作。

$ 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
于 2016-03-07T14:18:54.547 回答
14

git checkout检查工作树中的一个分支——你认为没有工作树应该如何工作?而且git merge大多数其他命令都不起作用,因为裸存储库中没有 HEAD。

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

因此,从任何其他存储库中,您从裸存储库中提取,在本地合并并将您的更改推回它。顺便说一句,您应该从您的开发存储库中执行此操作。以便实时和测试存储库仅从其分支中提取。

于 2011-11-02T17:56:52.443 回答
2

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

于 2012-05-14T08:10:49.450 回答