国内怎么愉快使用Github

如何使用Git

  1. 首先安装git

  2. 使用git打开命令窗口

  3. 配置user.name、user.email。(显示commit的用户名和邮箱)

    1
    2
    git config --global user.name '用户名'
    git config --global user.email '邮箱'

    Git的配置一共有三个级别:system(系统级)、global(用户级)和local(版本库)。system的配置整个系统只有一个,global的配置每个账户只有一个,local的配置取决于Git版本库数量,在版本库才能看到。

    这三个级别是逐层覆盖的,首先去查找system配置,其次查找global配置,最后查找local配置。逐层查找的过程中若查到配置值,则会覆盖上一层的配置。假如三个级别都配置了用户信息,则最后生效的配置是local(版本库)级的。

    即 local > global > system

    local配置

    1
    2
    git config --local user.name '用户名'
    git config --local user.email '邮箱'

    global配置

    1
    2
    git config --global user.name '用户名'
    git config --global user.email '邮箱'

    system配置

    1
    2
    git config --system user.name '用户名'
    git config --system user.email '邮箱'
  4. 本地生成ssh密钥,中间可以修改文件名,默认就是一路回车

    1
    ssh-keygen -t rsa -C '邮箱'
  5. 修改.ssh下的config文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    notepad %HOMEPATH%\.ssh\config

    ####粘贴并修改以下内容到config,修改username为电脑用户名

    Host github.com
    User git
    Port 443
    HostName ssh.github.com
    # 注意修改绝对路径,或者修改username为电脑用户名
    IdentityFile "C:\Users\Administrator\.ssh\id_rsa"
    TCPKeepAlive yes
  6. 将公钥(后缀为pub)里的内容复制到github里,一键直达

不出意外能够正常使用,出意外了也很正常。

如何代理git

以上就是配置git的过程,如果你不加hosts还是无法使用,加hosts也是一会一阻断,clone、pull、push统统失败。开代理可以,但是要提前配置好才能使用,要不然挂全局也是没有用的。

对于pull和clone我们还可以使用之前的方式,但是push不行。

所以我们使用代理

  • 一个代理
  • 代理软件的端口号(http和socks)(我使用的是clash,默认端口号为7890)

在Github上主要用到的是httpsssh协议,所以我们要对这两种协议流量进行代理

http代理

使用http代理(推荐)

1
2
3
4
5
# 全局代理设置(推荐)
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
# 只对GitHub代理(不推荐)
git config --global http.https://github.com.proxy http://127.0.0.1:7890

使用socks5(h)代理(强烈建议)

git 底层使用 libcurl 发送 http 请求,而 libcurl 的代理使用 socks5://时会在本地解析 DNS ,应该改成 socks5h://

1
2
3
4
5
6
7
8
9
10
11
12
13
# socks5
# 全局代理(推荐)
git config --global http.proxy socks5://127.0.0.1:7890
git config --global https.proxy socks5://127.0.0.1:7890
# 只对GitHub代理(不推荐)
git config --global http.https://github.com.proxy socks5://127.0.0.1:7890

# socks5h
# 全局代理(推荐)
git config --global http.proxy socks5h://127.0.0.1:7890
git config --global https.proxy socks5h://127.0.0.1:7890
# 只对GitHub代理(不推荐)
git config --global http.https://github.com.proxy socks5h://127.0.0.1:7890

查看代理

1
2
git config --global --get http.proxy
git config --global --get https.proxy

取消代理

1
2
3
git config --global --unset http.proxy 
git config --global --unset https.proxy
git config --global --unset http.https://github.com.proxy

以上配置是针对http协议的,这时在clone和pull时就会使用代理,然而push使用http时,每次都要输入密码,很不方便,所以也要对ssh进行代理。

ssh代理

1
2
3
4
5
# Linux、MacOS下
vi ~/.ssh/config

# Windows,没有config则新建
notepad %HOMEPATH%\.ssh\config

替换connect.exe的路径(与git在同一路径下)和端口号

经过我本人实验正确。

ProxyCommand如果在最上面,那么Host下的ProxyCommand将不起作用,所以要分别代理的话使用第二种。

