版本控制在软件开发中至关重要,而 Git 是广泛使用的代码管理工具。有时,我们可能需要在多个平台 (如 GitHubGitLabGitee) 上同步同一 Git 仓库,以便备份、协作等。

本文将带你玩转此操作,其中关键是“配置 SSH” 和“远程仓库”。首先,我们来讲述 SSH 的配置。

配置 SSH

为确保安全和简化登录,需配置 SSH 密钥。SSH 密钥是用于身份验证的安全方式,可免密访问远程 Git 仓库。

检查现有 SSH 密钥

在生成新的 SSH 密钥之前,应该检查本地电脑是否存在现有密钥。打开终端,输入一下命令以查看是否存在现有的 SSH 密钥。

ls -al ~/.ssh

此命令将列出 .ssh 目录中的所有文件(如果存在)。如果没有想要的,需要创建新的 SSH 密钥对。

生成新 SSH 密钥

在本地电脑上生成新的 SSH 密钥。 生成密钥后,可将公钥添加到 GitHub 等平台上的帐户中,以便通过 SSH 为 Git 操作启用身份验证。

打开终端输入一下命令,然后一路 Enter 键,完成密钥对的生成:

ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_github

在这个命令中:

  • ssh-keygen 用于生成、管理和转换认证密钥的工具。
  • -t 指定了密钥类型。ed25519 是一种现代的、安全的公钥加密算法,被广泛认为是非常强大且高效的。与 RSA 和 DSA 密钥相比,它提供了更好的安全性和性能。
  • -C 指定一个注释,通常是用户的电子邮件地址。
  • -f 指定了密钥文件的保存位置和名称。默认情况下,ssh-keygen 会生成名为 id_rsaid_ed25519 等的文件,具体取决于所选的密钥类型。在这里,它将被保存为 ~/.ssh/id_github (私钥) 和 ~/.ssh/id_github.pub (公钥)。

相关链接:

编辑 ~/.ssh/config 文件

为了在一台电脑上配置多个平台的 SSH,你需要编辑 ~/.ssh/config 文件。以下是一个配置示例,分别配置了 GitHubGitLabGitee 的 SSH:

# GitHub 配置
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_github
PreferredAuthentications publickey,password # 优先使用 SSH 公钥认证,然后再尝试用户名和密码认证
IdentitiesOnly yes # GitLab 配置
Host gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_gitlab
PreferredAuthentications publickey # 仅使用 SSH 公钥认证
IdentitiesOnly yes # Gitee 配置
Host gitee.com
HostName gitee.com
User git
IdentityFile ~/.ssh/id_gitee
PreferredAuthentications publickey # 仅使用 SSH 公钥认证
IdentitiesOnly yes

在这个配置中:

  • Host 是你定义的别名,可以随意命名,但通常使用服务域名以方便记忆。
  • HostName 是实际的服务域名。
  • User 通常是 git,因为这是大多数 Git 服务器的默认用户名。
  • IdentityFile 指向你的私钥文件路径。
  • PreferredAuthentications 指定 SSH 客户端在尝试身份验证时应优先考虑的认证方法列表。例如,你可以设置为只使用公钥认证,或者优先使用公钥认证,然后再尝试其他 (密码) 认证方式。
  • IdentitiesOnly yes 指示 SSH 只使用 IdentityFile 指定的身份进行认证,这有助于避免 SSH 代理或默认私钥的干扰。

新增 SSH 密钥到平台帐户

配置 ~/.ssh/config 文件完毕后,必须将 SSH 公钥添加到 GitHubGitLabGitee,才能为帐户启用 SSH 访问。

相关链接:

测试 SSH 连接

设置 SSH 密钥并将其添加到 GitHubGitLabGitee 后,可以测试连接。

测试 SSH 连接之前,应已完成以上所有步骤。

打开终端,输入以下命令:

ssh -T git@github.com          # 测试 Github 的 SSH 连接

ssh -T git@gitlab.example.com  # 测试 Gitlab 的 SSH 连接。注意:要将 gitlab.example.com 替换为你的实例 URL

ssh -T git@gitee.com           # 测试 Gitee 的 SSH 连接

如果这是你第一次连接,你应该会看到类似以下消息,提示你需要验证平台主机的真实性:

> The authenticity of host ' (IP ADDRESS)' can't be established.
> ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
> Are you sure you want to continue connecting (yes/no)?

输入 yes,然后按 Enter

> Hi USERNAME! You've successfully authenticated, but GitHub does not
> provide shell access.

添加成功后,就可以使用 SSH 协议访问这些平台了。例如,你可以使用 git clone git@github.com/username/repository.git 来克隆 GitHub 上的仓库,SSH 会根据 ~/.ssh/config 文件中的配置来选择合适的私钥进行身份验证。

