我确信有一个快捷方式,但我倾向于只使用基本命令。无论如何,设置存储库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
When upstream repository is modified, you need to pull those changes in on the bare repository1:
$ git fetch upstream +master:refs/heads/x_master
This will overwrite2 any possible changes in x_master
, so you'd better leave that branch alone. :)
您将需要合并上游更改x_master
into master
当/如果 A 改变时。不幸的是,此阶段可能会出现冲突,因此必须通过我们的裸存储库的克隆来完成。只需克隆 B 存储库(到本地或远程位置),然后合并x_master
into master
,解决冲突,并反击。
最终任务是推动开发完成master
到存储库 A。这可以通过两种方式完成。第一种是直接将 B 的 master 推送到存储库 A。这可以通过运行以下命令来完成:
$ git push upstream
在存储库 B 上。另一种选择是更受控制的合并master
to x_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
Note 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
现在,在没有 refspecs 的情况下 fetch 也能正常工作:
$ git fetch upstream
Note 2
为了防止推master
of repo_B
,你可以使用服务器端钩子 like pre-receive
or update
.