V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yanyueio
V2EX  ›  程序员

git clone 时如何提高 git 协议的传输速度

  •  
  •   yanyueio · 2020-03-18 11:57:07 +08:00 · 4965 次点击
    这是一个创建于 1471 天前的主题,其中的信息可能已经有所发展或是发生改变。

    从 github clone,如果走 git 协议一般会很慢,我这边一般会切换到 https 配置 git-credentials 和 access key,走 https 或者 socket5 代理,来提高速度,大概 500 KBi/s 的速度,so far so good.

    但是这里需要单独生成 access key,且这个秘钥是暴露在文件中的。

    所以想问大佬们,有没有人走 git 协议,去跑代理的?

    any advice will be grateful.

    31 条回复    2020-03-22 01:44:20 +08:00
    unixeno
        1
    unixeno  
       2020-03-18 11:59:05 +08:00 via Android
    git 就是走的 ssh,所以得在 ssh 配置里加代理
    v2byy
        2
    v2byy  
       2020-03-18 12:00:28 +08:00 via iPhone
    你说的是直接在 git config 中配置下 host 为 github 就走 http proxy ?需要单独生成 access key 吗
    yuanfnadi
        3
    yuanfnadi  
       2020-03-18 12:01:21 +08:00
    ```
    Host *
    UseKeychain yes
    Host github.com
    HostName github.com
    User git
    ProxyCommand nc -v -x 127.0.0.1:7891 %h %p
    ```

    不谢
    yanyueio
        4
    yanyueio  
    OP
       2020-03-18 12:02:39 +08:00
    .ssh 文件中配置的 config 文件中设置的 http 或者 https 代理也只是配置的 http/https 的代理,它无法针对 ssh/git 生效。

    @v2byy access key 是因为我配置了 2fa,即 google authenticator 两步验证,所以直接走 https 的密码不行,必须在 github 上的 developer 项目里生成 access key 代替原来的 github 密码。
    exiledkingcc
        5
    exiledkingcc  
       2020-03-18 12:03:44 +08:00
    我一般直接这样就行了:
    export HTTPS_PROXY=....
    git clone ......
    yanyueio
        6
    yanyueio  
    OP
       2020-03-18 12:05:16 +08:00
    @yuanfnadi 您这个是针对 git clone ssh:// 生效的吧?

    确定 github clone [email protected] 也行?
    BrettD
        7
    BrettD  
       2020-03-18 12:08:43 +08:00 via iPhone
    @exiledkingcc 这个只能代理 HTTPS 不能代理 SSH 协议吧?
    sobigfish
        8
    sobigfish  
       2020-03-18 12:13:11 +08:00
    @yuanfnadi #3 git config --global https.proxy 不香么?
    yanyueio
        9
    yanyueio  
    OP
       2020-03-18 12:17:12 +08:00   ❤️ 1
    OK,刚刚试了一下,借助 nc 命令,是可以走到 socks5 代理的。

    然后速度大致是直接用 https 的一般 275 KiB/s 左右。

    @sobigfish 这里的关键是想实现的是免密,且不明文暴露密码。


    结贴了,感谢以上各位的热心。

    我的最终配置如下:


    ```bash
    HOST github.com
    UseKeychain yes
    Host github.com
    HostName github.com
    IdentityFile /Users/yanyueio/.ssh/YanYueIO-PUB
    port 22
    User git
    ProxyCommand nc -v -x 127.0.0.1:1086 %h %p

    ```

    再次谢谢各位了。
    yanyueio
        10
    yanyueio  
    OP
       2020-03-18 12:18:38 +08:00
    补充:

    貌似速度和代理的拥塞程度有关,不一定是一半,有时候比直接用 https 的快。

    remote: Enumerating objects: 1177, done.
    remote: Counting objects: 100% (1177/1177), done.
    remote: Compressing objects: 100% (205/205), done.
    Receiving objects: 32% (602/1879), 134.14 MiB | 1.16 MiB/s
    Tianao
        11
    Tianao  
       2020-03-18 12:28:05 +08:00
    export all_proxy=socks5://[IP]:[port]
    wuwukai007
        12
    wuwukai007  
       2020-03-18 12:35:52 +08:00
    其实下载 zip 压缩包 并用迅雷下载超快的。
    wujunze
        13
    wujunze  
       2020-03-18 12:40:42 +08:00
    软路由 + 番茄上网
    GitHub clone 一般 10M/s 峰值 20M/s

    ![]( https://wujunze.com/blog-images/r/pic/20200318124007.png)
    wujunze
        14
    wujunze  
       2020-03-18 12:41:23 +08:00
    @yanyueio #6 楼主 多少 M 带宽
    CBS
        15
    CBS  
       2020-03-18 12:41:49 +08:00
    brzhang
        16
    brzhang  
       2020-03-18 12:42:31 +08:00 via iPhone
    梯子
    hshpy
        17
    hshpy  
       2020-03-18 13:11:19 +08:00
    proxychains
    ysc3839
        18
    ysc3839  
       2020-03-18 13:20:09 +08:00 via Android
    @yanyueio 你所说的 [email protected] 不是“git 协议”,是 SSH 协议的简写。
    jinsongzhao
        19
    jinsongzhao  
       2020-03-18 13:20:09 +08:00
    @wuwukai007 不考虑自动更新代码吗?
    Songxwn
        20
    Songxwn  
       2020-03-18 13:21:54 +08:00
    代理不行

    [root@localhost ~]# git clone https://github.com/coolsnowwolf/lede.git
    Cloning into 'lede'...
    remote: Enumerating objects: 58485, done.
    Receiving objects: 35% (20685/58485), 70.76 MiB | 4.82 MiB/s
    exiledkingcc
        21
    exiledkingcc  
       2020-03-18 14:23:31 +08:00
    @BrettD 是只能 https
    hwenwur
        22
    hwenwur  
       2020-03-18 14:28:30 +08:00 via Android
    alias git=""proxychains4 -q git"
    xingheng
        23
    xingheng  
       2020-03-18 14:36:38 +08:00
    如果只是想做一次性 clone (不需要拉取更新)的话,可以加上--depth 1 的选项,可以让需要 clone 的 git objects 少一个数量级,对 commit 数量比较大的仓库尤其明显。间接提高速度了,我是从一些包管理工具封装的 git log 学到的。
    mazyi
        24
    mazyi  
       2020-03-18 16:55:33 +08:00
    出国
    msg7086
        25
    msg7086  
       2020-03-18 17:00:43 +08:00   ❤️ 1
    Git 协议是 git://
    SSH 协议是 (ssh://)git@

    GitHub 虽然支持 git 协议但是网页上只会给 SSH 和 HTTPS 两种。
    IGJacklove
        26
    IGJacklove  
       2020-03-18 17:32:27 +08:00
    代理不就可以了?
    Timzzzzz
        27
    Timzzzzz  
       2020-03-18 23:20:47 +08:00
    可以是下 Proxychains 对我有效
    binaryify
        28
    binaryify  
       2020-03-19 09:31:28 +08:00
    我是开 proxifier
    akatquas
        29
    akatquas  
       2020-03-19 10:45:51 +08:00
    走代理是一条,

    加 depth 也可以,后续分支按需拉
    AlexaZhou
        30
    AlexaZhou  
       2020-03-19 13:36:46 +08:00
    对各种命令行工具,可以用 proxychains 统一搞定

    proxychains git clone .... 就自动走代理了
    123444a
        31
    123444a  
       2020-03-22 01:44:20 +08:00 via Android
    ssh,从小没用过 https 拉代码
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3014 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 118ms · UTC 15:00 · PVG 23:00 · LAX 08:00 · JFK 11:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.