技术背景

在Git的操作过程中,一般的组织内部工作模式可以在同一个仓库上的master-develop-feature不同分支上进行开发,也有一些人和外部协作者会通过Fork到自己本地的仓库进行更新的方案。但是对于Fork仓库的更新有一个问题是,如果长期在自己本地更新,有可能会逐渐脱离原始的分支,甚至会产生众多的冲突。那么为了避免在开发过程中遇到众多的冲突,建议大家在开发的过程中定期从远程的原始仓库同步过来。本文要探讨的是,如何跟远程的上游仓库进行同步。

方法一:强制拉取

第一种方法非常的简单粗暴,其实不建议使用,但是如果确实嫌麻烦的人,可以点击下图中的圈圈按钮,直接从原始仓库强制拉取。

之所以不推荐这种方法,是因为在远程拉取的过程中有可能出现冲突,但是因为采取了强制性拉取的策略,所以实际上本地开发的一些内容有可能会在拉取的过程中被覆盖。

方法二:创建远程同步

以下详细介绍下远程仓库同步的方法。首先我们从远程clone一个我们自己Fork的仓库到本地来:

$ git clone https://gitee.com/dechin/mindsponge.git
正克隆到 'mindsponge'...
Username for 'https://gitee.com': dechin
Password for 'https://dechin@gitee.com':
remote: Enumerating objects: 7869, done.
remote: Counting objects: 100% (7869/7869), done.
remote: Compressing objects: 100% (2198/2198), done.
remote: Total 7869 (delta 5653), reused 7869 (delta 5653), pack-reused 0
接收对象中: 100% (7869/7869), 34.72 MiB | 1.15 MiB/s, 完成.
处理 delta 中: 100% (5653/5653), 完成.

进入本地目录,查看远程链接:

$ cd mindsponge/
$ git remote -v
origin https://gitee.com/dechin/mindsponge.git (fetch)
origin https://gitee.com/dechin/mindsponge.git (push)

可以看到,此时只跟自己Fork的两个仓库有链接,也就是只能pull或者push到origin的这个仓库上面。然后可以使用git remote add的方法添加原始仓库的链接:

$ git remote add -t develop remote https://gitee.com/helloyesterday/mindsponge.git

上一步的操作中我们甚至可以使用-t来配置与远程仓库构建链接的指定分支。此时我们再次查看远程链接:

$ git remote -v
origin https://gitee.com/dechin/mindsponge.git (fetch)
origin https://gitee.com/dechin/mindsponge.git (push)
remote https://gitee.com/helloyesterday/mindsponge.git (fetch)
remote https://gitee.com/helloyesterday/mindsponge.git (push)

我们发现多了两个名为remote的链接,这个就是我们Fork来的原始仓库。当然,要构建这种远程的链接,需要拥有远程仓库的相关操作权限,如push和fetch等。完成上述操作后,如果我们在本地执行了一些更新,并且已经addcommit过了,那么我们就可以向远程仓库进行push:

$ git push origin develop
$ git push remote develop

只要有权限,就两边都可以pull和push。这样一来,我们在本地开发了一定的时间之后,也可以从remote上pull下来最新的代码,在本地解决好相关的冲突之后,push到自己Fork的分支。最后在完成特性的开发之后,再提交一个Pull Request到远程remote的分支上,这样是一个比较合理的Git操作。

总结概要

通常来说,一个Git仓库由内部组织者和外部协作者共同维护。对于内部开发者而言,他们可以通过master-develop-feature模型进行代码开发,在仓库中创建相应的特性分支和开发分支,最后再合入到主分支供大家使用。而对于外部开发者而言,最好的方式是Fork一个仓库到自己本地,然后使用本文介绍的方法二去定期跟远程remote仓库进行同步,避免在长时间的开发周期中遇到一些冲突。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/git-remote.html

作者ID:DechinPhy

更多原著文章请参考:https://www.cnblogs.com/dechinphy/

打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958

CSDN同步链接:https://blog.csdn.net/baidu_37157624?spm=1008.2028.3001.5343

51CTO同步链接:https://blog.51cto.com/u_15561675

