Lanzamiento de jj v0.42.0 - sistema de control de versiones compatible con Git
(github.com/jj-vcs)- Cambio al asignador de memoria mimalloc para mejorar el rendimiento multihilo
- Eliminación de las opciones de comando en desuso
jj commit --reset-author/--author,jj describe --no-edit/--edit/--reset-author/--author, entre otras - Eliminación de las opciones
jj git push --allow-newyjj metaedit --update-committer-timestamp - Eliminación de las opciones de configuración en desuso como
git.auto-local-bookmarkygit.push-new-bookmarks jj evologdeja de dar soporte a los predecesores de commits heredados registrados antes dejj0.30- El autocompletado del shell muestra descripciones de alias personalizados, revset-alias, template-alias y fileset-alias, y extrae las descripciones del campo
.docen definiciones de alias tipo tabla jj showahora acepta varias revisiones y muestra cada una en orden, más parecido agit showjj git fetchcrea evolution history basada en change ID, y si el remoto conserva el change ID, hace rebase de las revisiones descendientes locales sobre el padre reescrito- El comando
jj util backend namemuestra el nombre del backend de commits usado en el repositorio actual - Se agrega la configuración
edit-invocation-modepara el editor de diff; al indicar"file-by-file", ejecuta el editor una vez por cada archivo modificado, permitiendo usar herramientas por archivo comovimdiff jj git remote addahora informa un error en lugar de provocar un panic cuando el nombre del remoto está vacío o contiene espacios- El diff color-words con la salida de color desactivada muestra before/after en líneas separadas, mejorando la legibilidad de diffs enviados por pipe o redirigidos
1 comentarios
Opiniones en Lobste.rs
Me pregunto si, ahora que
jj git fetchgenera un historial de evolución basado en change ID, si el remoto preserva los change ID ya no haría falta ejecutarjj new mainjusto después de cadajj git fetchSi es así, parece una mejora bastante buena en calidad de vida
main, así que no parece que ayude con esa parteAunque no sé qué pasa con los commits de merge creados por GitHub que no tienen change ID
Me da más curiosidad la parte de que cambiaron al asignador de memoria
mimallocpara mejorar el rendimiento multihiloEn procesos de larga duración sí he usado cosas como
jemallocpara mitigar la fragmentación, perojjse siente como algo que arranca en 1 ms y termina en menos de 10 ms, así que me sorprende que cambiar el asignador se noteBusqué un poco más y el PR es https://github.com/jj-vcs/jj/pull/9484, y solo encontré algo como https://github.com/jj-vcs/jj/issues/2490#issuecomment-2595323515, pero no parece una gran mejora de velocidad. Aun así, si queda más rápido y el cambio son solo unas cuantas líneas, está bien
Dijeron “si el remoto preserva los change ID”, pero normalmente no sé si los remotos hacen eso
Sé que
jj gerrit uploadagrega el footer de change ID, perojj git pushnormal no lo hacePero operaciones que reescriben commits, como el squash merge o el rebase merge de GitHub, no los preservan. Si se procesa con herramientas estándar basadas en
libgit2, los encabezados personalizados no se conservan, y algunas herramientas como la biblioteca de Rust que usa GitButler sí admiten preservar encabezados personalizados, pero no está claro si los forges usan algo asíTampoco sé cómo verificar si realmente se están preservando correctamente
La documentación tiene más información
GitHub también los preserva; se puede comprobar viendo el commit de pushcx en el código de lobsters o mis commits
Me pregunto si hay algo para leer o ver sobre por qué usar jj en lugar de Git estándar
Sé que jj puede funcionar sobre Git y hasta lo he probado en proyectos personales, pero todavía no encuentro ese punto decisivo de por qué sería mejor o más fácil