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

Mar*_*her 10 git

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

偶尔,由于A中有变化,我需要能够将它们拉下来并将它们合并到B的x_master中(如果我理解这一点,那么它应该是快进的,因为它们将是x_master分支上的唯一变化. B),然后能够将这些变化合并到B的主人身上,从而在他们拉动时克隆B的主人.

我在概念上想要的是:

master      x_master
 [A] <---------> [B] <-------> [Dev2]
                  ^-------> [Dev1]
                  master
Run Code Online (Sandbox Code Playgroud)

最终我需要在完成所有开发时将B的主控器中的更改推送到A的主控器,但是A中的更改将需要合并到B中

  • 我该如何设置?
  • 如何从A推进和拉出A?
  • 这个设置有意义吗?

我已经尝试了各种克隆 - 镜像,分支 - 轨道,并且似乎没有得到正确推送和拉动的A和B的变化.

vha*_*lac 8

我确信它有一个快捷方式,但我倾向于使用基本命令.在任何情况下,设置存储库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
Run Code Online (Sandbox Code Playgroud)

修改上游存储库时,需要在裸存储库1中提取这些更改:

$ git fetch upstream +master:refs/heads/x_master
Run Code Online (Sandbox Code Playgroud)

这将覆盖2中任何可能的更改x_master,因此您最好单独留下该分支.:)

您将希望将上游更改合并x_mastermaster/如果A更改时.不幸的是,在这个阶段可能存在冲突,因此必须使用我们裸存储库的克隆来完成.简单地克隆在B库(本地或远程位置),并合并x_mastermaster,解决冲突,并推回.

最后的任务是将开发推进master到存储库A.这可以通过两种方式完成.第一种方法是直接将B的主服务器推送到存储库A.这可以通过运行:

$ git push upstream
Run Code Online (Sandbox Code Playgroud)

上储存库B.一种替代方法是从一种更可控的合并masterx_master使用第三存储库:

$ 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
Run Code Online (Sandbox Code Playgroud)

注1

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

$ git configure branch.upstream.fetch +master:refs/heads/x_master
Run Code Online (Sandbox Code Playgroud)

而且--add,您甚至可以添加更多分支来获取:

$ git configure --add branch.upstream.fetch +branch_1_0:refs/heads/x_branch_1_0
Run Code Online (Sandbox Code Playgroud)

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

$ git fetch upstream
Run Code Online (Sandbox Code Playgroud)

笔记2

为了防止推送到masterrepo_B,你可以使用服务器端的吊钩pre-receiveupdate.