Soy nuevo en bundler y los archivos que genera. Tengo una copia de un repositorio git de GitHub al que contribuyen muchas personas, por lo que me sorprendió descubrir que el paquete creó un archivo que no existía en el repositorio y no estaba en la .gitignore
lista.
Dado que lo bifurqué, sé que agregarlo al repositorio no romperá nada para el repositorio principal, pero si hago una solicitud de extracción, ¿causará un problema?
¿Debería Gemfile.lock
incluirse en el repositorio?
git
version-control
bundler
aarona
fuente
fuente
Respuestas:
Suponiendo que no esté escribiendo un rubygem, Gemfile.lock debería estar en su repositorio. Se utiliza como una instantánea de todas sus gemas requeridas y sus dependencias. De esta manera, el paquete no tiene que volver a calcular todas las dependencias de gemas cada vez que implementa, etc.
Del comentario de cowboycoded a continuación:
Aquí hay un buen artículo que explica qué es el archivo de bloqueo.
fuente
El verdadero problema ocurre cuando está trabajando en una aplicación Rails de código abierto que necesita tener un adaptador de base de datos configurable. Estoy desarrollando la rama Rails 3 de Fat Free CRM. Mi preferencia es postgres, pero queremos que la base de datos predeterminada sea mysql2.
En este caso,
Gemfile.lock
todavía es necesario que se registre con el conjunto predeterminado de gemas, pero debo ignorar los cambios que le hice en mi máquina. Para lograr esto, ejecuto:y para revertir:
También es útil incluir algo como el siguiente código en su
Gemfile
. Esto carga la gema de adaptador de base de datos adecuada, basada en su database.yml.No puedo decir si esta es una mejor práctica establecida o no, pero me funciona bien.
fuente
Mis compañeros de trabajo y yo tenemos Gemfile.lock diferente, porque usamos diferentes plataformas, Windows y Mac, y nuestro servidor es Linux.
Decidimos eliminar Gemfile.lock en repo y crear Gemfile.lock.server en git repo, al igual que database.yml. Luego, antes de implementarlo en el servidor, copiamos Gemfile.lock.server a Gemfile.lock en el servidor usando cap deploy hook
fuente
De acuerdo con r-dub, manténgalo en control de la fuente, pero para mí, el beneficio real es este:
colaboración en entornos idénticos (sin tener en cuenta las ventanas y las cosas de linux / mac). Antes de Gemfile.lock, el siguiente tipo en instalar el proyecto podría ver todo tipo de errores confusos, culpándose a sí mismo, pero era solo ese tipo afortunado que obtenía la próxima versión de super gem, rompiendo las dependencias existentes.
Peor aún, esto sucedió en los servidores, obteniendo una versión no probada a menos que sea disciplinado e instale la versión exacta. Gemfile.lock lo hace explícito, y explícitamente le dirá que sus versiones son diferentes.
Nota: recuerde agrupar cosas, como: desarrollo y: prueba
fuente
Los documentos de Bundler también abordan esta pregunta:
ORIGINAL: http://gembundler.com/v1.3/rationale.html
EDITAR: http://web.archive.org/web/20160309170442/http://bundler.io/v1.3/rationale.html
Consulte la sección llamada "Verificación de su código en el control de versiones":
fuente
Sin Gemfile.lock significa:
-> Siempre verifique en Gemfile.lock, haga que Travis lo elimine si desea ser más exhaustivo https://grosser.it/2015/08/14/check-in-your-gemfile-lock/
fuente
Un poco tarde para la fiesta, pero las respuestas todavía me tomaron tiempo y lecturas extranjeras para entender este problema. Así que quiero resumir lo que he descubierto sobre Gemfile.lock.
Cuando está creando una aplicación Rails, está utilizando ciertas versiones de gemas en su máquina local. Si desea evitar errores en el modo de producción y otras ramas, debe usar ese único archivo Gemfile.lock en todas partes y decirle al agrupador que
bundle
reconstruya las gemas cada vez que cambie.Si
Gemfile.lock
ha cambiado en su máquina de producción y Git no lo dejagit pull
, debe escribirgit reset --hard
para evitar ese cambio de archivo ygit pull
volver a escribir .fuente