GitHub | 多账户设置以及下载加速
唠唠闲话
最近发现用校园网克隆 Github 仓库太慢了,在知乎上搜索,发现用 Gitee 作为中介可以加快速度,所以写了这篇博客整理方法。本篇介绍一台电脑上使用多个 git 托管平台的方法,可用于解决 Github 仓库使用 git clone 太慢的问题(点这里跳转)。
由于本地 Git 仓库和 GitHub 仓库之间的传输通过 SSH 加密,教程主要针对密钥的设置问题。
参考链接:
廖学峰网站:Git教程。
简书:多个github帐号更新多个hexo博客
CSDN:在一台电脑上同时使用多个github账号
注:参考的教程大多提到用
git config --global --unset user.name/email
取消全局设置,但这步不做也没影响。主要因为设置的账号都是一个人在用,所以全局设置同一个用户在提交。
基本设置
假定本地 Git 需要连接三个账号:Github1
, Github2
, Gitee
。
-
全局设置账号和邮箱
1
2git config --global user.name "用户名"
git config --global user.email "邮箱"如果是多个账号在用,使用
git config --global --unset user.name/email
取消全局设置 -
生成密钥:进入主目录,清理并生成 ssh 密钥
1
2
3
4
5
6
7cd ~/.ssh # 进入 .ssh 目录,如果不存在,先用 mkdir ~/.ssh 新建
ssh-add -l # 查看 ssh 列表
ssh-add -D # 清理本地 ssh 缓存
### 生成三组密钥 ###
ssh-keygen -t rsa -C "youremail@xx.com" -f Github1_rsa
ssh-keygen -t rsa -C "youremail@xx.com" -f Github2_rsa
ssh-keygen -t rsa -C "youremail@xx.com" -f Gitee_rsa注:
-f
参数设置密钥名称,默认为.ssh/id_rsa
,过程提示是否设置密码,按两次 Enter 跳过即可;键入代码后,.ssh/
目录下生成了私钥xxx_rsa
和公钥xxx_rsa_pub
-
添加密钥:如果取消了全局配置,需将私钥加到
ssh
中1
2
3
4
5eval $(ssh-agent -s) # 打开ssh-agent
ssh-add ~/.ssh/Github1_rsa
ssh-add ~/.ssh/Github2_rsa
ssh-add ~/.ssh/Gitee_rsa
ssh-add -l # 查看密钥列表 -
GitHub 设置:登录账号,点击头像 -> setting -> SSH and GPG keys -> New SSH key,如下图
title
任取,打开前边生成的公钥.ssh/xxx_pub
,将内容复制到key
中
注意:复制的是公钥文件 xxx_pub 。
-
Gitee 的操作类似,点击头像 -> 设置 -> SSH 公钥 -> New SSH key
-
配置密钥:在
.ssh/
目录下,生成配置文件config
, 填写密钥信息。1
code config # 使用 VScode 编辑文件
配置文件 config 内容如下(参考)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# Github1
Host Github1.github.com
HostName github.com
User git
IdentityFile ~/.ssh/Github1_rsa
# Github2
Host Github2.github.com
HostName github.com
User git
IdentityFile ~/.ssh/Github2_rsa
# Gitee
Host gitee.com
HostName gitee.com
User git
IdentityFile ~/.ssh/Gitee_rsa -
config
内容说明,三部分对应三个账号:Host
为命令行访问地址HostName
为实际访问地址User
为用户名IdentityFile
后接密钥的路径
连接测试
-
Github/Gitee 密钥设置后,在本地输入下边代码连接测试
1
2
3ssh -T git@Github1.github.com
ssh -T git@Github2.github.com
ssh -T git@gitee.com -
显示如下内容,输入 yes 确认
1
2
3
4The authenticity of host 'github.com (13.229.188.59)' can't be established.
RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,13.229.188.59' (RSA) to the list of known hosts. -
若连接成功,会受到类似下边的信息,其中 UserName 为账号用户名。
1
Hi *UserName*! You've successfully authenticated, but GitHub does not provide shell access.
连接成功后
.ssh
目录下会出现新文件known_hosts
;如果连接失败,会显示git@xxx: Permission denied (publickey).
。
注:Linux 下如果用
sudo
搭建 hexo 博客,连接仓库时ssh
密钥检索的是root
目录,此时还需要将.ssh
复制过去。
1 | sudo su # 进入管理员权限 |
git clone 加速
国内访问 Github 仓库有时候太慢,网上搜索了许多方案,发现最简单方式还是用国内的 Gitee 作为媒介,将仓库克隆到本地再重新链接。
-
授权码云
- 注册 Gitee (码云)的账号
- 点击新建仓库 -> 从其他网站导入 -> Github 授权
- 授权一次,以后就能在列表中看到自己中账号中的仓库。
- 选择需要相应仓库,导入 Gitee。
-
克隆仓库
使用git clone git@gitee.com:UserName/reponame.git
克隆相应仓库。 -
更改远程连接
1
2
3
4
5
6
7
8
9cd ./reponame # 进入 git 仓库
git remote -v # 查看远程连接,显示如下,远程为 Gitee 仓库
# origin git@gitee.com:UserName/reponame.git (fetch)
# origin git@gitee.com:UserName/reponame.git (push)
git remote remove origin # 取消与 Gitee 的连接
git remote add origin git@github.com:UserName/roponame.git # 连接原先的 Github 仓库
git pull master origin # 更新本地仓库
git push -u origin master # 推送到远程仓库,-u 设置推送的默认分支
注:如果是多账号,这里
git remote add origin
后的链接要按config
文件的 Host 进行修改。
多分支操作
-
克隆所有分支,参考:How do I fetch all Git branches?
1
2
3
4```bash
git branch -r | grep -v '\->' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all -
推送所有分支:
1
git push --all