2012-08-23 10 views
10

Estoy ejecutando un repositorio de git en un servidor remoto. Lo tengo configurado un recurso compartido de samba en el servidor remoto para que pueda guardar mi código allí en lugar de en mi máquina local de Windows 7. Estamos tratando de analizar el uso de git, porque svn ha sido muy lento y poco confiable. El problema que estamos teniendo con git es que al hacer cualquier commit/clones/pulls en el samba share, ejecuta super super slow. Si hago un commit/clone/pull en un directorio local en mi máquina con Windows 7, funciona muy bien, pero necesitamos que el código esté en el servidor remoto. ¿Algunas ideas? Realmente podría usarlo.Git realiza confirmaciones muy lentas en una acción de Samba. ¿Qué puedo hacer para acelerarlo?

Editar:

También debería mencionar que ya he corrió git gc --aggressive y no ha acelerado hacia arriba.

+0

¿Ejecuta los comandos de git en el servidor y el repositorio se encuentra en la unidad del servidor? ¿O ejecuta comandos localmente, pero el repositorio se encuentra en la unidad del servidor compartido? Deberías hacer primero. – kan

+0

Ejecuto los comandos git en una máquina local, que ajusta el código en un recurso compartido de samba, el recurso compartido samba está alojado en un servidor de desarrollo web para que podamos ver lo que hace nuestro código. Cada desarrollador tiene su propia carpeta en el recurso compartido. Impulsamos nuestros cambios a un servidor remoto donde almacenamos nuestro repositorio. –

+2

Sí, es una forma incorrecta de hacerlo. Tal vez podrías hacerlo a la inversa: tienes un repositorio local, pero el servidor web usará la carpeta compartida de la computadora del desarrollador. De lo contrario, tendrías otros problemas de rendimiento, p. find-in-files funciona mucho más rápido en la unidad local que compartido. – kan

Respuesta

2

Git no está destinado a ser utilizado en esta configuración. Es como tener una Fórmula 1 y correr en un camino de tierra.

Git es un DVCS, o control de versión distribuida. En otras palabras, cada desarrollador obtiene un clon.

Lo que hay que hacer es configurar un servidor de repositorio git en esa máquina de samba y accede a la cesión temporal a través de http o ssh

Puede utilizar proyectos como GitBlit o mejor aún una cuenta en Github

+2

Necesitamos ejecutarlo de forma remota porque es un servidor web. Nuestras máquinas individuales no son servidores web. –

+1

No lo entiendo solo el servidor git debe estar habilitado para la web. los clientes usan http/ssh para acceder a él –

+1

Cada desarrollador individual tendrá un clon del repositorio. Almacenan ese clon en el servidor web para que puedan probar su código antes de enviarlo a todos los demás desarrolladores. Todos usamos acciones de Samba para acceder a nuestro código en nuestras máquinas locales. He configurado un repositorio remoto que no está en el servidor web, pero está allí únicamente para contener el código. –

3

I tuvo el mismo problema con el rendimiento de Git sobre las acciones de SMB. Desafortunadamente no puedo ejecutar el código de desarrollo en mi máquina local, entonces uso SMB para montar el directorio remoto y editar los archivos fuente usando un editor de texto apropiado en mi máquina local.

Como quiero algo de confort al comprometerme con el repositorio, prefiero un cliente GUI que se ejecute en mi máquina local. Sin embargo, con los problemas de rendimiento mencionados, esto es un poco complicado y lleva mucho tiempo.

Sin embargo: Encontré una pequeña y elegante solución. Antes de comprometerse nada al repositorio, saco una copia de las fuentes remotas a mi disco duro local utilizando rsync, así:

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

De esa manera se tarda menos de un segundo para hacer un total de 1-a-1 sincronización del estado remoto (vinculado esto a un atajo de teclado en mi aplicación Git) antes de hacer las diffs y commits. Funciona de maravilla. Después de confirmar y enviar al repositorio, acabo de hacer git reset --hard y git pull en el servidor de desarrollo para volver a sincronizar los cambios.

2

Estamos ejecutando la misma configuración con git y samba en combinación con php-storm. Está funcionando bastante bien. Solo cuando trato de usar "SourceTree" en nuestro gran proyecto, lleva años actualizar, porque (creo) git escanea todos y cada uno de los archivos para hacerlo.

Una cosa que intentó, y me dieron mejoras en el rendimiento de menor importancia fuera de él, era para ajustar el servidor Samba un poco:

archivo de configuración:

socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536 

encontró que la línea en la búsqueda de la samba acelerar.

Otra solución podría ser una sincronización 1 en 1 constante que se ejecuta todo el tiempo en el fondo como reemplazo de samba. Tal vez la rsync podría modificarse un poco para hacerlo.

0

Puede considerar invertir un poco el paradigma y hacer que el servidor web monte participaciones en las máquinas de los desarrolladores. De esta forma, toda la clonación/confirmación/codificación se realiza de forma local, pero el sitio de cada desarrollador simplemente se aloja en una ubicación compartida.

Ahora supongo que su servidor web está exponiendo el directorio raíz de cada sitio web como un recurso compartido de samba. Un desarrollador luego monta ese recurso compartido en su máquina local, clona un depósito y funciona fuera del recurso compartido. El rendimiento en ese caso va a ser pobre en el mejor de los casos, y también puede tener problemas con las solicitudes de bloqueo de rango de bytes (BRL) y demás.

En su lugar, una opción es clonar directamente en un directorio en la computadora de cada desarrollador y compartir ese directorio. El servidor web luego monta ese recurso compartido.

Por supuesto, idealmente, cada desarrollador debería ejecutar su propia instancia del servidor web, pero si estoy leyendo las preguntas correctamente, tal vez no sea una opción en este caso.

Cuestiones relacionadas