相关链接:

我们为电脑配置完 SSH 后,接下来为本地 Git 仓库添加多个远程平台的仓库链接。

配置远程仓库

没有 Git 仓库

为 Git 仓库添加多个远程平台的仓库的前提是得有个本地 Git 仓库。如果你还没有,可以用以下命令初始化一个。

cd your_folder
git init --initial-branch=main

已经有 Git 仓库

如果你已经在其中一个平台上有个 Git 仓库,你可以使用以下命令将其克隆到本地。

git clone <远程仓库URL>

然后,cd 到新初始化、或者克隆下来的仓库目录,添加其他平台的远程仓库链接 。

查看远程仓库

添加之前,我们先查看一下本地 Git 仓库是否有远程仓库的链接,在终端执行以下命令:

git remote -v

如果刚才是本地新初始化的 Git 仓库,不会有任何信息打印。但是,刚才是从远程平台克隆下来的,就会有以下信息打印。比如,我们是从 Github 克隆的。

origin	git@github.com:liam-i/git-multi-platform-sync.git (fetch)
origin git@github.com:liam-i/git-multi-platform-sync.git (push)

删除远程仓库

为了明确指向多平台远程仓库,所以我们用以下命令删除不直观的 origin,稍后再添加一个具有明确指向性的别名

git remote remove origin

添加远程仓库

为了将本地仓库与其他平台的远程仓库关联起来,需要执行以下命令为它们添加别名。

git remote add <别名> <远程仓库URL>

例如,你可以为 GitHub 仓库添加别名 github,为 GitLab 仓库添加别名 gitlab

git remote add github git@github.com:liam-i/git-multi-platform-sync.git
git remote add gitlab ssh://git@gitlab.com:liam-i/git-multi-platform-sync.git
git remote add gitee git@gitee.com:liam-i/git-multi-platform-sync.git

添加完成后,我们再用 git remote -v 命令查看一下:

$ git remote -v

github	git@github.com:liam-i/git-multi-platform-sync.git (fetch)
github git@github.com:liam-i/git-multi-platform-sync.git (push)
gitlab ssh://git@gitlab.com:liam-i/git-multi-platform-sync.git (fetch)
gitlab ssh://git@gitlab.com:liam-i/git-multi-platform-sync.git (push)
gitee git@gitee.com:liam-i/git-multi-platform-sync.git (fetch)
gitee git@gitee.com:liam-i/git-multi-platform-sync.git (push)

同步操作

推送代码

当你对本地仓库进行了修改,并提交了新的更改后,可以使用以下命令将这些更改推送到所有远程平台:

git push <别名> <分支名>

例如,将更改推送到 GitHubGitLabGitee

git push github main
git push gitlab main
git push gitee main

拉取代码

如果你想从某个远程仓库拉取最新的更改到本地,可以使用以下命令:

git pull <别名> <分支名>

例如,从 GitHubGitLabGitee 拉取更改:

git pull github main
git pull gitlab main
git pull gitee main

注意:在拉取代码之前,请确保你在正确的分支上,并且本地仓库的工作目录是干净的。

管理与维护

为了保持多个平台上的仓库数据一致性,你需要定期进行同步操作。同时,当在多个平台上进行协作时,注意解决可能出现的冲突。要解决冲突可以使用 git merge 工具,并确保在推送更改之前测试代码的完整性。

关于更详细的 Git 操作指令请参考:

结语

看完这篇博客,你应该已经知道怎么在多个平台上玩转 Git 仓库同步了。同步时别忘了多留个心眼,还要时不时确认下各平台的数据是否都对得上。希望你用 Git 越来越 6!

参考资料

访问博址 liam-i.github.io 获取更佳阅读体验和最新内容。