Git链接上游仓库的更多相关文章

  1. git链接github仓库

    配置Git 我们先在电脑硬盘里找一块地方存放本地仓库,比如我们把本地仓库建立在C:\MyRepository\1ke_test文件夹下 进入1ke_test文件夹 鼠标右键操作如下步骤: 1)在本地仓 ...

  2. Git remote 远程仓库链接管理

    SVN 使用单个集中仓库作为开发人员的通信枢纽,通过在开发人员的工作副本和中央仓库之间传递变更集来进行协作. 这与 Git 的分布式协作模型不同,后者为每个开发人员提供了自己的仓库副本,并具有自己的本 ...

  3. git的介绍、git的功能特性、git工作流程、git 过滤文件、git多分支管理、远程仓库、把路飞项目传到远程仓库(非空的)、ssh链接远程仓库,协同开发

    Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. [1] 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码 ...

  4. Git同步原始仓库到Fork仓库中

    前言 本文介绍的是Git同步原始仓库到Fork仓库示例教程,废话不多说,下面直接到实操部分. 这里以aspnetcore-doc-cn的github仓库为例,同步dev分支. 步骤 1.初始化本地仓库 ...

  5. 如何清洗 Git Repo 代码仓库

    git prune 如何清洗 Git Repo 代码仓库       在腾讯云上创建您的SQL Cluster>>> »   相信不少团队的代码仓库 Git Repo 变得越来越大. ...

  6. 个人git链接和git学习心得总结

    个人git链接和git学习心得总结 个人git链接: https://github.com/hanzhaoyan Git 是 Linux 的创始人 Linus Torvalds 开发的开源和免费的版本 ...

  7. [转]git修改远程仓库地址

    原文链接:http://www.cnblogs.com/lazb/articles/5597878.html 问:Coding远程仓库地址变了,本地git仓库地址如何更新为最新地址 git修改远程仓库 ...

  8. git从远程仓库拉取内容或向远程仓库上传内容

    一.将本地文件上传到远程仓库步骤 git init git add . git commit -m "初始框架" git remote add origin https://git ...

  9. 【Git】Git初始化一个仓库

    文章目录 初始化仓库 检查当前文件状态 跟踪新文件 提交更新 跳过使用暂存区域 移除文件 添加远程仓库 推送到远程仓库 简单记录-慕课网 从0开始 独立完成企业级Java电商网站开发 Git初始化一个 ...

  10. Git管理远程仓库

    一:使用远程仓库的目的 作用:备份,实现代码共享集中化管理: 二:将git本地仓库同步到远程仓库流程图 三:Git克隆操作 目的: 将远程仓库(github远程仓库项目代码)克隆到本地 如何克隆 1. ...

随机推荐

  1. 常用的CSS效果(1)

    单行省略 overflow: hidden; text-overflow: ellipsis; white-space: nowrap; 多行省略 display:-webkit-box; overf ...

  2. python 项目启动

    批量执行requirements.txt文件: pip install -r requirements.txt 清华镜像源安装: pip install -i https://pypi.tuna.ts ...

  3. visio任意图形填充

    开发工具->操作->修剪->按住Shift键点击填充图形所有边 同时选中后->组合->开发工具->操作->连接 回到开始选项卡选择填充颜色 中途不要点击其他, ...

  4. javascript原型,继承

    //普通对象 //函数对象(有原型 prototy 的属性) //原型的应用 继承 function Amial(){ this.type = '小于' } function cat(name){ t ...

  5. MacOS 使用UnblockNeteaseMusic解锁网易云灰色歌曲(主要是想听杰伦)

    最近想听杰伦的音乐 但是网易云木有版权 于是在github上找到了UnblockNeteaseMusic这个项目 不多废话 直接上教程! 第一步 找到该项目的地址 并使用git克隆到本地: https ...

  6. Javaheima20

    Java 学习内容 单元测试 反射 注解 动态代理 开发好的系统中存在很多的方法,如和对这些方法的正确性进行测试 如何在程序运行时取得到Class对象,然后取获得Class中的每个成分 注解是什么,具 ...

  7. CentOS DNS 安裝步驟

    yum install bind bind-utils bind-devel bind-chroot [root@nw-centos-dns-01 ~]# rpm -qa | grep bind bi ...

  8. 修改word文档中已有的批注者名称

    前言 https://blog.csdn.net/hyh19962008/article/details/89430548 word中可以通过修改用户的信息实现新建的批注者显示不同的名称,但是对于文档 ...

  9. 5-CSRF漏洞

    1.CSRF介绍 Csrf漏洞也被称为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用.尽管听起来像xss漏洞,但是它与xss漏 ...

  10. echarts数据过小,log类型无法出现刻度线,并将y轴转为科学计数法

    方法仅供参考 可以更改logBase的值,数值越小刻度线越多,但也会出现,刻度值重复的问题,看各自需要,其次是对数据进行处理,全部变成大于1的数,最后在echarts的图表显示设置中更改回来 注意:对 ...