Wiederaufsetzbare Bash-Sitzungen mit Zweigwartung

1

Gibt es ein Dienstprogramm, das das Speichern und Wiederherstellen von Bash-Sitzungen optimiert? Ich würde gerne EG machen können

$ KUNG=pao
$ foo commit  # saves the current environment
              # as an anonymous changeset from the previous savepoint
$ SCHNICKENS="What's up, doc?"
$ SCHNICKENS="$(echo Schmoove)"
$ unset KUNG
$ foo diff HEAD  # outputs a $(set) of commands
                 # which comprise the current changeset
unset KUNG;
SCHNICKENS="Schmoove"
$ foo branch edit-su-question  # creates a new branch with that name
$ foo merge master  # updates the current environment
                    # with any changes made to ~/.bashrc
                    # since it was branched or last merged
$ function fierce_fist_of_foo {
      cut -f 2 | xargs -I {} bash foo {} '>>' ffof.out;
  }
$ foo checkout master  # switches current branch
                       # to the one checked out by ~/.bashrc
$ foo commit -m "learned the fierce_fist_of_foo technique"
  # new interactive `bash` invocations now load that function

Aufgrund der Ähnlichkeit mit dem gitBefehlssatz bin ich versucht, ein obszönes Wort oder alternativ einen Smashing Pumpkins-Albumtitel als Befehlsnamen in diesem Beispiel zu verwenden. Aber gut, ole ist fooes.

Ich begründe mein Vertrauen in die Funktionsfähigkeit dieses Konzepts weitgehend mit der Annahme, dass das Ausführen seteiner Bash-Shell ein aufrufbares Skript ergibt, mit dem diese Umgebung wiederhergestellt wird. Ich bin mir nicht sicher, ob das völlig stimmt.

Wie auch immer , gibt es da draußen etwas, das so funktioniert? Zusätzliche Punkte, wenn es tatsächlich gitals Teil seiner Implementierung verwendet. Ich akzeptiere diese Antwort. Da bist du nur für die Punkte drin und alles.

intuitiert
quelle

Antworten:

1

Ich bin sicher , dass man tun konnte, etwas mit envund source.

 # "commit"
 env > saved_state

 # "checkout"
 source saved_state

Alles andere wäre Schnittstellenzucker. Man könnte sogar ein Skript schreiben, das die saved_stateDateien automatisch irgendwo in ein Git-Repository legt, damit man sie durchsuchen kann tig.

Ich muss zugeben, dass ich entsetzt bin über die Möglichkeit extrem chaotischer und verwirrender Arbeitsabläufe, die dies ermöglichen würde.

Benjamin Bannier
quelle
hmm, vielleicht wäre es so einfach. Wenn Sie verwenden, erhalten envSie jedoch keine Funktionsdefinitionen oder andere Dinge, bei denen ich mir nicht sicher bin. Auch die Kasse müsste unsetfür -Zeilen in der Diff s tun . Ich stellte mir vor, die Ausgabe von setZuweisungen unset, functionAnweisungen usw. zu analysieren und eine Reihe von Anweisungen zu erstellen, die erforderlich wären, um diese Änderung aufzurufen. Andere Dinge wie shoptsollten auch enthalten sein.
Intuited
Unordentlich und verwirrend: Ich hatte die Hoffnung, so etwas zu finden, um unordentliche und verwirrende Workflows zu vermeiden, in denen ich ein Skript als Quelle verwenden und aktualisieren muss, indem ich historyin vim übergebe und die Funktionsdefinitionen aus dem Verlauf in das Skript kopiere. Es ist viel sinnvoller, dies mit dem Prototyping der Shell-Umgebung zu tun.
Intuited
@intuited Ja, das funktioniert nicht für Funktionen. Vielleicht möchten Sie wirklich eine bequeme Möglichkeit zum Speichern von Snippets, anstatt Ihren gesamten Arbeitsablauf auf eine VC-Maschine zu verteilen?
Benjamin Bannier
1
Die Versionskontrolle von Snippets mit aufgabenorientierten Verzweigungen scheint mir die bequemste Möglichkeit zu sein, sie zu speichern. gitAls Arbeitsmodell oder Implementierungsbasis ist dies aus zwei Gründen ein wenig eingeschränkt: 1) Die Zweiggruppe ist eine flache Liste, was bedeutet, dass Sie nicht die bequeme Möglichkeit haben, viele von ihnen [neu] zu organisieren. 2) Es gibt keine Möglichkeit, einen "geschichteten Zweig" zu erstellen, der mehr als einen Zweig dynamisch zusammenführt. In Bezug auf die Programmierung handelt es sich bei Zweigen um statische Typen und bei Commits um Kompilierungen.
Intuited