intellij idea 连接多个git远程主分支

将代码关联到多个远程主分支的方法

有这样一个场景,公司的版本库不能用了,或者迁移了,或者换新地址了,那现有的代码怎么传到新的版本库上?

主要步骤:

  • 添加新的仓库地址A
  • 根据新的仓库地址A创建A仓库的本地分支a
  • 将属于新仓库A的本地分支a与已有的本地分支b进行合并
  • 将与本地分支b进行合并之后的本地分支a的代码push到新的仓库A
  • 结束

 

那为了模拟一下这个场景,就使用github的仓库来试试吧。

本文内容不多,大部分是图片,所以看上去好像很多的样子,其实不然。

第一步,在github上创建一个仓库,命名为alain

此时该仓库为空仓库,创建该仓库作为第一个仓库,即初始仓库,后续的过程中还会有第二个或第三个仓库,第二个或第三个仓库用来模拟迁移后的新仓库地址,然后在本地电脑上将空仓库clone到本地的文件夹,并命名为alain

15deb9c0d38b56fe6f604593f63c2cb0b0c.jpg

最后一个参数 alain 为clone 到本地的文件夹的名称,可以根据实际情况来命名。

第二步,添加工程代码到版本库

将具体的代码复制到该文件夹中,并提交到github的版本库,这一步较为简单,就不做解释了。

本次演示使用的是ng-alain的前端框架,为什么使用ng-alain呢,因为ng-alain是一个非常优秀的前端框架,用它来模拟前段工程中已经写好的代码非常方便,而且能直接运行。

了解ng-alain

第三步,代码迁移

这一步开始模拟将已有代码迁移到新的仓库地址。

新建远程仓库地址,命名为alain_new,并将仓库地址添加到git中,我接下来的操作都在intellij idea 的图形化界面上执行,当然也可以使用git 的命令行,效果一样的

2ba158cdbeb43455e25b2526677820c1e5b.jpg

添加一个地址

0e53963ac6e30aa4c1dbe3a10967dfa8588.jpg

然后执行 PULL

1db3fbe09c4eede39f4e78372bcdf12b934.jpg

选中新建的仓库地址,点击右侧的刷新按钮,然后选中刷新之后出现的branches to merge 输入框中的选项,执行pull

3b0db43ddd76b131884cf60c51d529a536a.jpg

执行PULL会失败,给出提示

0dd7d4ac0cbc1f285ab4d95b662e6605194.jpg

这个是正常的,因为执行PULL是要将远程仓库分支的代码与本地分支进行merge,由于本地仓库分支代码并不属于该远程仓库,所以会失败。

这一步PULL是必要的,因为需要通过PULL操作获取到新添加的远程仓库中的所有分支,获取到之后在idea的右下角就会刷新出现新的远程仓库地址。

 

新建alain_new/origin 远程仓库的本地分支,命名为a_n_master

7d66c77969437e912e1cb751c3885324360.jpg

创建本地分支a_n_master之后,会发现在本地分支a_n_master下是没有内容的,这个是正常的,因为一个远程分支对应一个本地分支,新的远程仓库alain_new本身是没有内容的,所以它对应的本地分支也是没有内容

6fdd0b9e9cd846558f24e7ed2a4b60b5fe9.jpg

切换到本地分支master之后就能看到内容了

16410e4ecf18d60e8ab89f3afdc0aadc8e2.jpg

小提示:如何切换本地分支?

比如,当前处于master 本地分支

0c6b29a1637f4a509be54f4338aad2deeb2.jpg

切换到 a_n_master 本地分支,选择checkout 即可

74e3842ac6fd27cb9befbd496395a44f7e1.jpg

出现提示关掉即可

7884830753a658fadf8c7bb286b9eae6193.jpg

这样就切换成功了

a4e37a4ffd06cf18dae11f528314af187a0.jpg

接下来要把代码都push到新的远程仓库alain_new中,但是远程仓库alain_new 对应的本地分支a_n_master是没有内容的,那该如何把本地分支master的代码复制到本地分支a_n_master中呢?

为什么不能直接将本地分支master 的代码push到新的仓库地址alain_new中呢?

我的理解是,由于远程分支与本地分支存在一一对应关系,所以其他远程地址的本地分支并没有除了自己对应的远程仓库之外的其它仓库地址的元信息,所以这样push会失败的(即使知道仓库地址)。比如,远程仓库A 对应的本地分支为a,远程仓库B对应的本地分支为b,本地分支b在push代码的时候就只能选择push到B,而不能push到A,因为b中没有A仓库的元信息。

那该如何操作呢? ------ 执行merge操作

由于需要执行merge的两个本地分支并不属于同一个远程仓库,所以需要加上 --allow-unrelated-histories 这个参数,idea上我没有找到执行这个参数的选项,所以只能用命令行了

8b11628c771f4bf29485eb6427299785c28.jpg

此时是在a_n_master分支下执行的merge操作,意思是,本地分支a_n_master与本地分支master进行合并,合并之后两个本地分支的代码就是一样的了,然后执行push操作

5e10c7c9168088018ee0f7000ee28b24507.jpg

push 成功之后,alain_new 仓库中就有了最新的代码,这样远程仓库alain和alain_new的代码就保持一致了,如此便完成了将代码从旧的仓库地址迁移到新的仓库地址的操作。

此时有两个本地分支,分别是:a_n_master和master,由于代码是一样的,可以删掉一个本地分支,避免以后搞混淆了。

需要注意的是,上述示例是在 a_n_master 分支的基础上合并master分支,所以此时master分支上不会有a_n_master分支上的内容,如果需要将两个分支保持一致,那还需要切换到master的本地分支上,再次执行merge 操作,如此:

***这两个本地分支的代码内容才是一致的,保留任意一个本地分支都可以向两个远程仓库提交更新***

我的理解是因为在执行完merge之后,分支就交换了相互的远程仓库元信息,所以可以既向alain仓库push代码,又可以向alain_new仓库push代码。

如何在push代码时切换远程仓库地址?如下图所示

1fc00eda96fa3592edc1381a22ce79505aa.jpg

需要注意的地方是:

  • 如果代码有更新,且需要所有的远程仓库代码保持一致,那就需要将更新的代码push到所有的远程仓库

至此,整个代码从已有的远程仓库迁移到新的远程仓库的操作就完成了。

如果还需要将代码迁移到其它的远程仓库,那按照这个步骤来做是没有问题的。

有什么疑问或者写的有错的地方可以在评论区留言一起讨论。

另:

d84b8ba50e620bca666c0a522b51fab5a38.jpg

根据查询到的资料来说,这个远程分支和本地分支前面的星星并没有实际作用,它的作用类似于标注,已标注的分支会展现在靠上的位置,而未标注的分支会展示在靠下的位置,也许在分支比较多的时候比较实用

转载于:https://my.oschina.net/u/4118973/blog/3038806

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页