git - source - ¿cuáles son los tipos de sistema control de versiones?
¿Se debe comprometer composer.lock con el control de versiones? (6)
Luego, confirma el
composer.json
a tu proyecto y todos los demás miembros de tu equipo pueden ejecutar la instalación del compositor para instalar las dependencias de tu proyecto.El punto del archivo de bloqueo es registrar las versiones exactas que están instaladas para que puedan volver a instalarse. Esto significa que si tiene una especificación de versión de 1. * y su compañero de trabajo ejecuta la actualización de compositor que instala 1.2.4, y luego ejecuta el archivo composer.lock, cuando instale Composer, también obtendrá 1.2.4, incluso Si se ha lanzado 1.3.0. Esto garantiza que todos los que trabajen en el proyecto tengan la misma versión exacta.
Esto significa que si se ha confirmado algo desde la última vez que se realizó la instalación de un compositor, entonces, sin un archivo de bloqueo, obtendrá un nuevo código de terceros que se está bajando .
Nuevamente, esto es un problema si le preocupa que se rompa su código. Y es una de las razones por las que es importante pensar que Composer se centra en el archivo composer.lock.
Fuente: blog.engineyard.com/2014/composer-its-all-about-the-lock-file .
Confíe el composer.lock de su aplicación (junto con composer.json) en el control de versiones. Esto es importante porque el comando de instalación verifica si hay un archivo de bloqueo, y si lo está, descarga las versiones especificadas allí (independientemente de lo que diga composer.json). Esto significa que cualquier persona que configure el proyecto descargará la misma versión exacta de las dependencias. Su servidor de CI, máquinas de producción, otros desarrolladores en su equipo, todo y todos se ejecutan en las mismas dependencias, lo que mitiga el potencial de errores que afectan solo algunas partes de las implementaciones. Incluso si se desarrolla solo, en seis meses, al reinstalar el proyecto, puede estar seguro de que las dependencias instaladas seguirán funcionando incluso si sus dependencias lanzaron muchas versiones nuevas desde entonces.
Fuente: Compositor - Uso básico .
Estoy un poco confundido con composer.lock
utilizado en una aplicación con un repositorio.
Vi a mucha gente diciendo que no deberíamos .gitignore
composer.lock
desde el repositorio.
Si actualizo mis bibliotecas en mi entorno de desarrollo, tendré un nuevo composer.lock
pero no podré actualizarlas en producción, ¿lo haré?
¿No generará conflictos en este archivo?
- No deberías actualizar tus dependencias directamente en Producción.
- Deberías controlar la versión de tu archivo composer.lock .
- No deberías controlar la versión de tus dependencias reales.
1. No debe actualizar sus dependencias directamente en Producción , porque no sabe cómo afectará esto a la estabilidad de su código. Podría haber errores introducidos con las nuevas dependencias, podría cambiar la forma en que el código se comporta afectando a los suyos, podría ser incompatible con otras dependencias, etc. Debe hacerlo en un entorno de desarrollo de componentes, seguido de un control de calidad y pruebas de regresión, etc. .
2. Debe controlar la versión de su archivo composer.lock , ya que esto almacena información sobre sus dependencias y sobre las dependencias de sus dependencias que le permitirán replicar el estado actual del código. Esto es importante porque todas sus pruebas y desarrollo se han realizado en contra de un código específico. No preocuparse por la versión real del código que tiene es similar a cargar cambios de código en su aplicación y no probarlos. Si está actualizando las versiones de sus dependencias, este debe ser un acto voluntario, y debe tener el cuidado necesario para asegurarse de que todo funcione. Perder una o dos horas de tiempo de funcionamiento para volver a una versión anterior podría costarle mucho dinero.
Uno de los argumentos que verá acerca de no necesitar el composer.lock es que puede configurar la versión exacta que necesita en su archivo composer.json , y que de esta manera, cada vez que alguien ejecuta la composer install
, los instalará. El mismo código. Esto no es cierto porque sus dependencias tienen sus propias dependencias y su configuración puede especificarse en un formato que permita actualizaciones de subversiones, o incluso versiones completas.
Esto significa que incluso cuando especifique que desea Laravel 4.1.31 en su composer.json , Laravel en su archivo composer.json puede tener sus propias dependencias requeridas como despachador de eventos de Symfony: 2. *. Con este tipo de configuración, podrías terminar con Laravel 4.1.31 con Symfony event-dispatcher 2.4.1, y alguien más en tu equipo podría tener Laravel 4.1.31 con event-dispatcher 2.6.5, todo dependerá de cuándo Fue la última vez que ejecutaste la instalación del compositor.
Por lo tanto, tener su archivo composer.lock en el sistema de versión almacenará la versión exacta de estas subdependencias, por lo tanto, cuando usted y su compañero de equipo instalen un compositor (esta es la forma en que instalará sus dependencias basadas en un compositor. bloqueo ) ambos obtendrán las mismas versiones.
¿Qué pasa si quieres actualizar? Luego, en su entorno dev: run composer update
, esto generará un nuevo archivo composer.lock (si hay algo nuevo) y después de probarlo, y la prueba de control de calidad y regresión lo probarán y todo eso. Puede empujarlo para que todos los demás descarguen el nuevo composer.lock , ya que es seguro actualizarlo.
3. No deberías controlar la versión de tus dependencias reales , porque no tiene sentido. Con el composer.lock puede instalar la versión exacta de las dependencias y no tendría que confirmarlas. ¿Por qué agregaría a su repositorio 10000 archivos de dependencias, cuando se supone que no debe actualizarlos? Si necesita cambiar uno de estos, debe hacerlo y hacer sus cambios allí. Y si está preocupado por tener que buscar las dependencias reales cada vez que se realiza una compilación o lanzamiento, el compositor tiene diferentes formas de aliviar este problema, caché, archivos zip, etc.
Después de hacerlo de ambas maneras para algunos proyectos, mi postura es que composer.lock
no debe comprometerse como parte del proyecto. Sé que es más fácil hacerlo, pero por favor tenga paciencia conmigo mientras hago un caso para esto.
composer.lock
es metadatos de compilación que no es parte del proyecto. El estado de las dependencias se debe controlar a través de la forma en que las versiones (ya sea manualmente o como parte de su proceso de compilación automatizada) y no por el último desarrollador para actualizarlas y confirmar el archivo de bloqueo.
Si le preocupa que sus dependencias cambien entre las actualizaciones del compositor, tiene una falta de confianza en su esquema de versiones. Las versiones (1.0, 1.1, 1.2, etc.) deben ser inmutables y debe evitar los comodines "dev-" y "X. *" fuera del desarrollo inicial de la característica.
Confirmar el archivo de bloqueo es una regresión para su sistema de administración de dependencias, ya que la versión de dependencia ahora vuelve a estar implícitamente definida.
Además, su proyecto nunca debería tener que ser reconstruido o hacer que se vuelvan a adquirir las dependencias en cada entorno, especialmente los productos. Su entregable (tar, zip, phar, un directorio, etc.) debe ser inmutable y promovido a través de entornos sin cambiar el estado.
Edit: Sabía que esta no sería una respuesta popular, pero si votas a la baja, ¿serías lo suficientemente amable como para proporcionar una razón en los comentarios que señale la falla en la respuesta? ¡Gracias!
Si actualiza sus bibliotecas, también desea confirmar el archivo de bloqueo. Básicamente, establece que su proyecto está bloqueado para esas versiones específicas de las librerías que está utilizando.
Si confirma los cambios y alguien extrae su código y actualiza las dependencias, el archivo de bloqueo no debe modificarse. Si se modifica, significa que tienes una nueva versión de algo.
Tenerlo en el repositorio le asegura que cada desarrollador está usando las mismas versiones.
Si está preocupado por la ruptura de su código, debe asignar el composer.lock
a su sistema de control de versiones para asegurarse de que todos los colaboradores de su proyecto estén utilizando la misma versión del código. Sin un archivo de bloqueo, obtendrá un nuevo código de terceros que se eliminará cada vez.
La excepción es cuando utiliza una meta aplicación, bibliotecas donde las dependencias deben actualizarse en la instalación (como la aplicación Zend Framework 2 Skeleton ). Por lo tanto, el objetivo es tomar las últimas dependencias cada vez que desee comenzar a desarrollar.
Fuente: blog.engineyard.com/2014/composer-its-all-about-the-lock-file
Ver también: ¿Cuáles son las diferencias entre la actualización del compositor y la instalación del compositor?
Para aplicaciones / proyectos : Definitivamente sí.
La documentación del compositor establece sobre esto (con énfasis):
Confíe el composer.lock de su aplicación (junto con composer.json) en el control de versiones.
Al igual que @meza, dijo: Debería confirmar el archivo de bloqueo para que usted y sus colaboradores trabajen en el mismo conjunto de versiones y eviten los dichos como "Pero funcionó en mi computadora". ;-)
Para bibliotecas : Probablemente no.
Las notas de la documentación del compositor sobre esta materia:
Nota: Para las bibliotecas no se recomienda necesariamente confirmar el archivo de bloqueo (...)
Y declara here :
Para su biblioteca puede cometer el archivo composer.lock si lo desea. Esto puede ayudar a su equipo a probar siempre las mismas versiones de dependencia. Sin embargo, este archivo de bloqueo no tendrá ningún efecto en otros proyectos que dependen de él. Solo tiene efecto en el proyecto principal.
Para bibliotecas estoy de acuerdo con la respuesta de @Josh Johnson.