Git搭配SS使用代理访问github

Git常用的有两种协议

不同的协议他的代理配置各不相同。core.gitproxy 用于 git:// 协议,http.proxy 用于 http:// 协议。

常见的git clone 协议如下:

#使用http://协议
git clone https://github.com/EasyChris/baidu.git
#使用git://协议
git clone git@github.com:EasyChris/baidu.git

http/https协议

假设程序在无状态、无工作目录的情况下运行git指令,利用-c参数可以在运行时重载git配置,包括关键的http.proxy

git clone 使用 http.proxy 克隆项目
git clone -c http.proxy=http://127.0.0.1:1080 https://github.com/madrobby/zepto.git
git目录设置目录代理模式,不太建议全部设置为全局配置。因为我有时候还使用coding.net
#通常shadowsocks的代理在本机地址是127.0.0.1 代理端口是1080
git config http.proxy 'socks5://127.0.0.1:1080'

git协议

使用git协议的配置

git config core.gitProxy  'socks5://192.168.7.1:1080'

增加全局配置

如果你不想每次都是用那么长命令,那么你就可以选择直接配置全局变量了。当然这样比较耗费流量

添加全局配置

git config --global http.proxy 'socks5://127.0.0.1:1080' 
git config --global https.proxy 'socks5://127.0.0.1:1080'

git提交到多个远程仓库

我用过两种方法,最早的时候是设定多个 remote,然后写一个 alias,比如:

$ git config alias.pushall "!git push origin && git push dev"

后来在某一个版本(忘了具体的版本号)升级之后,Git 多了一项设置,使得你可以为一个 remote 设置多个 pushurl。比如说你问题里的例子,我可以不要 remote "dev",只留下 remote "origin",然后加一句:

git remote --set-url --add --push origin git@gitlab.com:root/XXX.git

在这之后,你的 remote "origin" 就变成类似如下的结构:

[remote "origin"]
        url = git@github.com:SegmentFault/XXX.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        pushurl = git@github.com:SegmentFault/XXX.git
        pushurl = git@gitlab.com:root/XXX.git

如此一来,我可以直接 git push origin 就可以推向两个 repos 了。

这两种方法其实各有各的适用场景,自己取舍吧。