git 本地仓添加多个远端仓库

2024-04-16 10:18
文章标签 仓库 多个 本地 git 远端

本文主要是介绍git 本地仓添加多个远端仓库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

知其然,知其所以然!

一般不涉及团队协作开发的话,添加一个远端仓库就够了,也就是你从 gitee 或者 github 上对应的 origin 克隆的那个仓库,比如:

[root@master GitTest]# git remote -v
origin	git@gitee.com:L2392863668/GitTest.git (fetch)
origin	git@gitee.com:L2392863668/GitTest.git (push)

添加远端仓库的命令其实并不复杂,关键是为什么要添加多个远程仓库呢?或者说,添加多个远端仓库以后,需要怎么去用起来?

git remote add <upstream> <url>

当然,既然放出来了这个问题,首先要分析一下原因,一般添加多个远程仓库的实用场景如下:

你有一个本地仓 local、一个远端个人仓 origin(可自由 pull 和 push) 和一个远端主仓 upstream(一般来说只可以 pull ,没有直接 push 的权限),且远端个人仓是 fork 的远端主仓(通过 fork 关系关联)。本地代码则是先推送到远端个人仓,然后再提交 pr 到远端主仓,Committer 审核 pr 以后再合并到主仓。由于主仓的代码是多人协作的,难免可能会出现冲突的情况,所以你一般需要从远端主仓拉取最新代码到本地(强制拉取覆盖本地或者手动处理合并冲突),然后在此基础上再进行开发,以此来减少代码提交时的冲突。

虽然现在像 gitee 等都是支持直接从远端主仓 upstream 强制更新代码到远端个人仓 origin 的,不过你还得再从远端个人仓 origin 拉取代码到本地 local,显然多绕了一圈路。

如果有配置多个远端仓库(origin 和 upstream)的话,代码的拉取和提交就要方便得多了。本文以主分支 maser 为例,实际操作时根据需要进行变更。

克隆远端个人仓

克隆远端个人仓以后,你的远端 origin 默认就添加上了。

[root@master test]# git clone git@gitee.com:L2392863668/GitTest.git
Cloning into 'GitTest'...
remote: Enumerating objects: 247, done.
remote: Total 247 (delta 0), reused 0 (delta 0), pack-reused 247
Receiving objects: 100% (247/247), 1.27 MiB | 626.00 KiB/s, done.
Resolving deltas: 100% (96/96), done.
[root@master test]# ll
total 0
drwxr-xr-x. 4 root root 165 Dec 15 20:57 GitTest
[root@master test]# cd GitTest/
[root@master GitTest]# git remote -v
origin	git@gitee.com:L2392863668/GitTest.git (fetch)
origin	git@gitee.com:L2392863668/GitTest.git (push)

本地添加远端主仓

一般也称为上游仓库(upstream)

[root@master GitTest]# git remote add upstream git@github.com:2392863668/GitTest.git
[root@master GitTest]# git remote -v
origin	git@gitee.com:L2392863668/GitTest.git (fetch)
origin	git@gitee.com:L2392863668/GitTest.git (push)
upstream	git@github.com:2392863668/GitTest.git (fetch)
upstream	git@github.com:2392863668/GitTest.git (push)

从主仓拉取代码到本地

完全以远端主仓为准

由于你的个人仓 origin 可能会和远端主仓 upstream 的代码冲突(比如其他协作者的 pr 先你一步合并到主仓了,导致你自己的 pr 合并不进去),这时候你可以选择直接丢弃掉本地修改,完全以主仓为准:

[root@master GitTest]# git fetch upstream master; git reset --hard upstream/master
From github.com:2392863668/GitTest* branch            master     -> FETCH_HEAD
HEAD is now at 1912baa deal merge conflict in hello.txt

与本地修改进行合并

如果你要保留本地已经做过的修改,请从主仓拉取代码并进行合并(如果有冲突的话,注意处理合并冲突):

[root@master GitTest]# git pull upstream master
remote: Enumerating objects: 26, done.
remote: Counting objects: 100% (26/26), done.
remote: Compressing objects: 100% (19/19), done.
Unpacking objects: 100% (26/26), 3.82 KiB | 279.00 KiB/s, done.
remote: Total 26 (delta 7), reused 19 (delta 5), pack-reused 0
From github.com:2392863668/GitTest* branch            master     -> FETCH_HEAD* [new branch]      master     -> upstream/master
Merge made by the 'recursive' strategy.hello.txt   |  3 +--looking.txt |  1 +readme.txt  | 13 +------------world.txt   |  1 +4 files changed, 4 insertions(+), 14 deletions(-)

本地推送到远端个人仓

直接强制推送 

由于之前你的本地仓 local 和远端个人仓 origin 的代码是一致的,如果你是强制从远端主仓 upstream 更新的话,推送到远端个人仓的时候也需要强制推送。

[root@master GitTest]# git push -f origin master
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
To gitee.com:L2392863668/GitTest.git+ 7710a4c...1912baa master -> master (forced update)

合并后推送

如果你已经处理过合并冲突的话,推送到个人仓的时候就不会再冲突了。

[root@master GitTest]# git push origin master
Enumerating objects: 38, done.
Counting objects: 100% (34/34), done.
Delta compression using up to 4 threads
Compressing objects: 100% (26/26), done.
Writing objects: 100% (28/28), 3.95 KiB | 252.00 KiB/s, done.
Total 28 (delta 9), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
To gitee.com:L2392863668/GitTest.gitb65b892..7710a4c  master -> master

在个人仓提交 pr

提交 pr 合并请求这个我就不啰嗦了,需要了解的话请看我的另外一篇博客:GitHub 的 pull request 测试_TomorrowAndTuture的博客-CSDN博客_pull request 测试

这篇关于git 本地仓添加多个远端仓库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/908519

相关文章

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

一文详解如何查看本地MySQL的安装路径

《一文详解如何查看本地MySQL的安装路径》本地安装MySQL对于初学者或者开发人员来说是一项基础技能,但在安装过程中可能会遇到各种问题,:本文主要介绍如何查看本地MySQL安装路径的相关资料,需... 目录1. 如何查看本地mysql的安装路径1.1. 方法1:通过查询本地服务1.2. 方法2:通过MyS

Maven 依赖发布与仓库治理的过程解析

《Maven依赖发布与仓库治理的过程解析》:本文主要介绍Maven依赖发布与仓库治理的过程解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录Maven 依赖发布与仓库治理引言第一章:distributionManagement配置的工程化实践1

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基