300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 同步fork的上游仓库代码更新:git pull upstream

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

时间:2023-10-14 18:02:51

相关推荐

同步fork的上游仓库代码更新: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@/tomcat/fastjson.gitgit pull // 默认是 git pull origin master,从bannidaer/fastjson的master分支拉代码git pull upstream master // 从上游alibaba/fastjson的master分支拉代码

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 repositoryfatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists.

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

origin ssh://git@/tomcat/fastjson.git (fetch)

解决方案:

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

% git remote add upstream ssh://git@/alibaba/fastjson.gitorigin ssh://git@/tomcat/fastjson.git (fetch) // 自己仓库的origin源项目origin ssh://git@/tomcat/fastjson.git (push)upstream ssh://git@/alibaba/fastjson.git (fetch)// 外部上游仓库的项目upstream ssh://git@/alibaba/fastjson.git (push)

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

% git pull upstream masterremote: 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 0Unpacking objects: 100% (3/3), 764 bytes | 76.00 KiB/s, done.From ssh://git@/alibaba/fastjson* branch master-> FETCH_HEAD* [new branch]master-> upstream/masterUpdating xxxxxxFast-forward

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

参考

Git:Origin和upstream的区别

‘git pull upstream master‘遇到的问题

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。