Pregunta

Entonces sabes que muchas aplicaciones de Mac usan "paquetes":Para su aplicación, parece un solo archivo, pero en realidad es una carpeta con muchos archivos dentro.

Para que un sistema de control de versiones maneje esto, necesita:

  • revisa todos los archivos en un directorio, para que la aplicación pueda modificarlos según sea necesario
  • en el check-in,
    • confirmar archivos que han sido modificados
    • agregar nuevos archivos que la aplicación ha creado
    • marcar como eliminados los archivos que ya no están ahí (ya que la aplicación los eliminó)
    • gestionar esto como un cambio atómico

¿Alguna idea sobre la mejor manera de manejar esto con los sistemas de control de versiones existentes?¿Alguno de los sistemas de versiones es más adecuado en esta área?

¿Fue útil?

Solución

Para los sistemas SCM distribuidos como git y mercurial no debería ser un problema, como mencionó Matthew.

Si necesita utilizar un SCM centralizado como Subversion o CVS, puede comprimir (archivar) sus paquetes antes de registrarlos en el control de código fuente.Esto puede ser doloroso y requiere un paso adicional.Hay una buena publicación de blog sobre esto en Tapestry Central:

Paquetes de Mac OS X vs.Subversión

Este artículo muestra un script Ruby que administra el archivado por usted.

Otros consejos

Mercurial en versiones particulares basadas en archivos, no en estructuras de directorios.Por lo tanto, su árbol de trabajo, que es un repositorio completo, no muestra carpetas .svn en cada nivel.

También significa que un directorio que se reemplaza, como una aplicación u otro paquete, aún encontrará su contenido con nombres de archivos particulares bajo control de revisión.Los nombres de los archivos son monitoreados, no los inodos ni nada sofisticado por el estilo.

Obviamente, si se agrega un nuevo archivo al paquete, deberá agregarlo explícitamente a su repositorio.De manera similar, la eliminación de un archivo de un paquete debe realizarse con un 'hg rm'.

Todavía no existen GUI Mercurial decentes para OS X, pero si todo lo que hace es agregar/confirmar/fusionar, no es tan difícil usar una línea de comando.

Una actualización del futuro:

Si mal no recuerdo, el problema con la administración de paquetes en SVN era que todas las carpetas .svn se borraban cada vez que creabas un paquete.Esto ya no debería ser un problema, ahora que SVN almacena todo en una única carpeta .svn en la raíz.

Volviendo a sacar a la luz este hilo, desde octubre de 2013, iWork (Pages 5.0, etc.) ya no permite almacenar en 'archivos planos' (comprimidos), sino solo como paquetes.

El problema no es la creación de carpetas ocultas de control de versiones dentro de dichas estructuras (bueno, para svn lo es), sino como Marca dice en la pregunta:obtener una actualización atómica y automática de los archivos agregados o eliminados (por la aplicación, en este caso iWork), por lo que no necesitaría hacerlo manualmente.

Claramente, a iWork y Apple solo les molesta la usabilidad de iCloud.Sin embargo, tengo un caso genuino para almacenar .pages, .numbers y .keynote en un repositorio de Mercurial.Después de la actualización, todo se desmorona.¿Qué hacer?

Apéndice:

Encontró 'hg addremove' Eso me funciona.

$ hg help addremove
hg addremove [OPTION]... [FILE]...

add all new files, delete all missing files
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top