Salta ai contenuti

Jujutsu (jj) - Foglio di aiuto per il sistema di controllo della versione compatibile con Git

Jujutsu (jj) - Foglio di aiuto per il sistema di controllo della versione compatibile con Git

Jujutsu (jj) è un moderno sistema di controllo della versione che è compatibile con Git — usa un repository Git come backend, quindi puoi adottarlo su repo esistenti e interoperare con i compagni di squadra che usano Git. Il suo modello è diverso e, per molti, più semplice: la copia di lavoro è essa stessa un commit (nessuna area di staging separata), i conflitti sono oggetti di prima classe che puoi eseguire il commit e risolvere più tardi, e ogni operazione è registrata in un log delle operazioni che puoi annullare. Non ci sono rami nel senso Git per impostazione predefinita; lavori con modifiche identificate da ID di modifica stabili.

Installation

PlatformCommand
Cargocargo install --locked jj-cli
macOS (Homebrew)brew install jj
Arch Linuxsudo pacman -S jujutsu
Nixnix profile install nixpkgs#jujutsu
Windows (Scoop)scoop install jujutsu
Verifyjj --version

Setup

CommandDescrizione
jj config set --user user.name "Your Name"Imposta il tuo nome
jj config set --user user.email "you@example.com"Imposta la tua email
jj git init --colocateInizializza jj in un repo Git esistente (mantiene .git)
jj git clone <url>Clona un repo Git con jj
jj git initCrea un nuovo repo jj (backend nativo)

Concetti principali

TermSignificato
ChangeUna modifica logica con un ID di modifica stabile (sopravvive alle riscritture)
CommitUno snapshot; la copia di lavoro è sempre un commit (@)
@Il commit della copia di lavoro corrente
RevsetUn linguaggio di query per selezionare i commit
Operation logCronologia delle operazioni del repository, ognuna annullabile
BookmarkUn puntatore denominato (mappa su un ramo Git al push)

Flusso di lavoro quotidiano

CommandDescrizione
jj statusMostra i cambiamenti della copia di lavoro
jj logMostra il grafico dei commit
jj diffDiff del commit della copia di lavoro
jj describe -m "msg"Imposta/sostituisce il messaggio del commit corrente
jj newAvvia una nuova modifica in cima a quella corrente
jj new <rev>Avvia una nuova modifica in cima a un commit specifico
jj edit <rev>Rendi un commit esistente la copia di lavoro
jj commit -m "msg"Descrivi @ e avvia una nuova modifica (stile Git)

Spostamento e modifica della cronologia

CommandDescrizione
jj squashSposta le modifiche da @ nel suo genitore
jj squash -iScegli interattivamente cosa appiattire
jj splitDividi il commit corrente in due
jj rebase -d <dest>Rebase una modifica su una destinazione
jj abandon <rev>Scarta un commit
jj duplicate <rev>Copia un commit altrove

La caratteristica killer: Annulla

CommandDescrizione
jj op logElenca ogni operazione eseguita
jj undoAnnulla l”ultima operazione
jj op restore <id>Ripristina il repository a uno stato di operazione precedente

Poiché ogni comando è un”operazione, quasi tutto può essere annullato — inclusi i rebase e gli abbandoni.

Bookmark e interoperabilità Git

CommandDescrizione
jj bookmark create main -r @Crea un bookmark (≈ ramo Git)
jj bookmark set main -r @Sposta un bookmark a un commit
jj git fetchFetch dal repository remoto Git
jj git pushSpingilo i bookmark al repository remoto Git
jj git push -c @Crea un ramo remoto dalla modifica corrente

Revsets (selezione dei commit)

RevsetSeleziona
@Commit della copia di lavoro
@-Genitore della copia di lavoro
mainIl commit a cui punta un bookmark
mine()I tuoi commit
ancestors(@)Tutti gli antenati di @
jj log -r "description(glob:'fix*')"Commit il cui messaggio corrisponde

Flussi di lavoro comuni

# Adopt jj in an existing Git repo, keep working with Git remotes
jj git init --colocate
jj log

# Make a change without staging — just edit files, then describe
# (files are auto-snapshotted into @)
jj describe -m "Add feature"
jj new                       # start the next change

# Oops — undo the last thing you did (even a rebase)
jj undo

# Push the current change as a branch for review
jj bookmark create feature -r @
jj git push -c @

jj vs Git

AspettoJujutsu (jj)Git
Area di stagingNessuno (copia di lavoro è un commit)Index/staging
ConflittiDi prima classe, committabiliDeve risolvere prima di procedere
AnnullaUniversale tramite log opReflog (parziale)
RamiBookmark (opzionale)Rami (centrale)
BackendCompatibile con GitGit

Resources