文章

如何在多个 Git 平台玩转一个仓库

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

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

配置 SSH

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

检查现有 SSH 密钥

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

1
ls -al ~/.ssh

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

生成新 SSH 密钥

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

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

1
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 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 连接之前,应已完成以下各项:

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

1
2
3
4
5
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 连接

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

1
2
3
> 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

1
2
> 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 仓库。如果你还没有,可以用以下命令初始化一个。

1
2
cd your_folder
git init --initial-branch=main

已经有 Git 仓库

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

1
git clone <远程仓库URL>

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

查看远程仓库

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

1
git remote -v

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

1
2
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,稍后再添加一个具有明确指向性的别名

1
git remote remove origin

添加远程仓库

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

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

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

1
2
3
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 命令查看一下:

1
2
3
4
5
6
7
8
$ 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)

同步操作

推送代码

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

1
git push <别名> <分支名>

例如,将更改推送到 GitHubGitLabGitee

1
2
3
git push github main
git push gitlab main
git push gitee main

拉取代码

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

1
git pull <别名> <分支名>

例如,从 GitHubGitLabGitee 拉取更改:

1
2
3
git pull github main
git pull gitlab main
git pull gitee main

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

管理与维护

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

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

结语

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

参考链接

本文由作者按照 CC BY 4.0 进行授权

© Liam. 保留部分权利。

本博客由 Jekyll 生成,使用 Chirpy 作为主题