1 Punkte von GN⁺ 5 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • Der kleine Fehler, den Befehl jj wiederholt einzugeben, führt zu einem Subcommand-Fehler, lässt sich aber mit einem jj-Konfigurationsalias abfangen
  • Das Beispiel zeigt eine Situation, in der jj jj show -T 'change_id.short()', das die kurze ID des aktuell bearbeiteten Changesets holen soll, fehlschlägt
  • jj kann wie git in der Konfigurationsdatei einen alias definieren, und mit jj util exec den restlichen Befehl wieder an jj übergeben
  • Ein einfacher Alias interpretiert -T nicht als Ziel für die Ausführung, sondern wie eine Option von jj util exec, daher muss das Parsen der Argumente mit -- beendet werden
  • Mit der finalen Konfiguration jj = ["util", "exec", "--", "jj"] gibt nicht nur jj jj show, sondern auch mehrfach verschachteltes jj jj jj... show dieselbe Changeset-ID aus

Wiederholt eingegebenes jj scheitert mit einem Subcommand-Fehler

  • Wenn man bei der Nutzung von jj in der Befehlszeile versehentlich ein weiteres jj eingibt, wird das zweite jj als Subcommand interpretiert und schlägt fehl
    • Das Beispiel ist ein Befehl, der die kurze ID des aktuell bearbeiteten Changesets holen soll
$ jj jj show -T 'change_id.short()'
error: unrecognized subcommand 'jj'
Usage: jj [OPTIONS] <COMMAND>
For more information, try '--help'.
  • Man kann das auch mit einem Shell-Alias umgehen, aber auch den alias in der jj-eigenen Konfiguration verwenden
    • Zum Bearbeiten der Konfiguration kann man jj config edit verwenden
    • Um die Konfiguration in der Shell zu ändern, kann man jj config set verwenden

jj util exec fixiert die Argumentübergabe mit --

  • Der erste Versuch besteht darin, über den Alias mit jj util exec erneut jj auszuführen
[aliases]


# jj all the way down
jj = ["util", "exec", "jj"]
  • In dieser Konfiguration wird -T nicht für das auszuführende jj, sondern wie eine Option von jj util exec interpretiert und schlägt daher fehl
$ jj jj show -T 'change_id.short()'
error: unexpected argument '-T' found
tip: to pass '-T' as a value, use '-- -T'
Usage: jj util exec [OPTIONS] <COMMAND> [ARGS]...
For more information, try '--help'.
  • Fügt man -- ein, wird das anschließende Parsen von Optionen beendet und die übrigen Argumente unverändert an das auszuführende Ziel übergeben
[aliases]


# jj all the way down
jj = ["util", "exec", "--", "jj"]
  • Nach der finalen Konfiguration geben das normale jj show, das verschachtelte jj jj show und noch stärker wiederholtes jj jj jj ... show alle dieselbe kurze Changeset-ID aus
$ jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj jj jj jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj show -T 'change_id.short()'
upvqxuzzvxtx

1 Kommentare

 
GN⁺ 5 시간 전
Meinungen auf Lobste.rs
  • Früher gab es auch schon git git git git git

  • Das geht auch mit einer einfacheren Methode:

    [aliases]  
    jj = []  
    

    Der einzige Nachteil dieser Form ist, wenn ich mich richtig erinnere, dass sie bei der Ausführung ohne weitere Argumente, etwa jj jj, nicht wie jj den Standardbefehl ausführt

    • Dann macht diese einfachere Methode doch eigentlich nicht dasselbe, oder?
  • Wow, ich hatte vor fast einem Jahr (28.09.25) dieselbe Lösung im JJ Discord gepostet
    Damit ein Tippfehler wie jj jj ... tatsächlich wie jj ... funktioniert, braucht man das hier:

    [aliases]  
    jj = ["util", "exec", "--", "jj"]  
    

    Eigentlich gefällt mir diese Variante ziemlich gut

  • Ist das eine Referenz auf bunny party?

  • Ich habe es auch zu meinem jj-Konfigurations-Gist hinzugefügt: https://gist.github.com/pksunkara/622bc04242d402c4e43c7328234fd01c

  • Trotzdem würde ich gern eine Version sehen, die in Tweet-Länge und so erklärt ist, als wäre ich fünf, was Jujutsu ist und warum man es nutzen sollte
    In meinem früheren Job habe ich Git vier Jahre lang täglich benutzt und es wirklich gehasst. Für das, was wir brauchten und wie es die meisten nutzten, war es grotesk überkomplex, und für die meisten war es kein verteiltes Versionsverwaltungssystem, sondern ein Github-zentriertes, zentralisiertes serverbasiertes Tool
    Ich finde es amüsant, dass viele Git-Nutzer nicht wissen, dass git im britischen Englisch auch „eine mürrische, unkooperative und wenig hilfreiche Person“ bedeutet. Das beschreibt Git als Tool ziemlich gut
    Allerdings habe ich nie ein anderes Versionsverwaltungssystem benutzt, daher bin ich bei Vergleichen nicht stark. Jujutsu ist auch schwer zu googeln, und die Dokumentation scheint eher auf erfahrenere Versionsverwaltungsnutzer zugeschnitten zu sein als auf Leute wie mich

    • Ich denke, Torvalds hat git tatsächlich wegen der Bedeutung unhöfliche und mürrische Person gewählt