- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想创建一个存储库 [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
我已经尝试了各种克隆 --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 上。另一种方法是使用第三个存储库从 master
到 x_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
为了完成,您可以将远程配置为默认仅获取该分支:
$ 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
要防止推送到 repo_B
的 master
,您可以使用 server-side hook像 pre-receive
或 update
。
关于git - 如何在 git 中设置暂存存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7840861/
我是一名优秀的程序员,十分优秀!