Acceda al repository dvcs desde la aplicación web python: gestione ediciones y confirmaciones simultáneas

Estamos trabajando en una aplicación web utilizando django que permitirá la modificación de files que se almacenan en un repository de vcs (actualmente git).

Escribir en el file en el área de trabajo local se realizará siempre que la edición se ejecute en el browser. Agregar / confirmar ocurrirá cuando el usuario termine con la edición (save) o después de un lapso de time dado.

Debido a que se ejecutarán sesiones web paralelas, me preocupa el acceso concurrente a los files versionados:

  • al leer / escribir en el espacio de trabajo local
  • como queremos que los posts de confirmación contengan posts específicos para la modificación de cada file, también necesitamos algún tipo de locking para evitar commit operaciones de add y commit entrelacen.

Así que supongo que deberíamos usar algún tipo de locking y estamos buscando un mecanismo que sea robusto y compatible con la architecture de la aplicación web:

  • Leí sobre rebaños, pero supongo que no está adaptado a una aplicación sin estado; Probablemente no pueda sostener fácilmente un filehandle, ¿o sí?
  • Podría crear algunos types de files filename.ext.lock para gestionar de forma programática la exclusión de acceso mutuo
  • O podría tener una table dedicada en DB para el mismo objective
  • Otra solución sería delegar accesos de vcs (file y repo) a un process dedicado, pero no pude encontrar nada todavía; La búsqueda de git daemon solo arroja resultados que se refieren a operar en repositorys completos para clon / push / pull / …, no para operaciones a nivel de file

¿Ves otros medios que los de arriba? ¿Conoces aspectos de los que debemos ocuparnos especialmente?

Estoy de acuerdo con Magnus Bäck. A diferencia de SVN, puede crear copys diferentes de git-repos y fusionarlas entre sí sin un server, solo en su máquina local. Entonces puede tener un montón de copys del mismo repository y cada cliente / process obtiene su propia carpeta. Puede eliminarlos y copyrlos cuando necesite más o less.

También puedes hacer

 git remote add local_original file:///var/git/project.git 

(fuente)

en cada copy y usar esto para

 git push local_original 

para impulsar los cambios a este repository local para sincronizar a todos los usuarios que trabajan en él.

Yo preferiría copyr porque puede escalar mejor que las cerraduras. Aquí hay algo que implementé que no tiene que escalar pero que implementaría con copy si tuviera que hacerlo: https://github.com/niccokunzmann/gh-pages-edit