¿Cómo usar git para sincronizar files?

Tengo una necesidad de synchronization de files distribuidos. Entonces, antes que nada, ¿alguna sugerencia? Mi idea es git ya que la velocidad es un problema.

Mi conocimiento de git es bastante rudimentario, así que esto es lo que hice.

Descargué el git portátil (estoy en la PC así que msysgit). Puse una copy en c: \ root \ git y una copy en c: \ root \ git c: \ client \ git \

Creé un directory c: \ temp \ root \ content y creé algunos files en él

c:\root\content>..\git\bin\git.exe init c:\root\content>..\git\bin\git.exe add * c:\root\content>..\git\bin\git.exe commit -f c:\client>..\git\bin\git.exe clone file:///c:\root\content 

¡Esto crea un directory de contenido pero está vacío! Los files comprometidos con la raíz no están allí.

También cuando hago un command de extracción consigo

 C:\temp\client\content\content>c:\temp\client\git\bin\git.exe pull fatal: The remote end hung up unexpectedly fatal: The remote end hung up unexpectedly Your configuration specifies to merge the ref 'master' from the remote, but no such ref was fetched 

Claramente, me falta un concepto. ¿Que esta pasando?

Consulte en http://sparkleshare.org/

Sparkleshare le brinda una experiencia de usuario similar a la de Dropbox, excepto que su motor de synchronization subyacente es git. No es lo más estable, pero puedes ver su salida de logging para ver qué commands de git va a lograr una synchronization perfecta. Una vez que los aprenda, puede simplemente hacer sus propios scripts de synchronization estables. Creo que la mayoría de los problemas de sparkleshare están en la GUI.

git-annex podría ser otra herramienta a considerar.

Git puede ser una buena herramienta para sincronizar la fuente entre el desarrollo y la producción, por una razón: hace que sea fácil de "corregir" en la producción y comprobar la solución de nuevo en el tree. Por supuesto, siempre debe reproducir el error en un entorno de desarrollo o testing y arreglarlo allí, pero a veces no puede hacerlo.

En lugar de git add * , usa git add .

Use el git status antes de comprometerse para asegurarse de que los files apropiados se organicen para la confirmación.

Solo traté de reproducir tus pasos.

git commit -f no hizo nada con la versión 1.6.5.1 que acabo de instalar. Pero debería darle un largo post de error.

 mkdir repo1 repo2 cd repo1 git init ( create files ) git add * git commit -m "initial commit" cd ..\repo2 git clone ..\repo1 . 

y los files que creé en repo1 aparecen en repo2 .

Como sugirió Davr en los comentarios, puedes probar Unison . Al hacer que todos sus hosts se sincronicen con un concentrador central , puede tener synchronization n-way. Unison no conserva el historial, por lo que si lo desea, debe progtwigr la ejecución de rdiff-backup todos los días en uno de sus hosts (preferiblemente el que tenga el disco duro más grande y confiable). Ambas herramientas tienen binarys de Windows.

También consideré usar Git para la synchronization de files, pero agregar, comprometer, tirar y fusionar manualmente es demasiado trabajo (una herramienta solo es útil si la usas). En mi cabeza he diseñado un pequeño process de bandeja de sistema de Python o Ruby para ver cambios en tu repository, molestarte cuando está sucio, tener opciones para confirmar automáticamente después de un período sin cambios, y también hacer push / pull automático. La resolución de conflictos de fusión se haría usando una herramienta existente.

Para get más detalles, consulte este artículo . Acabo de escribir sobre la synchronization de files personales.