git同项目关联多仓库

场景

平时在使用git时会遇到同一个项目需要推送多个远程仓库的情况。比如:

  1. 公司项目对外接口调用样例代码,是存放在公司的git仓库,但需要推送至github给外面客户使用。
  2. 使用github开源项目时,有时需要对代码进行自定义修改(暂且称为『自有项目』),同时需要能定期合并开源项目的最新特性至『自有项目』。

以上这两种就属于同个git项目需要多个远程仓库的典型,解决的方法有多种。

方案1

1.1 前提

  • 假设样例代码项目self-xxx,同时本地git环境也按正常流程从自有仓库aaa.com:bbb拉取了self-xxx
  • github上已建好新项目self-xxx,地址为git@github.com:xxx/self-xxx.git

1.2 步骤

$:git remote -v 
origin  git@aaa.com:bbb/self-xxx.git (fetch)
origin  git@aaa.com:bbb/self-xxx.git (push)
  • 说明orgin对应的远程会仓库地址是bbb,然后添加org(随便定)对应到github仓库
git remote add org git@github.com:xxx/self-xxx.git
  • 查看远程分支信息
$:git remote -v 
org  git@github.com:xxx/self-xxx.git (fetch)
org  git@github.com:xxx/self-xxx.git (push)
origin  git@aaa.com:bbb/self-xxx.git (fetch)
origin  git@aaa.com:bbb/self-xxx.git (push)
  • 针对不同分支进行拉取
git pull origin master
git pull org master
  • 每次修改完origin的代码提交后,将origin master合并到org master即可,理论上是不会有冲突的,因为org master是不应该有代码修改操作。
git merge origin/master
git push org master

方案2

2.1 前提

alibaba sentinel项目为例,假设自有仓库已经建好项目self-sentinel,同时本地git环境也按正常流程拉取了self-sentinel

2.2 步骤

$:git remote -v 
origin  git@github.com:freshines/self-sentinel.git (fetch)
origin  git@github.com:freshines/self-sentinel.git (push)
  • 说明orgin对应的远程会仓库地址是freshines,然后添加alibaba对应到sentinel官方仓库
git remote add alibaba git@github.com:alibaba/Sentinel.git
  • 查看远程分支信息
$:git remote -v 
alibaba  git@github.com:alibaba/Sentinel.git (fetch)
alibaba  git@github.com:alibaba/Sentinel.git (push)
origin  git@github.com:freshines/self-sentinel.git (fetch)
origin  git@github.com:freshines/self-sentinel.git (push)
  • 针对不同分支进行拉取/推送
git pull origin master
git pull alibaba master

git push origin master
git push alibaba master

2.3 官方新特性合并

拉取官方仓库最新代码至本地,此时本地即有官方分支、也有『自有项目』分支,针对不同情况可以使用merge/rebase/cherry pick等方式进行新特性的合并。

2.4 官方代码保留至自有仓库

上述操作在自有仓库只有『自有项目』的远程分支,没有官方的分支。因此如果另外一人拉取『自有项目』,只能看到『自有项目』代码。所以有时也需要将官方的代码 也存至『自有项目』,方便对比查看。此时可在自有项目』里新建一个分支,每次将alibab/amaster的代码合并或者rebase至该分支即可。

# git 

评论

test : test
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×