Usando Dropbox como directory de trabajo git en varias máquinas: los commits no se sincronizan perfectamente

En primer lugar, me gustaría hacer hincapié en que esta pregunta NO es sobre alojar mi repository central en Dropbox, y que soy bastante nuevo en el uso de git. Ninguna de las otras preguntas relacionadas con Dropbox y git que pude encontrar realmente responden a mi pregunta; todos tratan de alojar su repository con Dropbox o si es una "buena idea" usar los dos juntos, ninguno de los cuales es lo que estoy preguntando aquí.

Mi pregunta es la siguiente: tengo dos computadoras, cada una de arranque doble Windows y Ubuntu (una computadora portátil y una computadora de escritorio). Tengo mi repository local de git (clonado de un repository github) ubicado en una carpeta de Dropbox para que se sincronice entre máquinas y sistemas operativos. Cuando realizo una confirmación en una máquina / sistema operativo, no parece estar sincronizando correctamente el estado de confirmación con las otras máquinas.

p.ej:

En mi escritorio de Windows, realizo un cambio en foo.cpp. Luego 'git commit -a' y 'git push', empujando mis cambios al repository alojado de github. Los cambios en los files también se sincronizan en mi carpeta de Dropbox, y cuando inicio session en mi computadora portátil con Windows en la escuela, todo se descarga sin problemas. Sin embargo, cuando escribo 'git status', dice:

# On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: foo.cpp # no changes added to commit (use "git add" and/or "git commit -a") 

Pero ya he confirmado estos cambios en mi otra máquina, aparentemente, en el mismo directory de trabajo. Un bash de 'git pull' desde los serveres de github me da el post de que todo está 'Ya actualizado'.

Hubiera esperado que el estado del repository fuera sincronizado a la perfección por Dropbox. ¿Alguien está familiarizado con una forma de evitar esta situación? ¡Gracias!

TL; DR

No use Dropbox para operaciones concurrentes con Git.

La consistencia eventual causará tu pena

Dropbox te brinda consistencia eventual . Usarlo como una tienda de respaldo para las operaciones críticas de Git es una Idea Mala ™. Es aún peor si lo está utilizando como un tree de trabajo en lugar de como un repository simple. Ciertamente puede hacerlo, pero necesita asimilar las limitaciones de este enfoque.

Dropbox y Spideroak Hive están bien si quieres usar directorys sincronizados como un tree de trabajo para un usuario a la vez. Solo asegúrese de que sus files y carpetas estén totalmente sincronizados antes de acceder a ellos desde otro sistema. Siempre que se adhiera a un flujo de trabajo de un solo usuario para un solo sistema, no debe tener problemas, pero su millaje puede variar.

Marcas de time

También puede tener problemas si usa varias máquinas que no están de acuerdo con el time. Si no está ejecutando NTP, el reloj de una máquina podría estar adelante o detrás de la otra. Esto puede llevar a situaciones en las que el service de synchronization cree que un file nuevo es, de hecho, un file anterior (o viceversa). En resumen, cualquier cosa que dependa de las marcas de time puede ser propensa a errores.

La precisión de las marcas de time es especialmente importante si usa GNU make u otras herramientas que dependen de ellas. Si vas a utilizar Dropbox para sincronizar un tree de trabajo, asegúrate de que tu reloj sea preciso en todos los sistemas que tocarán ese tree.