如何在多个 Git 平台玩转一个仓库的更多相关文章

  1. 快速为不同 Git 平台配置用户

    在 ~ 目录下创建 config 文件可以为项目配置默认的用户信息,但如果希望经常切换,那么最好就是通过命令为项目单独设置用户. 我使用的 shell 是 zsh, 所以我在 ~/.zshrc 文件中 ...

  2. Vue企业级优雅实战02-准备工作03-提交 GIT 平台

    代码管理.版本管理是件老大难的事情,尤其多人开发中的代码冲突.突击功能时面临的 hotfix 等.本文只是简单说说如何将一套代码提交到两个 Git 平台(GitHub.GitEE)上.其他的 Git ...

  3. Git小玩

    早就听说了GitHub的强大. 一直没有机会去看, 在公司实习的几个月里也没机会接触SVN和Git,  可是抱着对Linus大神的崇敬, 和开源的崇敬之情.  趁着不忙的几天, 来学习一下Git. 希 ...

  4. git怎么创建本地版本仓库

    git怎么创建本地版本仓库 安装git我就不用说了吧!下载地址:https://github.com/msysgit/msysgit/releases/download/Git-1.9.4-previ ...

  5. 【Git学习笔记】远程仓库

    第一种情景:本地初始化一个Git仓库后,接着又在github上创建了一个Git仓库,现在要让这两个仓库进行远程同步. 1. 关联本地仓库就和远程仓库  $ git remote add origin ...

  6. 利用git+hugo+markdown 搭建一个静态网站

    利用git+hugo+markdown 搭建一个静态网站 一直想要有一个自己的文档管理系统: 可以很方便书写,而且相应的文档很容易被分享 很方便的存储.管理.历史记录 比较方面的浏览和查询 第一点用M ...

  7. 使用git svn clone迁移svn仓库

    使用git svn clone迁移svn仓库 clone命令可以指定很多参数,主要用到这些,你也可以使用git svn help查看完整的参数列表. git svn clone https://172 ...

  8. git学习笔记04-将本地仓库添加到GitHub远程仓库-git比svn先进的地方

    第1步:创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步. 如果没有,打开Shel ...

  9. Git全解析之远程仓库交互

    文章目录 1. Git全解析之远程仓库交互 1.1. 中央仓库的概念 1.2. 本地分支与远程分支 1.3. pull与fetch 1.4. 关于捐赠 Git全解析之远程仓库交互 中央仓库的概念 虽然 ...

  10. git 快速使用(本地仓库同步到远程仓库)

    学git一段时间,可惜公司用的是svn,平时少用,又忘了,总结一下,免得下次又得重新学习.得多多用才是正道! 一.  将本地的提交到网上git仓库 1.在git创建仓库                ...

随机推荐

  1. 【原创】win11完美搭建macos13实现IOS自动化测试环境

    虚拟机完美搭建IOS自动化测试环境 一.win系统 1.1 安装虚拟机VM16 如果是macos系统请跳过 详细安装请看压缩包,私信可以提供安装包 1.2 VM解锁macOS 使用的是unlocker ...

  2. 美丽的夕阳qsnctfwp

    题目附件 查看图片,放大左侧发现建筑物上 8 个字:龙腾公寓/福阳集团 根据文字在搜索引擎中查找,并由此确定城市 通过百度地图全景地图查看当地桥梁,并与照片比对 调整地图比例尺,记录桥名 根据提示qs ...

  3. sql 语句系列(多表之链二)[八百章之第四章]

    从多个表中返回缺失值 比如说查询每个员工的部门,且查看部门的所有员工. 这里考虑一种情况就是可能有部门没有员工,同样有些员工还没有分配部门. 解析使用 full outer join. select ...

  4. spring boot yaml 配置[三]

    前言 我们知道java 因为历史的原因,一直有一个配置地狱的痛点.那么如何解决掉它呢? spring boot 是一柄利器,但是呢,还是要配置. 看来配置的避免不了的了. 那么如何可以减轻这种痛苦呢? ...

  5. .NET8中的Microsoft.Extensions.Http.Resilience库

    接上一篇,https://www.cnblogs.com/vipwan/p/18129361 借助Aspire中新增的Microsoft.Extensions.ServiceDiscovery库,我们 ...

  6. Filebeat 日志采集工具安装

    Filebeat 是比较轻量的日志采集工具,对于一些简单的采集任务可以直接使用 Filebeat 采集,同时也支持很多的方式输出,可以输出至 Kafka.Elasticsearch.Redis 等,下 ...

  7. c#程序员必学清单

    必读书目:1. "Effective C#: 50 Specific Ways to Improve Your C#" by Bill Wagner2. "CLR via ...

  8. 力扣73(java)-矩阵置零(中等)

    题目: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 提示: m == matrix.length n == matrix[0].l ...

  9. 从 VLAN 到 IPVLAN: 聊聊虚拟网络设备及其在云原生中的应用

    简介: 由于这篇文章真的很长,大量的篇幅在讲述内核的实现,如果你对这部分不感兴趣,那么在建议你在看完第一部分的三个问题后,思考一下,然后直接跳转到我们对问题的回答. 作者:张伟(谢石)   由于这篇文 ...

  10. 云原生事件驱动引擎(RocketMQ-EventBridge)应用场景与技术解析

    简介: RocketMQ 给人最大的印象一直是一个消息引擎.那什么是事件驱动引擎?为什么我们这次要推出事件驱动引擎这个产品?他有哪些应用场景,以及对应的技术方案是什么?本文我们就一起来看下. 作者:罗 ...