什么';通过慢速网络连接在git中工作的最快方式是什么?

什么';通过慢速网络连接在git中工作的最快方式是什么?,git,vpn,Git,Vpn,情况是这样的:在工作中,我们有相当多的分支机构,我们没有保持回购协议的整洁,偶尔添加/删除大型文件或诸如此类的内容,很少删除死分支机构 所以今天是下雪天,我必须在家工作。我有一个缓慢的VPN连接,我所需要的是以最快的方式到达我关心的一个分支并开始工作,并能够将提交推回 在SVN中,我只需更新所需的路径/文件,就可以立即工作。和大多数git新手一样,我只有少数几个可信任的命令,我的git备份克隆或git拉将太慢 因此,这似乎是一个由两部分组成的问题: 如何克隆回购协议以尽快开始工作,以及 如何从该

情况是这样的:在工作中,我们有相当多的分支机构,我们没有保持回购协议的整洁,偶尔添加/删除大型文件或诸如此类的内容,很少删除死分支机构

所以今天是下雪天,我必须在家工作。我有一个缓慢的VPN连接,我所需要的是以最快的方式到达我关心的一个分支并开始工作,并能够将提交推回

在SVN中,我只需更新所需的路径/文件,就可以立即工作。和大多数git新手一样,我只有少数几个可信任的命令,我的git备份克隆或git拉将太慢

