Lançado o jj v0.42.0 - Sistema de controle de versão compatível com Git
(github.com/jj-vcs)- Mudança para o alocador de memória mimalloc, melhorando o desempenho em multithread
- Remoção de opções de comando obsoletas como
jj commit --reset-author/--authorejj describe --no-edit/--edit/--reset-author/--author - Remoção das opções
jj git push --allow-newejj metaedit --update-committer-timestamp - Remoção de opções de configuração obsoletas como
git.auto-local-bookmarkegit.push-new-bookmarks jj evologdeixa de oferecer suporte a predecessor de commits legados registrados antes dojj0.30- O autocompletar do shell agora exibe descrições de aliases personalizados, revset-alias, template-alias e fileset-alias, extraindo a descrição do campo
.docem definições de alias em formato de tabela jj showagora aceita várias revisões e, mais próximo degit show, exibe cada revisão em sequênciajj git fetchagora cria evolution history com base em change ID e, se o remoto preservar o change ID, faz rebase das revisões descendentes locais sobre o pai reescrito- O comando
jj util backend namemostra o nome do backend de commit usado no repositório atual - Adicionada a configuração
edit-invocation-modepara o editor de diff; ao definir"file-by-file", o editor é executado uma vez para cada arquivo alterado, permitindo o uso de ferramentas por arquivo comovimdiff jj git remote addagora reporta erro, em vez de panic, quando o nome do remoto está vazio ou contém espaços- Com a saída colorida desativada, o diff color-words agora mostra before/after em linhas separadas, melhorando a legibilidade de diffs enviados por pipe ou redirecionados
1 comentários
Opiniões no Lobste.rs
Fiquei me perguntando se, agora que
jj git fetchgera histórico de evolução baseado em change ID, quando o remoto preserva change IDs, isso significa que não será mais necessário fazerjj new mainlogo após cadajj git fetchSe for isso, parece uma melhoria bem boa de qualidade de vida
main, então isso provavelmente não ajuda nessa parteSó não sei como isso funciona com commits de merge gerados pelo GitHub que não têm change ID
O que mais me chamou atenção foi a parte sobre a troca para o alocador de memória
mimallocpara melhorar o desempenho multithreadJá usei algo como
jemallocem processos de longa duração para reduzir fragmentação, masjjme parece o tipo de ferramenta que inicia em 1 ms e termina em menos de 10 ms, então é surpreendente que trocar o alocador faça diferença perceptívelFui procurar mais e achei o PR em https://github.com/jj-vcs/jj/pull/9484 e só algo como https://github.com/jj-vcs/jj/issues/2490#issuecomment-2595323515, mas não parece um ganho enorme de velocidade. Ainda assim, se fica mais rápido e a mudança são só algumas linhas, ótimo
Foi dito “se o remoto preserva change IDs”, mas eu não sei se remotos normalmente preservam isso
Sei que
jj gerrit uploadadiciona o footer de change ID, mas ojj git pushnormal não faz issoSó que operações que reescrevem commits, como squash merge ou rebase merge do GitHub, não preservam. Se for processado por ferramentas padrão baseadas em
libgit2, cabeçalhos customizados não são preservados; algumas ferramentas, como a biblioteca Rust usada pelo GitButler, suportam preservar cabeçalhos customizados, mas duvido que os forges usem algo assimTambém não sei como verificar se isso está sendo preservado corretamente
A documentação tem mais detalhes
O GitHub também preserva; dá para confirmar olhando commits do pushcx no código-fonte do lobsters ou algum commit meu
Fiquei curioso se existe algum material bom para ler ou assistir sobre por que usar jj em vez do Git padrão
Sei que o jj pode funcionar sobre o Git e até testei em projetos pessoais, mas ainda não encontrei aquele argumento decisivo de por que ele seria melhor ou mais fácil