Lanzamiento de jj v0.43.0
(github.com/jj-vcs)- jj v0.43.0, el sistema de control de versiones compatible con Git, agrega
jj runpara ejecutar comandos sobre varios conjuntos de cambios y así automatizar mejor tareas repetitivas de verificación y corrección jj runusa una copia de trabajo dedicada para cada conjunto de cambios, y también propaga los cambios y conflictos de comandos que modifican la copia de trabajo, comocargo checkocargo fix- Esta versión incluye cambios que afectan la configuración existente y la forma de usar revsets, como
git_head(),git_refs(), la resolución de símbolos al estilo Git y la eliminación deui.revsets-use-glob-by-default - También se agregan
jj show --reversed, la búsqueda de configuración en/etc/jj,jj config gc,jj gerrit upload -o, la función revsetforks()y el estilo de color con texto tachado - Se corrigen problemas con el manejo de identidad de archivos en Windows, snapshots de copias de trabajo inmutables, advertencias por URL remotas duplicadas y corrupción de objetos Git loose en Intel Raptor Lake y aarch64
Resumen de la versión
- jj es un sistema de control de versiones compatible con Git, simple pero potente
- En la v0.43.0 se agrega
jj run, que permite aplicar comandos a varios conjuntos de cambios - Las instrucciones de instalación para comenzar están disponibles en installation instructions
Ejecutar comandos por conjunto de cambios: jj run
jj runpermite ejecutar el mismo comando sobre varios conjuntos de cambios- Cada conjunto de cambios usa una copia de trabajo dedicada y aislada
- El comando ejecutado puede actualizar la copia de trabajo, y los cambios y conflictos resultantes se propagan de forma adecuada
- Ejemplos de uso:
jj run -- cargo check --all-featuresjj run -- cargo fix
Eliminaciones que afectan la compatibilidad
- Se eliminan las funciones
git_head()ygit_refs(), que ya estaban en desuso en revsets y templates - Los símbolos al estilo Git como
refs/heads/mainya no se interpretan como revisiones- En su lugar, se debe usar la sintaxis
<name>o<name>@<remote>para bookmark/tag
- En su lugar, se debe usar la sintaxis
- También desaparece la opción obsoleta
ui.revsets-use-glob-by-default jj bookmark trackyuntrackya no admiten el patrón<kind>:<bookmark>@<remote>- La sintaxis simbólica
<bookmark>@<remote>sigue siendo compatible - Issue relacionado: #9226
- La sintaxis simbólica
Nuevas funciones
jj showahora admite la bandera--reversedjjtambién busca archivos de configuración en/etc/jjjj config gclimpia configuraciones de repositorios eliminados o movidos en la carpeta~/.config/jj/repos- Issue relacionado: #9362
jj gerrit uploadahora admite las banderas-o/--option, que funcionan comogit push -oo--push-optionjj git fetchhace rebase de revisiones descendientes de revisiones reescritas según su change ID- Antes, cuando había varias revisiones con bookmarks dentro de una pila, la revisión reescrita y sus descendientes no siempre se rebasaban
- Las revisiones descendientes inmutables no se rebasan
- Se agrega la función revset
forks()- Devuelve todos los commits que tienen 2 o más hijos
- La configuración
colorsahora admite el estilo de texto tachado con{ crossed-out = true }
Problemas corregidos
- En Windows, al consultar la identidad de archivo de una ruta, ya no se siguen enlaces simbólicos
- Esto alinea el comportamiento con Unix
- Antes, dos enlaces simbólicos que apuntaban al mismo destino se trataban como si fueran el mismo archivo
- Esta verificación de identidad se usa para detectar alias de los directorios reservados
.gity.jjal escribir la copia de trabajo - Issue relacionado: #8924
- Cuando la copia de trabajo estaba en estado inmutable,
jjahora crea una nueva revisión de working-copy durante el snapshot jj git remote addahora muestra una advertencia si la URL de fetch o la effective push URL del remote nuevo coincide exactamente con la de un remote existente- Issue relacionado: #413
- Se corrige el problema de objetos Git loose corruptos en CPU Intel Raptor Lake y en aarch64
- Antes,
jjpodía informar que el commit se había realizado con éxito, pero luegogit fsckpodía fallar conincorrect data check,corrupt loose objectomissing blob - Después, otras operaciones de
jjtambién podían fallar concorrupt deflate stream
- Antes,
1 comentarios
Opiniones en Lobste.rs
Me entusiasma mucho
jj runMe alegra que se haya revertido la deprecación de
jj bookmark track/untrack <name>@<remote>Tener que escribir
--remotecada vez siempre me pareció incómodoLa parte donde corrigieron objetos loose de Git corruptos en
Intel Raptor Lake CPUyaarch64suena como un bug interesanteMe gustaría leer una entrada de blog al respecto si sale 😃
Hasta ahora pensaba que todos los objetos de Git corruptos que había visto se debían a rollbacks del sistema de archivos
Después de un apagado forzado, los rollbacks de f2fs solían dejar el disco en estados bastante interesantes, así que es muy interesante enterarme de que simplemente había algo roto por ese lado
Me pregunto en qué se diferencia
jj rundejj fixEn el ejemplo del changelog también usaban
jj runpara ejecutarcargo fix, así que definitivamente parecen solaparsejj runcrea una copia de trabajo completa y ejecuta el comando dentro de ellajj fixpasa por pipe el contenido de un solo archivo a un comando y toma la salida como el nuevo contenido de ese archivoSi la herramienta encaja bien con
jj fix, como suele pasar con formateadores o linters, es mucho más rápido, perojj runes más flexiblerunejecuta un comando por cada cambio, yfixaplica un filtro a cada archivo modificadoEn mi caso, sería algo como correr la suite de pruebas con
runpara verificar que cada commit sea válido, y luego usarfixpara pasar un formateador sobre los archivosTodavía no actualicé, así que esto es solo mi interpretación
Voy a probar un poco
jj run, pero por la forma en que uso direnv, creo que probablemente se vuelva más complicado de lo necesario