因此,这似乎是一个由两部分组成的问题:

  • 如何克隆回购协议以尽快开始工作,以及
  • 如何从该回购中拉/推(编辑、提交、拉、推)
  • 工作解决方案(根据@g19fanatic以下建议):

    很好,这让我有了一个有效的回购协议


    唯一的问题是,它最初传输的数据是下面的两倍,但它确实让回购处于可用状态。我会考虑这个问题的答案,但我认为初始传输大小可能会有所改进。

    在这里做一个小测试,我能够做到以下几点

    我们在网络上有一个共享的——裸回购协议

    我的远程设置为
    git remote add origin

    我执行一个
    git pull origin--depth=1
    (不是在
    git fetch
    ,而是
    git pull

    这将成功地仅提取此分支的“头+深度”提交。我可以对这个和那个做一些承诺,然后将它推出(
    gitpush
    应该可以很好地工作),而不会出现问题

    要从共享repo中提取新提交和新提交,我必须显式键入
    git pull origin
    。因为这是我最初做拉(显式)的方式,所以这次我必须做同样的事情

    这不应该比您最初设置的深度更深入地分析历史(它不在乎)


    完整地说,您还可以在克隆回购协议时进行深度设置:

    git clone-b--depth=

    有几种方法可以减少带宽:

    • 仅克隆所需的分支(
      --单分支
      ,此分支仅用于克隆,不用于拉取;拉取时,可以指定所需的分支)
    • 仅克隆文件的最新版本(
      --depth 1
      ,就像您所做的那样)。默认情况下,这意味着
      --单分支
    • 仅克隆您需要的文件(又称稀疏签出,如)
    此外,如果拉取一直失败,我将使用类似于下面的bash脚本继续重试,直到成功完成:

    #!/bin/bash
    
    until $( git pull --depth=1 origin master ); do        # <-- pull command goes here
        echo "Pulling repository failed; retrying..."
    done
    
    #/bin/bash
    直到$(git pull--depth=1原始主机);多谢
    这个“答案”仅仅是我自己解决这个问题的失败尝试的历史记录(尽管下面的克隆操作传输的数据少于当前的工作解决方案)


    第一次失败的尝试:

    第一部分。似乎最好的解决方法是:

    与git克隆整个回购协议及其所有分支和历史记录不同,创建一个新的空回购协议并获取我关心的一个分支,深度为1(无历史记录):

    mkdir
    光盘
    初始化
    git fetch--深度=1:refs/remotes/origin/
    git签出
    
    这很好,因为它执行的网络传输比完整的git克隆或pull要小得多

    但是现在我在第二部分中遇到了问题,从这个浅存储库中拉和推。我的同事整天都在做一些小的更新,我也是,所以应该可以快速地拉动和推动这些小的增量更改。但是,当我试图将分支设置为跟踪远程对象时,git pull会尝试提取完整的历史记录。即使使用--depth 1运行pull或fetch,似乎也希望再次传输整个快照(而不是少量增量更改)

    那么在这种情况下我能做什么呢?(除了显而易见的——清理回购协议,删除旧的历史项目和死分支。)

    第二次尝试失败(根据@G19Fantaic的以下建议):

    按照@g19fanatic的建议,我使用

    > mkdir <project_name>
    > cd <project_name>
    > git init
    > git remote add origin <repo_url>
    > git pull origin <branchname> --depth=1
    remote: Counting objects: 9403, done.
    remote: Compressing objects: 100% (6675/6675), done.
    remote: Total 9403 (delta 2806), reused 7217 (delta 2136)
    Receiving objects: 100% (9404/9403), 325.63 MiB | 206 KiB/s, done.
    Resolving deltas: 100% (2806/2806), done.
    ...
    
    >mkdir
    >光盘
    >git初始化
    >git远程添加源
    >git pull原点--深度=1
    远程:计数对象:9403,完成。
    远程:压缩对象:100%(6675/6675),完成。
    远程:总计9403(增量2806),重复使用7217(增量2136)
    接收对象:100%(9404/9403),325.63 MiB | 206 KiB/s,完成。
    解析增量:100%(2806/2806),完成。
    ...
    
    这创建了一个跟踪分支,并且只正确地提取了1个分支的历史记录(~9400个对象,325MB,而完整的repo是~46k个对象)。然而,再一次,如果不获取比我认为需要获取的信息更多的信息,我似乎无法git pull。我想我应该能够在几个对象和几千字节内提取我的同事提交的内容。但我看到的是:

    > git pull origin <branchname>
    remote: Counting objects: 45028, done.
    remote: Compressing objects: ... ^C
    
    >git拉入原点
    远程:计数对象:45028,完成。
    远程:压缩对象:^C
    
    这会牵扯到整个回购协议中的所有对象,所以我打破了它。我用--depth=1参数尝试了拉:

    > git pull origin <branchname> --depth=1
    remote: Counting objects: 9870, done.
    remote: Compressing objects: 100% (7045/7045), done.
    Receiving objects:   4% (430/9870), 4.20 MiB | 186 KiB/s ^C
    
    >git pull原点--深度=1
    远程:计数对象:9870,完成。
    远程:压缩对象:100%(7045/7045),完成。
    接收对象:4%(430/9870),4.20 MiB | 186 KiB/s^C
    

    9k+对象将类似于初始拉力,但我给出了一点,因为我认为其中一些对象可能已经在本地存在。然而,在它传输了4+MB之后,我破坏了这个命令,因为它似乎再次进行了整个传输。请记住,我希望同事提供一些小的更新,但我没有时间每次提取300MB。

    我的本地回购设置如下:
    mkdir newRepo;cd newRepo
    然后是git init
    然后是git remote添加…所以我
    mkdir <project_name>
    cd <project_name>
    git init
    git fetch --depth=1 <repo_url> <branchname>:refs/remotes/origin/<branchname>
    git checkout <branchname>
    
    > mkdir <project_name>
    > cd <project_name>
    > git init
    > git remote add origin <repo_url>
    > git pull origin <branchname> --depth=1
    remote: Counting objects: 9403, done.
    remote: Compressing objects: 100% (6675/6675), done.
    remote: Total 9403 (delta 2806), reused 7217 (delta 2136)
    Receiving objects: 100% (9404/9403), 325.63 MiB | 206 KiB/s, done.
    Resolving deltas: 100% (2806/2806), done.
    ...
    
    > git pull origin <branchname>
    remote: Counting objects: 45028, done.
    remote: Compressing objects: ... ^C
    
    > git pull origin <branchname> --depth=1
    remote: Counting objects: 9870, done.
    remote: Compressing objects: 100% (7045/7045), done.
    Receiving objects:   4% (430/9870), 4.20 MiB | 186 KiB/s ^C