Git делает очень медленные коммиты на долю Samba. Что я могу сделать, чтобы ускорить его?

Я запускаю репозиторий git на удаленном сервере. Я установил на Samba share на удаленном сервере, поэтому я могу сохранить свой код там, а не на своей локальной машине Windows 7. Мы пытаемся изучить git, потому что svn был настолько медленным и ненадежным. Проблема, с которой мы сталкиваемся с git, заключается в том, что выполнение каких-либо коммитов/клонов/вытягиваний на samba share run супер супер медленно. Если я делаю commit/clone/pull на локальном каталоге на моем компьютере с Windows 7, он отлично работает, но нам нужен код, который будет на удаленном сервере. Есть идеи? Я мог бы действительно использовать его.

Edit:

Я должен также упомянуть, что я уже выполнил git gc -aggressive, и он не ускорил его.

Ответ 1

У меня была такая же проблема с производительностью Git по сравнению с SMB-пакетами. К сожалению, я не могу запустить код разработки на своей локальной машине, поэтому я использую SMB для монтирования удаленного каталога и редактирования исходных файлов с помощью соответствующего текстового редактора на моей локальной машине.

Так как я хочу некоторого комфорта при передаче в репозиторий, я предпочитаю клиент GUI, который работает на моей локальной машине. С указанными проблемами производительности это немного сложно, и занимает много времени.

Однако: я нашел гладкое небольшое обходное решение. Прежде чем что-либо передать в репозиторий, я вытаскиваю копию удаленных источников на локальный жесткий диск с помощью rsync, например:

rsync -az --progress --exclude ".git" [email protected]:/home/myapp/sourcecode /Devel/portal-mirror

Таким образом, для выполнения полной 1-к-1 синхронизации удаленного состояния требуется меньше секунды (привязано это к сочетанию клавиш в моем приложении Git), прежде чем выполнять разности и фиксации. Работает как шарм. После фиксации и нажатия в репозиторий я просто делаю git reset --hard и git pull на сервере dev, чтобы синхронизировать изменения.

Ответ 2

Git не предназначен для использования в этой конфигурации. Это похоже на получение Формулы 1 и гонки на грунтовой дороге.

Git - это управление DVCS или распределенная версия. Другими словами, каждый разработчик получает клон.

Что вам нужно сделать, это установить серверный репозиторий git на этом компьютере samba и получить доступ к репо через http или ssh

Вы можете использовать такие проекты, как GitBlit или даже лучше аккаунт на Github

Ответ 3

Мы используем ту же конфигурацию с git и samba в сочетании с php-storm. Он работает довольно хорошо. Только когда я пытаюсь использовать "SourceTree" в нашем огромном проекте, для обновления требуется возраст, потому что (я думаю) git сканирует каждый отдельный файл, чтобы сделать это.

Одна вещь, которую я пробовал, и я получил незначительные улучшения в производительности, заключался в том, чтобы немного настроить сервер samba:

Файл конфигурации:

socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536

Нашел эту строку при поиске ускорения самбы.

Другим решением может быть постоянная синхронизация 1 на 1, которая работает все время в фоновом режиме для замены samba. Возможно, rsync может быть изменен для этого.

Ответ 4

Вы можете подумать о том, чтобы немного изменить парадигму, и чтобы на компьютерах разработчиков был установлен общий веб-сервер. Таким образом, все клонирование/кодирование/кодирование выполняются локально, но каждый сайт разработчика просто размещается у общего ресурса.

В настоящий момент я предполагаю, что ваш веб-сервер подвергает каждый корневой каталог сайта как долю samba. Затем разработчик монтирует этот ресурс на своей локальной машине, клонирует какой-то репозиторий и работает с долей. Производительность в этом случае в лучшем случае будет плохой, и вы также можете столкнуться с проблемами с запросами блокировки диапазона байтов (BRL) и т.д.

Вместо этого параметр должен клонировать непосредственно в каталог на каждом компьютере разработчика и совместно использовать этот каталог. Затем веб-сервер монтирует этот ресурс.

Конечно, в идеале каждый разработчик запускает свой собственный экземпляр веб-сервера, но если я правильно читаю вопросы, возможно, это не вариант в этом случае.