Git在Samba共享上的提交速度非常慢。我能做些什么来加速它?

Git在Samba共享上的提交速度非常慢。我能做些什么来加速它?,git,windows-7,samba,Git,Windows 7,Samba,我正在远程服务器上运行git存储库。我让它在远程服务器上设置了一个samba共享,这样我就可以将代码保存在那里,而不是本地的Windows7机器上。我们正在尝试使用git,因为svn速度太慢而且不可靠。git存在的问题是,对samba共享执行任何提交/克隆/拉入操作的速度都非常慢。如果我在Windows7机器上对本地目录执行提交/克隆/拉取操作,效果很好,但我们需要将代码放在远程服务器上。有什么想法吗?我真的可以用它 编辑: 我还应该提到的是,我已经运行了git gc——aggressive,但

我正在远程服务器上运行git存储库。我让它在远程服务器上设置了一个samba共享,这样我就可以将代码保存在那里,而不是本地的Windows7机器上。我们正在尝试使用git,因为svn速度太慢而且不可靠。git存在的问题是,对samba共享执行任何提交/克隆/拉入操作的速度都非常慢。如果我在Windows7机器上对本地目录执行提交/克隆/拉取操作,效果很好,但我们需要将代码放在远程服务器上。有什么想法吗?我真的可以用它

编辑:


我还应该提到的是,我已经运行了git gc——aggressive,但它并没有加快速度。

git并不打算在这种配置中使用。 这就像一级方程式赛车在土路上比赛一样

Git是一种DVCS或分布式版本控制。换句话说,每个开发人员都有一个克隆

您需要做的是在samba机器上设置git服务器存储库,并通过http或ssh访问repo

您可以使用以下项目:
或者更好的办法是在

上注册一个帐户,我对Git在SMB股票上的表现也有同样的问题。不幸的是,我无法在本地计算机上运行开发代码,因此我使用SMB装载远程目录,并在本地计算机上使用适当的文本编辑器编辑源文件

因为我希望在提交到存储库时感到舒适,所以我更喜欢在本地机器上运行的GUI客户端。但是,对于上面提到的性能问题,这有点棘手,需要花费大量时间

然而,我发现了一个圆滑的小解决办法。在将任何内容提交到存储库之前,我使用
rsync
将远程源的副本拉入本地硬盘,如下所示:

rsync -az --progress --exclude ".git" dev@my.devserver.com:/home/myapp/sourcecode /Devel/portal-mirror

这样,在进行差异和提交之前,只需不到一秒钟的时间就可以完成远程状态的完全1对1同步(将其绑定到Git应用程序中的键盘快捷键)。工作起来很有魅力。提交并推送到存储库后,我只需在dev服务器上执行
git重置--hard
git pull
,以将更改同步回来。

我们使用git和samba以及php storm运行相同的配置。它运行得很好。只有当我尝试在我们庞大的项目中使用“SourceTree”时,它需要很长时间才能刷新,因为(我认为)git会扫描每个文件

我尝试了一件事,并从中获得了一些性能改进,那就是稍微调整一下samba服务器:

配置文件:

socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
在查找samba加速时发现该行


另一个解决方案可能是一个恒定的1对1同步,它一直在后台运行,有点取代samba。也许RSYNC可以稍微修改一下。

你可以考虑稍微改变一下范式,让Web服务器在开发者的机器上共享。通过这种方式,所有的克隆/提交/编码都在本地完成,但是每个开发人员的站点只是在一个共享之外托管

现在我假设您的Web服务器将每个网站的根目录公开为samba共享。然后,开发人员将该共享装载到他或她的本地计算机上,克隆一些存储库,并使用该共享进行工作。在这种情况下,性能充其量也会很差,而且您还可能遇到字节范围锁定请求(BRL)等问题

相反,一种选择是直接克隆到每个开发人员计算机上的目录,并共享该目录。然后web服务器装载该共享


当然,理想情况下,每个开发人员都会运行自己的web服务器实例,但如果我正确地阅读了问题,那么在这种情况下,这可能不是一个选项。

我们需要远程运行它,因为它是一个web服务器。我们的个人机器不是网络服务器,我不明白。只有git服务器需要启用web。客户端使用http/ssh访问ITE每个开发人员都有一个repo的克隆。他们将克隆存储在web服务器上,以便在将代码推给所有其他开发人员之前测试代码。我们都使用Samba共享来访问本地机器上的代码。我已经设置了一个远程存储库,它不在web服务器上,但仅用于保存代码。正确的做法是让开发人员在本地拥有所有环境,这样他们就可以在自己的计算机上执行所有操作。总之,不要使用SAMBA共享,使用GitBlit-GitBlit是一个开源的纯Java堆栈,用于管理、查看、,您是否在服务器上运行Git命令,而repo在服务器的驱动器上?或者您在本地运行命令,但repo位于共享服务器的驱动器上?首先,我在本地机器上运行git命令,它调整samba共享上的代码,samba共享托管在web开发服务器上,这样我们就可以看到代码的作用。每个开发人员在共享上都有自己的文件夹。我们将更改推送到一个远程服务器,在那里存储我们的repo。是的,这样做是错误的。也许你也可以这样做——在本地进行repo,但是web服务器将使用dev计算机的共享文件夹。否则,您可能会遇到其他性能问题,例如,在本地驱动器上查找文件的速度比在共享驱动器上快得多。