jj v0.43.0 veröffentlicht
(github.com/jj-vcs)- Das Git-kompatible Versionsverwaltungssystem jj v0.43.0 ergänzt
jj run, um Befehle auf mehrere Changesets anzuwenden und wiederholte Prüf- und Korrekturaufgaben stärker zu automatisieren jj runnutzt für jedes Changeset eine dedizierte Arbeitskopie und propagiert auch Änderungen sowie Konflikte von Befehlen, die die Arbeitskopie verändern, etwacargo checkodercargo fix- Dieses Release enthält Änderungen, die bestehende Konfigurationen und die Nutzung von Revsets betreffen, darunter die Entfernung von
git_head(),git_refs(), Git-artiger Symbolauflösung undui.revsets-use-glob-by-default - Ebenfalls hinzugekommen sind
jj show --reversed, die Suche nach Konfigurationen in/etc/jj,jj config gc,jj gerrit upload -o, die Revset-Funktionforks()sowie Farbstile für durchgestrichenen Text - Behoben wurden Probleme bei der Datei-Identity-Verarbeitung unter Windows, Snapshots unveränderlicher Arbeitskopien, Warnungen bei doppelten Remote-URLs sowie Beschädigungen loser Git-Objekte auf Intel Raptor Lake und aarch64
Release-Überblick
- jj ist ein einfaches und zugleich leistungsfähiges Git-kompatibles Versionsverwaltungssystem
- In v0.43.0 kommt neu
jj runhinzu, um Befehle auf mehrere Changesets anzuwenden - Hinweise zur Installation für den Einstieg finden sich in den installation instructions
Befehle je Changeset ausführen: jj run
jj runkann denselben Befehl auf mehrere Changesets anwenden- Jedes Changeset verwendet eine voneinander getrennte dedizierte Arbeitskopie
- Der ausgeführte Befehl kann die Arbeitskopie aktualisieren; daraus entstehende Änderungen und Konflikte werden passend propagiert
- Beispiele:
jj run -- cargo check --all-featuresjj run -- cargo fix
Entfernte Funktionen mit Auswirkungen auf die Kompatibilität
- Die in Revsets und Templates nicht mehr verwendeten Funktionen
git_head()undgit_refs()wurden entfernt - Git-artige Symbole wie
refs/heads/mainwerden nicht mehr als Revisionen aufgelöst- Stattdessen muss die Syntax
<name>oder<name>@<remote>für Bookmarks/Tags verwendet werden
- Stattdessen muss die Syntax
- Auch die nicht mehr verwendete Option
ui.revsets-use-glob-by-defaultwurde entfernt jj bookmark trackunduntrackunterstützen das Muster<kind>:<bookmark>@<remote>nicht mehr- Die Symbolsyntax
<bookmark>@<remote>wird weiterhin unterstützt - Zugehöriges Issue: #9226
- Die Symbolsyntax
Neue Funktionen
jj showunterstützt das Flag--reversedjjsucht Konfigurationsdateien nun auch in/etc/jjjj config gcbereinigt Konfigurationen von gelöschten oder verschobenen Repositories im Ordner~/.config/jj/repos- Zugehöriges Issue: #9362
jj gerrit uploadunterstützt die Flags-o/--option, die sich wiegit push -obzw.--push-optionverhaltenjj git fetchrebaset anhand der Change-ID die Nachfolger-Revisionen neu geschriebener Revisionen- Zuvor wurden eine neu geschriebene Revision und ihre Nachfolger-Revisionen nicht immer rebased, wenn in einem Stack mehrere Revisionen mit Bookmarks versehen waren
- Unveränderliche Nachfolger-Revisionen werden nicht rebased
- Die Revset-Funktion
forks()wurde hinzugefügt- Sie gibt alle Commits zurück, die mindestens zwei Kinder haben
- Die Einstellung
colorsunterstützt mit{ crossed-out = true }einen Textstil für durchgestrichenen Text
Behobene Probleme
- Unter Windows werden beim Abfragen der Datei-Identity eines Pfads keine symbolischen Links mehr verfolgt
- Das Verhalten entspricht damit Unix
- Zuvor wurden zwei symbolische Links, die auf dasselbe Ziel zeigten, als dieselbe Datei behandelt
- Diese Identity-Prüfung wird verwendet, um beim Schreiben der Arbeitskopie Aliase für die reservierten Verzeichnisse
.gitund.jjzu erkennen - Zugehöriges Issue: #8924
- Wenn die Arbeitskopie unveränderlich war, erstellt
jjwährend des Snapshots eine neue Working-Copy-Revision jj git remote addwarnt, wenn die Fetch-URL oder die effektive Push-URL eines neuen Remotes exakt mit der eines bestehenden Remotes übereinstimmt- Zugehöriges Issue: #413
- Auf Intel-Raptor-Lake-CPUs und aarch64 wurde ein Problem mit beschädigten losen Git-Objekten behoben
- Zuvor meldete
jjeinen erfolgreichen Commit, doch ein späteresgit fsckkonnte mitincorrect data check,corrupt loose objectodermissing blobfehlschlagen - Spätere
jj-Operationen konnten außerdem mitcorrupt deflate streamfehlschlagen
- Zuvor meldete
1 Kommentare
Meinungen auf Lobste.rs
Ich freue mich sehr auf
jj run.Ich finde es gut, dass die Deprecation zurückgenommen wurde für
jj bookmark track/untrack <name>@<remote>--remotejedes Mal einzutippen, war immer eher unschön.Dass beschädigte loose Git-Objekte auf
Intel Raptor Lake CPUundaarch64behoben wurden, klingt nach einem interessanten Bug.Falls es dazu einen Blogbeitrag gibt, würde ich ihn gern lesen 😃
Bisher dachte ich, alle beschädigten Git-Objekte, die ich gesehen hatte, seien auf Dateisystem-Rollbacks zurückzuführen gewesen.
Ein f2fs-Rollback nach einem harten Shutdown erzeugte mitunter ziemlich interessante Plattenzustände; daher ist es sehr interessant zu erfahren, dass es dort einfach eine kaputte Stelle gab.
Ich frage mich, wie sich
jj runvonjj fixunterscheidet.Auch im Beispiel im Changelog wurde mit
jj runcargo fixausgeführt; die beiden scheinen sich definitiv zu überschneiden.jj runerstellt eine vollständige Working Copy und führt darin den Befehl aus.jj fixpipet den Inhalt einer einzelnen Datei an den Befehl und verwendet dessen Ausgabe als neuen Inhalt dieser Datei.Wenn ein Tool gut zu
jj fixpasst, typischerweise wie ein Formatter oder Linter, ist es deutlich schneller;jj runist aber flexibler.runfür jede Änderung einen Befehl aus, währendfixeinen Filter über jede geänderte Datei laufen lässt.In meinem Fall würde ich mit
rundie Testsuite ausführen, um zu prüfen, ob jeder Commit gültig ist, und danach mitfixeinen Formatter über die Dateien laufen lassen.Aktualisiert habe ich noch nicht; das ist nur meine Interpretation.
Ich werde
jj runein wenig ausprobieren, gehe aber davon aus, dass es wegen der Art, wie ich direnv nutze, wahrscheinlich komplizierter wird als nötig.