2010-09-01 29 views
27

Estoy considerando usar GIT o nuestras fotos familiares. El escenario es que tanto mi novia como yo usemos cámaras digitales, cargamos las fotos en cada una de nuestras computadoras. Pero aún quiero organizar las fotos en carpetas para diferentes eventos y hacer que esa organización se replique entre nuestras dos computadoras.usando git para imágenes

Al tener el maestro de repositorio GIT en nuestro servidor central también podemos ver las imágenes de nuestro televisor o acceder a ellas a través de FTP si las necesitamos mientras están lejos de casa.

Esto implica una estructura donde las imágenes no cambiarán muy a menudo. Rara vez van a moverse. La acción más común será agregar una carpeta con nuevas imágenes al repositorio y enviarla a la rama principal para que las imágenes estén disponibles para todos.

Ahora la pregunta: ¿Cómo se manejarán las imágenes en Git? ¿El depósito de Git se hinchará manteniendo una imagen para cada versión del repositorio? ¿O solo conservará el historial de una imagen cuando realmente cambie su contenido?

La diferencia en el uso del espacio de disco debe ser bastante grande para los dos escenarios dados.

+0

¿Ha considerado usar DropBox? DropBox es mucho más fácil de usar y también guarda un historial (hasta 30 días). –

+2

DropBox es un servicio externo que me hará pagar dinero por manejar mis fotos ... mis fotos son bastantes y son bastante grandes, entonces para este escenario no estoy seguro de que esté dispuesto a pagar por eso. – Morten

Respuesta

44

Cada objeto en su repositorio se almacenará una vez y se hará referencia a él mediante su suma SHA1. Esto significa que colocar tres copias de una imagen de 100KB en dos directorios de su repos utilizará 100KB, además de una cantidad sin importancia de gastos generales.

Lo mismo aplica para empujar, tirar y ramificar: Mientras que la suma SHA1 de la imagen no cambie, git nunca almacenará una segunda copia ni tendrá que mover más de una copia a través de la red.

Sin embargo, utilizará el doble de espacio en disco en cada máquina: Git mantiene una copia de todos sus datos en un directorio .git oculto en la raíz de su repositorio.

+2

¡Gran respuesta! Describe exactamente lo que me interesaba saber en Git-internal. – Morten

2

Es lo suficientemente inteligente como para sólo los cambios de pista y no crea una réplica completa del repositorio de imágenes

+0

Bueno, realmente no. Git no rastrea los cambios, rastrea los estados. Genera diffs sobre la marcha, en lugar de almacenar un estado como un estado inicial y una serie de diferencias como la subversión. En el caso de editar un archivo, git almacenará ambos archivos por completo, independientemente de lo poco que haya cambiado la edición. – meagar

+0

Bueno, en realidad no. Cuando Git coloca los objetos en paquetes, utiliza deltas, lo que puede resultar en un ahorro significativo de uso del disco. Así que asegúrese de empacar su repos con frecuencia y estará bien. – siride

+0

@siride No para imágenes que no cambian: p – meagar

6

Creo que se debe considerar el uso rsync. Por lo que entendí, solo quieres sincronizar tus carpetas de red, ¿verdad? ¿Existe una necesidad real de control de versiones?

+7

De hecho, recomendaría unison http://www.cis.upenn.edu/~bcpierce/unison (y específicamente), unison-gtk, sobre rsync, para este escenario. – gotgenes

+0

Si bien esto es cierto, no responde a la pregunta de cómo Git maneja imágenes binarias detrás de escena. En cuanto a rsync, solo asumirá máquinas linux/unix.Al menos una máquina usa Windows, y el soporte para git es mejor en Windows. Pero no, no es necesario versionar. – Morten

+0

unison parece interesante para el escenario de la imagen real – Morten

Cuestiones relacionadas