如何加快从映射的网络驱动器获取git的速度

时间:2018-12-20 17:26:10

标签: git

我在网络驱动器上有裸露的git repo。我在机器上进行编辑的本地工作仓库,然后将其推/拉到网络驱动器上的裸仓库。我的机器运行Windows。

在工作时,与网络驱动器的连接速度很快,并且在合理的时间内可以进行所有操作。

当我在远程工作时,我通过VPN连接,这显然是一个较慢的连接。通过VPN进行提取/推送/拉取要慢几个数量级。我正在寻找一种加快速度的方法。

我怀疑当git做“增量压缩”之类的事情时,它可能会浪费带宽,方法是将信息下载到我的计算机上,对其进行压缩,然后再将压缩后的数据发送到我的仓库中。如果远程git repo在可以通过网络发送数据之前可以本地计算压缩率的远程计算机系统上,则压缩步骤才有意义。但是,映射的网络驱动器只是一个远程文件系统-所以我想知道是否可以通过跳过压缩步骤来加快速度。

1)git正在做我认为正在做的事情吗?
2)git可以区分远程计算机系统和远程文件系统上的存储库吗?
3)是否可以禁用远程文件系统的压缩步骤?
4)这是完成我想做的最好的方法,还是有更好的方法?

例如:

$ git fetch
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (6/6), done.  <-- Is this wasted time/bandwidth?
remote: Total 6 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From <repo>
   5bf23b5..fbc1b90  master     -> origin/master

1 个答案:

答案 0 :(得分:2)

  

我怀疑当git做“增量压缩”之类的事情时,它可能会浪费带宽,方法是将信息下载到我的计算机上,对其进行压缩,然后再将压缩后的数据发送到我的仓库中。如果远程git repo在可以通过网络发送数据之前可以本地计算压缩率的远程计算机系统上,则压缩步骤才有意义。但是,映射的网络驱动器只是一个远程文件系统-所以我想知道是否可以通过跳过压缩步骤来加快速度。

您的分析在这里是正确的。但是,除了使用路径名而不是面向方案的URL来告诉Git文件系统 是本地的之外,没有其他方法可以实现。

也就是说:

git clone https://example.com/path/to/repo.git

或:

git clone ssh://user@example.com/path/to/repo.git

通过网络访问,但是:

git clone file://path/to/repo.git

就Git而言,该存储库完全位于另一台计算机上,该计算机运行自己的Git服务器。 (在幕后,Git产生了另一个Git充当服务器,因此两者都在同一台机器上运行。)但是:

git clone /path/to/repo.git

告诉Git它应该将另一个存储库视为位于另一台计算机上。相反,它可以直接访问文件。

这是否真的会更快,或者最终会更慢,还不清楚,但至少您不会浪费Git压缩时间。相反,您会浪费时间进行访问。

一个更好的解决方案是避免完全使用网络驱动器功能:找到一个真正在其上(或至少快速访问)该驱动器的服务器,并将您的计算机指向该计算机。让计算机(快速)访问存储库,压缩数据(尽力使用其CPU),然后通过慢速网络将压缩数据发送到您的计算机,然后保留存储库的 local (非网络驱动器)副本。第一个克隆将很慢,但是在那之后,将数据传输降至最低的压缩和具有/希望协议将意味着您不必在系统的慢速部分发送许多兆字节。