ProxyCommand如果在最下面将不起作用。

  1. 全部域名代理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Windows用户,注意替换你的端口号和connect.exe的路径
ProxyCommand "C:\Program Files\Git\mingw64\bin\connect.exe" -S 127.0.0.1:7890 -a none %h %p

# MacOS用户用下方这条命令,注意替换你的端口号
#ProxyCommand nc -v -x 127.0.0.1:7890 %h %p

# 下面是多个github账号的配置
Host github.com
User git
Port 443
HostName ssh.github.com
# 注意修改绝对路径,或者修改username为电脑用户名
IdentityFile "C:\Users\Administrator\.ssh\one"
TCPKeepAlive yes

Host two.github.com
User git
Port 443
HostName ssh.github.com
# 注意修改绝对路径,或者修改username为电脑用户名
IdentityFile "C:\Users\Administrator\.ssh\two"
TCPKeepAlive yes
  1. github域名分别代理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Host github.com
User git
Port 443
HostName ssh.github.com
# 注意修改绝对路径,或者修改username为电脑用户名
IdentityFile "C:\Users\Administrator\.ssh\one"
TCPKeepAlive yes
# MacOS用户请更换为对应的
ProxyCommand "D:\Program Files\Git\mingw64\bin\connect.exe" -S 127.0.0.1:7890 -a none %h %p

Host two.github.com
User git
Port 443
HostName ssh.github.com
# 注意修改绝对路径,或者修改username为电脑用户名
IdentityFile "C:\Users\Administrator\.ssh\two"
TCPKeepAlive yes
ProxyCommand "D:\Program Files\Git\mingw64\bin\connect.exe" -S 127.0.0.1:7890 -a none %h %p
1
2
3
# 测试是否成功
ssh -T git@github.com
ssh -vT git@github.com # 加v会显示debug信息

建议配置http代理用来pull和clone,配置ssh代理用来push

多个github账号怎么办

1
2
3
4
# 最好进入%HOMEPATH%\.ssh\下生成密钥
ssh-keygen -t rsa -C '邮箱'
# 不要一路回车,要注意与第一个有区别
# pub粘贴进对应的github账号里
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
修改 ~\.ssh\config

Host github.com
User git
Port 443
HostName ssh.github.com
# 注意修改绝对路径,或者修改username为电脑用户名,Windows下使用\ ,linux使用/ .
IdentityFile "C:\Users\Administrator\.ssh\one"
TCPKeepAlive yes

Host two.github.com
User git
Port 443
HostName ssh.github.com
# 注意修改绝对路径,或者修改username为电脑用户名,Windows下使用\ ,linux使用/ .
IdentityFile "C:\Users\Administrator\.ssh\two"
TCPKeepAlive yes
1
2
3
4
# test
ssh -T git@github.com # 对应第一个github账号
ssh -T git@two.github.com # 对应第二个github账号
# 出现Hi,xxx则配置成功
1
2
3
4
5
6
7
# 取消全局 用户名/邮箱 配置
git config –global –unset user.name
git config –global –unset user.email

# 单独设置每个repo 用户名/邮箱
git config user.name '用户名'
git config user.email '邮箱'
1
2
3
4
5
6
7
8
9
10
11
# 原来git clone
git clone git@github.com:用户名/仓库名.git
# 现在git clone
git clone git@github.com:用户名/仓库名.git # one
git clone git@two.github.com:用户名/仓库名.git # two
# 或者进入.git修改config成自己的项目名

# 重建origin ,关联自己账号
git remote rm origin
git remote add origin git@one.github.com:用户名/仓库名.git
git push origin master

hexo

如果第二个github用来作为hexo,那么修改在hexo目录下的_config.yaml

1
2
3
4
5
6
deploy:
type: 'git'
#repository: git@github.com:用户名/仓库名.git
# 改为
repository: git@two.github.com:用户名/仓库名.git
branch: main

然后执行 hexo g -d

参考与引用:

设置代理解决github被墙

Git的ssh配置


国内怎么愉快使用Github
https://shyi.org/posts/14780/
作者
Shyi
发布于
2022年7月30日
更新于
2024年9月7日
许可协议