Git vs SVN con files sin text / grandes proyectos

He estado aprendiendo Git las últimas semanas y me gusta mucho la forma en que funciona en comparación con SVN. La razón principal por la que estoy buscando cambiar completamente es que la fusión es supuestamente mucho más fácil con pocos conflictos y el hecho de que puedo cometer localmente. Esto promueve el uso de muchas twigs (como una twig por boleto / problema / tarea / etc.) y también promueve muchos compromisos. Solo uso twigs si lo necesito en SVN (ya que las fusiones a menudo producen conflictos) y solo me comprometo cuando estoy 100% seguro de que el problema es la corrección (en lugar de confirmaciones incrementales, que serían más agradables).

Ahora, una preocupación que tengo sobre git como lo he estado leyendo es sobre files de text / proyectos grandes. Por ejemplo, estoy trabajando en un proyecto de juego actualmente controlado en SVN. Ahora con un proyecto de juego, habrá una gran cantidad de files que no sean de text, como arte, sonido y otros files binarys, y algunos de los files pueden ser bastante grandes. ¿Qué tan bien maneja git un file que no es de text / files binarys grandes? ¿Cuáles son algunas de las consideraciones que debo tener en count si quiero exportar un proyecto como este a git?

Una de las grandes diferencias en cómo Git almacena datos en comparación con otros sistemas de control de versiones es que Git almacena el contenido del file por completo como un solo object. Eso significa que cada versión de cada file existe como un file completo en su repository (aunque está muy comprimido). Entonces, mientras que otro VCS almacena las diferencias / deltas entre dos versiones, y como tal maneja los files binarys y de text de manera diferente (ya que los files binarys no son tan modificables), Git simplemente los maneja todos idénticos.

Como tal, trabajar con files binarys en Git no es diferente a usar cualquier otro tipo de file. Solo debe tener en count que la creación de versiones de files muy grandes boostá mucho el tamaño de su repository (ya que cada versión individual de ese file grande se almacena tal como está, incluso si el cambio binary real fue pequeño). Sin embargo, la compression de Git funciona de maravilla y hace que no te des count de esto por lo general. Especialmente si solo está hablando de los activos de un progtwig, probablemente no tendrá ninguna dificultad.

Añadiendo la respuesta de @ poke

Soy un ávido usuario de Git en estos días, pero habiendo trabajado en un gran proyecto en el que había muchos files binarys, sobre todo cremalleras, para ser manejado, descubrí que SVN era más eficiente que Git. El tamaño del repository de Git se multiplicó en poco time, mientras que el tamaño de un repository SVN similar no varió mucho. La clonación de un repo de Git tan grande, especialmente en lugares geográficamente distribuidos, fue una pesadilla. Git tampoco tiene una function de clonación parcial, algo que hacemos en SVN todo el time; solo busca una carpeta en particular. Hay un pago parcial en git, pero aún tienes que clonar el repository completo.

Tenga en count que si un file es binary o no, no afecta la cantidad de espacio de repository utilizado para almacenar los cambios en ese file, ni afecta la cantidad de tráfico entre el cliente y el server. Para propósitos de almacenamiento y transmisión, Subversion usa un método diferente que funciona igual de bien en files binarys y de text; esto no tiene ninguna relación con el método de diferenciación utilizado por el command 'svn diff'.

http://subversion.apache.org/faq.html#binary-files

Dadas las herramientas de administración sys maduras de SVN (Git también ha mejorado a lo largo de los años, pero creo que SVN todavía tiene la ventaja en este aspecto), creo que sería sensato tener un server SVN con probablemente repository git-svn para desarrollo local.

Hay algo llamado git-bigfiles, que es una bifurcación de git. No estoy seguro de qué tan maduro es. Usted puede evaluarlo. Pero el hecho de que exista, muestra que Git no es necesariamente bueno en el event handling files de gran tamaño.

git maneja perfectamente los files binarys. Solo debes tener en count que todas las versiones del file binary se guardan localmente. Si un file binary (digamos una image) cambia con frecuencia, terminará llenando su espacio local con toda la versión de la image.

Otras respuestas han abordado las opciones aquí, pero también existe la posibilidad de usar SVN para los files binarys (si cambian mucho) y git para todo lo demás. Durante la fase de compilation, puede usar scripts para search el recurso binary desde svn.