Git在Samba共享上提交非常缓慢。我该怎么做才能加快速度?

12
我在远程服务器上运行一个git仓库。我在远程服务器上设置了一个samba共享,以便我可以将代码保存在那里,而不是在我的本地Windows 7机器上保存。我们正在尝试使用git,因为svn非常缓慢和不可靠。我们遇到的问题是,在samba共享上执行任何提交/克隆/拉取操作都非常缓慢。如果我在我的Windows 7机器上的本地文件夹中进行提交/克隆/拉取操作,它可以正常工作,但是我们需要将代码放在远程服务器上。有什么好的建议吗?我真的很需要帮助。
编辑:
我还应该提到,我已经运行了git gc --aggressive,但没有加速。

你是在服务器上运行git命令,而仓库位于服务器驱动器上吗?还是你在本地运行命令,但仓库位于共享服务器驱动器上?你应该选择第一种方式。 - kan
我在本地机器上运行git命令,它会调整Samba共享上的代码。Samba共享托管在Web开发服务器上,这样我们就可以看到我们的代码执行情况。每个开发人员都有自己的文件夹在共享中。我们将更改推送到远程服务器,其中存储着我们的repo。 - Serenade X
2
是的,这样做是错误的方式。也许你可以反过来做 - 在本地拥有存储库,但是Web服务器将使用开发人员计算机的共享文件夹。否则,您将遇到其他性能问题,例如,在本地驱动器上查找文件比共享驱动器快得多。 - kan
4个回答

3

Git不适合在这种配置下使用。这就像让一辆F1赛车在土路上比赛。

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

您需要在Samba机器上设置一个git服务器仓库,并通过http或ssh访问该仓库。

您可以使用像GitBlit这样的项目,甚至更好的选择是在Github上拥有一个帐户。


2
我们需要远程运行它,因为它是一个Web服务器。我们的个人计算机不是Web服务器。 - Serenade X
1
我不明白。只需要启用Git服务器的Web功能,客户端使用HTTP / SSH访问它。 - Olivier Refalo
1
每个开发者都会有一个仓库的克隆版本。他们将该克隆版本存储在Web服务器上,以便在将代码推送给其他开发者之前测试其代码。我们所有人都使用Samba共享来访问本地机器上的代码。我已经设置了一个远程仓库,它不在Web服务器上,而是专门用于保存代码。 - Serenade X
2
正确的做法是让开发人员在本地拥有所有环境,这样他们就可以在自己的计算机上完成所有工作。 - kan
1
Vagrant可能会帮助本地开发人员搭建自己的Web服务器进行测试。然后代码将在本地运行,并被拉入虚拟机上的Web服务器中。 - Alex
显示剩余3条评论

3
我曾经遇到过使用SMB共享时Git性能下降的问题。不幸的是,我不能在本地机器上运行开发代码,因此我使用SMB挂载远程目录,并使用本地机器上的适当文本编辑器编辑源文件。
由于我希望在提交到仓库时有一些舒适度,所以我更喜欢在本地机器上运行GUI客户端。然而,由于提到的性能问题,这有点棘手,需要花费很多时间。
但是:我找到了一个简洁的解决方法。在提交任何东西到仓库之前,我使用rsync将远程源代码复制到我的本地硬盘驱动器上,就像这样:
rsync -az --progress --exclude ".git" dev@my.devserver.com:/home/myapp/sourcecode /Devel/portal-mirror

这样做可以在进行差异比较和提交之前,仅需不到一秒钟的时间即可完成远程状态的完整1对1同步(将其绑定到我的Git应用程序中的键盘快捷方式)。效果非常好。提交并推送到存储库后,我只需在开发服务器上执行git reset --hardgit pull以将更改同步回来。


2
我们正在使用git和samba与php-storm相结合的相同配置。它运行得非常好。只有当我尝试在我们庞大的项目中使用"SourceTree"时,它需要很长时间才能刷新,因为(我认为)git需要扫描每个文件来完成这个操作。
我尝试过一件事情,并从中获得了轻微的性能提升,那就是微调samba服务器:
配置文件:
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536

在寻找提升Samba速度的过程中发现了这行代码。

另一个解决方案可能是一种常量1对1同步,它会一直在后台运行,有点取代了Samba。或许可以修改rsync来实现此功能。


0
你可以考虑一下改变一下范式,让web服务器在开发人员的机器上挂载共享文件夹。这样克隆/提交/编码都是在本地进行的,但每个开发人员的站点只是在共享上托管而已。
我现在假设你的Web服务器正在将每个网站的根目录作为Samba共享暴露出来。然后,开发人员将该共享文件夹挂在本地机器上,克隆一些仓库,并在共享上工作。在这种情况下,性能最多会很差,而且您可能还会遇到字节范围锁定请求(BRL)等问题。
相反,一个选项是直接克隆到每个开发者计算机上的某个目录,并共享该目录。然后,Web服务器会挂载该共享文件夹。
当然,理想情况下,每个开发人员都应该运行自己的Web服务器实例,但如果我正确理解了问题,也许在这种情况下这不是一个选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接