当前位置:   article > 正文

同步fork的上游仓库代码更新:git pull upstream

git pull upstream

git pull upstream同步上游更新

在使用git管理项目的时候,不管是gitlab还是github项目,都可以通过fork将上游仓库的项目复制到自己仓库中,但是上游的仓库变更时,怎么同步更新自己仓库里的变化呢?

一般有两种方式,一种方式是将上游的仓库提merge request到自己的仓库去合并;另一种方式是每次在修改自己仓库复制的项目之前,先通过git pull upstream master去同步上游项目的更新。

git pull origin与git pull upstream区别

git pull origin是拉取自己或团队项目的更新到本地;git pull upstream是拉取fork的外部上游项目的更新到本地自己仓库中的项目中。

git pull origin

origin指的是源仓库,一般为git clone的仓库,如xxx/fastjson,是克隆后默认提交和拉取的仓库地址。

git pull upstream

upstream意指上游仓库,一般是fork 出的上游仓库,如alibaba/fastjson。

fork操作

无论是github还是gitlab都有fork操作,该操作相当于把外部的仓库里面的项目复制到自己仓库下。例如,对alibaba/fastjson项目进行fork,会在自己仓库出现tomcat/fastjson项目,这里的tomcat代指自己github或gitlab的用户名。

git clone ssh://git@github.com/tomcat/fastjson.git
git pull // 默认是 git pull origin master,从bannidaer/fastjson的master分支拉代码
git pull upstream master // 从上游alibaba/fastjson的master分支拉代码
  • 1
  • 2
  • 3

git pull upstream遇到 ‘upstream’ does not appear to be a git repository问题

在进行本地fork出的项目修改之前,想要先同步上游的更新,于是进行git pull upstream操作,出现如下问题:

fatal: 'upstream' does not appear to be a git repository
fatal: Could not read from remote repository.
 
Please make sure you have the correct access rights and the repository exists.
  • 1
  • 2
  • 3
  • 4

通过 git remote -v 检查,发现错误原因是 upstream repository 的地址是 ssh协议,而不是 https,并且没有指定upstream上游仓库地址而是自己origin的tomcat仓库。

origin  ssh://git@github.com/tomcat/fastjson.git (fetch)
  • 1

解决方案:

如果想要使用https协议的仓库地址,可以利用 git remote remove upstream ssh://…仓库地址 的方式移除掉原来的 upstream repository,再 git remote add upstream https://… 添加上新的地址。

% git remote add upstream ssh://git@github.com/alibaba/fastjson.git
origin  ssh://git@github.com/tomcat/fastjson.git (fetch)             // 自己仓库的origin源项目
origin  ssh://git@github.com/tomcat/fastjson.git (push)
upstream        ssh://git@github.com/alibaba/fastjson.git (fetch)     // 外部上游仓库的项目
upstream        ssh://git@github.com/alibaba/fastjson.git (push)
  • 1
  • 2
  • 3
  • 4
  • 5

添加完上游仓库地址后,再次执行git pull upstream命令如下:

% git pull upstream master
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 764 bytes | 76.00 KiB/s, done.
From ssh://git@github.com/alibaba/fastjson
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master
Updating xxxxxx
Fast-forward
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

由于之前配置了GOPRIVATE,项目中引用私有仓库的项目,就将之前https协议拉取代码的方式改成了ssh方式,这里指定ssh协议的上游仓库地址,如果你使用的是https协议可以指定https协议的上游仓库。

参考

Git:Origin和upstream的区别
‘git pull upstream master‘遇到的问题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/797462
推荐阅读
相关标签
  

闽ICP备14008679号