gpt4 book ai didi

git - 如何在 git 中设置暂存存储库?

转载 作者:太空狗 更新时间:2023-10-29 12:47:04 26 4
gpt4 key购买 nike

我想创建一个存储库 [B],它在名为 x_master 的分支中跟踪远程存储库的主 [A]。它自己的 master 在初始创建时也应该是一个克隆,其他 [Devs] 可以克隆并将更改推送到其中。

偶尔,因为 A 中有变化,我需要能够将它们 pull 下来并将它们 merge 到 B 的 x_master 中(如果我理解这一点,这应该是一个快进,因为它们将是唯一的变化x_master B 上的分支),然后能够将这些更改 merge 到 B 的 master 中,从而在他们 pull 时 merge 到克隆 B 的 master 的任何人。

我在概念上想要的是:

master      x_master
[A] <---------> [B] <-------> [Dev2]
^-------> [Dev1]
master

最终,当所有开发完成后,我需要将 B 的 master 中的更改推送到 A 的 master,但是 A 中正在进行的更改需要 merge 到 B

  • 我该如何设置?
  • 如何从 B push 和 pull 出 A?
  • 这个设置有意义吗?

我已经尝试了各种克隆 --mirror、branch --track,但似乎没有正确地获得 A 和 B 推 pull 的变化。

最佳答案

我确信它有快捷方式,但我倾向于只使用基本命令。在任何情况下,为 B 设置存储库:

$ cd repo_B
$ git init --bare
$ git remote add upstream URL_FOR_REPO_A
$ git fetch upstream +master:refs/heads/x_master
$ git branch master x_master

当上游仓库被修改时,您需要将这些更改 pull 入裸仓库1:

$ git fetch upstream +master:refs/heads/x_master

这将覆盖2 x_master 中的任何可能更改,因此您最好不要管那个分支。 :)

当/如果 A 更改时,您将希望将 x_master 中的上游更改 merge 到 master 中。不幸的是,在此阶段可能会发生冲突,因此必须使用我们的裸存储库的克隆来完成。只需克隆 B 存储库(到本地或远程位置),并将 x_master merge 到 master 中,解决冲突,然后推回。

最后的任务是将在 master 中完成的开发推送到存储库 A。这可以通过两种方式完成。第一种是直接将 B 的 master 推送到存储库 A。这可以通过运行来完成:

$ git push upstream

在存储库 B 上。另一种方法是使用第三个存储库从 masterx_master 进行更可控的 merge :

$ git clone URL_FOR_REPO_A
$ cd repoDir
$ git remote add dev URL_FOR_REPO_B
$ git fetch dev
$ git branch --track master_b dev/master
$ git merge master_b
$ <resolve conflicts, if any>
$ git push origin master

注1

为了完成,您可以将远程配置为默认仅获取该分支:

$ git configure branch.upstream.fetch +master:refs/heads/x_master

使用--add,你甚至可以添加更多的分支来获取:

$ git configure --add branch.upstream.fetch +branch_1_0:refs/heads/x_branch_1_0

现在,fetch 将在没有 refspecs 的情况下正常工作:

$ git fetch upstream

注2

要防止推送到 repo_Bmaster,您可以使用 server-side hookpre-receiveupdate

关于git - 如何在 git 中设置暂存存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7840861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com