Nos gustaría compartir tiempo de ejecución del proyecto de archivos binarios. Así que cada miembro del equipo podría tomar de trabajo actual versión.
Es aceptable/bueno almacén de tiempo de ejecución de binarios en el SVN?

InformationsquelleAutor user22814 | 2009-02-10

15 Comentarios

  1. 27

    Las dos razones más comunes es posible que desee almacenar los archivos binarios en un Sistema de Control de versiones son (escrito en 2009):

    • almacén externo de las bibliotecas de terceros.

      Normalmente uno de los almacena en un repositorio de Maven, pero para almacenarlos en SVN permite tener uno y sólo uno referencial para toda su necesidad: obtener las fuentes, y obtener sus librerías que se necesitan para compilar los fuentes. Todo viene de un repositorio.

    (Como lo señaló la ivorujavaboy en el año 2017: «La única buena razón para hacer esto en el día presente, si usted tiene bibliotecas ESTÁTICAS que nunca va a cambiar, que es realmente un caso raro»)

    • tienda de entregas para agilizar la implementación de.

      Normalmente las entregas (el ejecutable que construir para implementar en producción) están construidas sobre la demanda.

      Pero si tienes muchas entorno de pre-producción, y si tiene muchas entregas, el costo de construcción para el montaje, integración, homologación, la pre-producción de plataformas puede ser alto.

      Una solución es construir con ellos de una vez, almacenarlos en una de las entregas de la sección de la SVN, y usarlos directamente en su entorno diferente.

      Nota:

      Esto aplica también para el desarrollo de elementos: si usted tiene un Jaxb proceso que genera 900 POJO archivos (a través de XML binding), y necesita descargar de que el desarrollo conjunto en varios entornos, puede que desee 1 comprimido de copia de archivos de transacciones, en lugar de 900 queridos.

    Así que sí, es «aceptable/bueno almacén de tiempo de ejecución de binarios en el SVN»… por las razones correctas.


    Que se dice:

    • También, si usted no puede usar Maven o prefieren hormiga, entonces el almacenamiento de las bibliotecas en su repositorio donde pueden ser fácilmente controlados por un ant build tiene sentido.
    • de acuerdo.
    • un 3er razón común es para el almacenamiento de mapa de bits gráficos, de audio y de vídeo. Estos deben ser de la versión controlada también. Ciertas versiones del mismo vídeo sólo pueden ser apropiadas para una determinada versión del código fuente que se utiliza.
    • a/ si han cambiado de frecuencia y b/ si usted necesita para recuperar una versión anterior, entonces sí. Si no, otros repositorios (no VCS-based), como el Nexus garantizará la historia de algunos de esos elementos, y usted será capaz de quitar de dicho repositorio mucho más fácilmente que en un VCS.
    • +1 para el Nexus introducción, una idea que debo explorar a mí mismo.
    • Almacén externo de las bibliotecas de terceros: En mi opinión NO hay MANERA! Mucho más desventajas que ventajas, prefieren este enfoque sólo porque el uso de la HORMIGA está mal, la causa puede integrar fácilmente la HIEDRA en ant o, simplemente, el uso de REST API expuesta por Artifactory/Nexus… por otro lado, cuando y si es necesario actualizar la versión de la lib, usted tiene que eliminar y volver a importar o crear otra carpeta (por lo que al final va a crear su historia en SVN que es una locura)… La única buena razón para hacer esto en el día presente, si usted tiene bibliotecas ESTÁTICAS que nunca va a cambiar, que es realmente un caso raro.
    • Estoy de acuerdo. Esto fue escrito en otro tiempo, 8 años 😉 me dejó editar la respuesta.
    • Apreciar VonC 🙂

  2. 21

    No, no almacenamos archivos binarios junto a su código fuente (a menos que haya buenas razones que compensar las desventajas).

    Desventajas:

    • se alienta a los malos construir prácticas en proyectos de gran envergadura. La mejor práctica es automatizar completamente su construcción. Cometer los binarios le permite ignorar que: «sólo tienes que hacer manualmente la construcción para las partes que han cambiado» 🙁
    • actualizaciones más lentas y se compromete
    • cometa que cambiar el código fuente, pero no el correspondiente archivos binarios causar confusión entre los desarrolladores. ¿Cómo se detecta que hay un desajuste?
    • svn update actualizará la fecha y hora de los archivos binarios, confundiendo la construcción de herramientas que erróneamente piensan que los archivos binarios son más que el cambio en el código fuente.
    • causas espurias conflictos en los binarios para svn update y svn merge
    • utiliza más espacio en disco en el repositorio. (Esto puede ser insignificante en función de su proyecto.)

    En general, evitar cometer cualquier cosa que se genera automáticamente en forma determinística de otras versiones de recursos. No hay redundancia -> no hay oportunidad para incoherencias.

    Lugar, el uso de un servidor de integración continua para la reconstrucción automática (y ejecutar las pruebas) en cada commit. Deje que este servidor de generación de publicar los archivos binarios en algún lugar (fuera de SVN) si es necesario.

    Ahora, esto no significa que usted debe tomar esto como una regla absoluta o evitar todos binarios. Por todos los medios, puesto que la construcción de herramientas de terceros y de código cerrado binarios dentro de sus proyectos. Y hacer excepciones cuando tiene sentido. Idealmente, un nuevo desarrollador debe ser capaz de hacer un check out y de inmediato iniciar el script de compilación sin pasar un día o dos en la configuración de su entorno.

    • «En su lugar, utilice un servidor de integración continua para la reconstrucción automática (y ejecutar las pruebas) en cada commit. Deje que este servidor de generación de publicar los archivos binarios en algún lugar (fuera de SVN) si es necesario.» … Supongo que el CI se tire lo que necesita de la fuente de control – entonces ¿no estamos en un pollo/huevo situación?
    • Olvidar ese comentario – me vuelva a leer la pregunta y se dio cuenta que se está preguntando si debe almacenar la ‘salida’ de su generación en control de código fuente. Yo estaba mirando (y su respuesta) desde el contexto de la ‘debemos almacenar binario dependencias de control de código fuente’
  3. 18

    Yo diría que si hace que su equipo la vida más fácil, y luego hacerlo. Si se disminuye el tiempo necesario para establecer un entorno de desarrollo, ir a por ello.

  4. 9

    Como muchos ya han dicho, es aceptable.

    Sí, es conveniente tener todo a mano desde una sola ubicación, desde donde se puede (por ejemplo) checkout una etiqueta vieja ya en forma binaria, con sus dependencias correctas.

    Pero es NO buena, especialmente para fines de copia de seguridad. Tenemos guardados todos nuestros archivos binarios (y parte de las dependencias) en el SVN y como el proyecto creció, por lo que el binario de la sección hice.

    Por desgracia, svnadmin dump sólo los vertederos de todo, usted puede especificar una ruta de acceso del repositorio de excluir. Por lo tanto, las copias de seguridad y las actualizaciones del servidor svn) llegó a ser muy doloroso!

    Si se agrega que después de un no tan largo tiempo, en nuestro caso, los archivos binarios no son útiles más, estoy seguro de que no va a hacer que de nuevo en un caso similar (pero me gustaría hacer un proyecto más pequeño).

    Por lo que recomiendo que lo piensen dos veces antes de hacer eso y tratan de pronosticar cómo de grande puede crecer y ¿qué otra cosa podría suceder.

  5. 8

    No para este propósito, no. Usted debe utilizar un archivo externo de la tienda, como un cliente de FTP o servidor Web. De esta manera es fácil de descargar una versión particular de su tiempo de ejecución de binarios sin tener que actualizar a la revisión en el SVN primera.

  6. 6

    Cada vez que veo una biblioteca en una Subversión de directorio, pido a las siguientes preguntas:

    • ¿qué versión es? (por lo general, usted tiene axis.jar y no axis-1.4.jar)
    • ¿por qué se incluye? (especialmente complicado con las dependencias de dependencias)

    Si usted no tiene un sistema de gestión de la dependencia en su lugar, usted normalmente no puede responder a ambas preguntas. Y es el primer paso para Jar el Infierno.

    Puedo recomendar Apache Ivy (otros puede jurar por Maven) con una intranet repositorio. El uso de la Hiedra, nunca he tenido que almacenar bibliotecas en SVN y siempre se puede responder a las preguntas anteriormente formuladas.

  7. 5

    Sí, la tienda.

    Hemos utilizado para almacenar los archivos binarios se entregan a los clientes en el repositorio SVN para mantener un seguimiento de la misma.

    También otro uso de almacenamiento de los archivos binarios en el SVN (o de control de código fuente) es que, si usted está proporcionando algunos internos de la utilidad de los módulos a otros equipos de la compañía que no quiere construir su proyecto para salvar a su tiempo de construcción. Creo que es una práctica común.

    Pero nunca hemos permitido almacenar .classpath y .los archivos de proyecto de Eclipse (espacio de trabajo relacionados con la configuración).

  8. 3

    Nuestra Java .archivo jar construye eran vinculantes en sus .el archivo jar de las dependencias que estábamos en el svn. Mucho de esto es redundante en la práctica, pero queríamos asegurar cada aplicación Java build le había producido, precisamente, las bibliotecas se sometió a QA con.

    Lo que realmente agravado mí, sin embargo, con este enfoque fue cuando empecé a hacer las conexiones remotas en el repositorio y la sincronización. Me tomaría una eternidad sólo churn a través de todas las bibliotecas binarias.

    Hemos abandonado desde que la práctica y ahora el uso de Maven para administrar dependencias de la biblioteca – incluso para los proyectos que estamos todavía construyendo con ant. No más archivos binarios que se registró en el svn. La vida es mucho mejor en varios frentes debido a este cambio de estrategia. Y tenemos un riguroso control sobre las versiones de las dependencias de la biblioteca que hemos deseado.

    Para los nuestros .NET se basa, uno de mis desarrolladores ha creado una solución que funciona en gran parte como Maven en el respeto a toda la gestión de la dependencia cosas, y es la consecución de la misma beneficio no demasiado.

  9. 3

    Si usted está desarrollando en Java, a continuación, puede configurar un repositorio local y, a continuación, utilizar una herramienta como maven o ivy+ant para acceder a ella.

    Puede subir actualizaciones de su local de construir artefactos a tu repositorio local como están listos para otros en la compañía.

    Para otros entornos de desarrollo, no sé qué herramientas similares a las anteriores están disponibles – me han tendido a acaba de poner en SVN y hacer con ella.

    Yo suelo usar un repositorio separado para el almacenamiento de las bibliotecas de terceros para mantenerlos fuera del normal desarrollo de repositorios, y tengo mis archivos de generación de carga en que se espera una ubicación en relación con el proyecto de la base de carpeta.

    De hecho, yo uso los dos repositorios. Uno por la mínima archivos que necesito para la construcción de mis proyectos (por ejemplo, jar, archivos lib) y otro para todo el paquete de terceros (incluyendo la fuente, la documentación o lo que sea), que por lo general tienda de alquitrán.bz2.

    De esa manera, si lo que desea es obtener el mínimo que se necesita para construir cosas, tome el primer repositorio, y si usted tiene que averiguar lo que está pasando con, o cómo utilizar un paquete de terceros puede empezar a tirar las cosas de la segunda repositorio.

    No es la solución ideal, pero funciona bastante bien.

    Aquí más información sobre cómo svn maneja archivos binarios.

  10. 1

    Es perfectamente normal y aceptable para almacenar archivos binarios en el SVN repo. Como una nota al margen, no veo por qué iba alguien a querer a la tienda de construir artefactos en el repositorio (no estoy diciendo que lo hacen).

    • Tenemos uno o dos pequeños programas que rara vez cambian, y son un absoluto incómodo al ser compilado, la necesidad de una instancia especializada en medio ambiente y lo que-tiene-usted. Las almacenamos en SVN para el bien de la simplicidad/cordura.
    • En realidad, ahora que lo pienso, también tenemos algunos artefactos que no puede ser construido en la línea de comandos o en una forma automatizada, y que a menudo vacilar sobre la cuestión de que se vale la pena poner en el repositorio (SWF <- FLA)
  11. 1

    Dejo mi build y el sistema de integración continua de la manija de la última versión de las cosas, copiando automáticamente a un servidor FTP, web o recurso compartido de archivos para un acceso fácil.

    Incluso mejor que me gustaría invertir en un sistema de CI que automáticamente se encarga de construir artefactos, me encanta TeamCity de jetbrains mí mismo, pero hay otros. De esta manera usted puede manejar completamente automática.

  12. 1

    Almacenar archivos binarios que no todo el mundo puede construir. I diseño de chips en Verilog y VHDL y el equipo de software no tiene esas herramientas. Así que podemos almacenar la salida de los binarios en SCM.

  13. -2

    Al menos yo almacenar los archivos binarios en el SVN, de esta manera puedo regresar rápidamente a la particular versión binaria y ver si el error estaba sucediendo en ella o no, y traza la versión, donde el error se introdujo, más bien, a continuación, comprobar a cabo todo el proyecto, la creación de todos los particulares relacionados con el proyecto y la configuración del entorno, y luego compilarlo.

Dejar respuesta

Please enter your comment!
Please enter your name here