wznawiane sesje bash z obsługą oddziału

1

Czy istnieje narzędzie usprawniające przechowywanie i przywracanie sesji bash? Chciałbym móc wykonać EG

$ 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

Biorąc pod uwagę podobieństwo do gitzestawu poleceń, kusi mnie, aby użyć nieprzyzwoitego słowa lub alternatywnie tytułu albumu Smashing Pumpkins jako nazwy polecenia w tym przykładzie. Ale footo jest dobre ole .

Swoją wiarę w wykonalność tej koncepcji setopieram w dużej mierze na założeniu, że uruchomienie z powłoki bash da ci wywoływalny skrypt, który przywróci to środowisko. Nie jestem pewien, czy to całkowicie prawda.

W każdym razie , czy istnieje coś takiego, co działa w ten sposób? Dodatkowe punkty, jeśli faktycznie wykorzystuje gitjako część jego realizacji. Przyjmuję tę odpowiedź. Ponieważ jesteś w nim tylko za punkty i wszystko.

intuicyjny
źródło

Odpowiedzi:

1

Jestem pewien, że można coś wymyślić przy użyciu envi source.

 # "commit"
 env > saved_state

 # "checkout"
 source saved_state

Cała reszta to cukier interfejsu. Można nawet skryptu automatycznie umieścić saved_statepliki w jakimś repozytorium git, aby móc je przeglądać tig.

Muszę przyznać, że jestem przerażony potencjalnie wyjątkowo niechlujnymi i mylącymi przepływami pracy, na które pozwoli to.

Benjamin Bannier
źródło
hmm, może to byłoby takie proste. Chociaż jeśli go użyjesz env, nie otrzymasz żadnych definicji funkcji ani innych rzeczy, których nie jestem pewien. Również kasa musiałaby wykonać unsets dla -linii w diff. Wyobraziłem sobie analizowanie wyników seti budowanie zestawu przydziałów unset, functioninstrukcji, instrukcji itp., Które byłyby konieczne do wywołania tej zmiany. shoptNależy również uwzględnić inne rzeczy, takie jak .
intuicyjnie,
Jeśli chodzi o bałagan i dezorientację: miałem nadzieję znaleźć coś takiego, aby umożliwić uniknięcie bałaganu i dezorientacji w przepływach pracy, w których muszę uzyskać źródło, a następnie zaktualizować skrypt, przesyłając go historydo vima i kopiując definicje funkcji z historii do skryptu. Bardziej sensowne jest robienie tego przy prototypowaniu środowiska powłoki.
intuicyjnie,
@intuited Tak, to nie działa dla funkcji. Być może to, czego naprawdę chcesz, to wygodny sposób przechowywania fragmentów zamiast umieszczania całego przepływu pracy w niektórych maszynach VC?
Benjamin Bannier
1
Utrzymywanie fragmentów kodu pod kontrolą wersji z gałęziami zorientowanymi na zadania wydaje mi się najwygodniejszym sposobem ich przechowywania. gitjest właściwie nieco ograniczony jako działający model lub baza implementacyjna, z dwóch powodów: 1) zestaw rozgałęzień jest płaską listą, co oznacza, że ​​nie masz wygodnego sposobu [re] uporządkowania wielu z nich; 2) nie ma możliwości utworzenia „gałęzi warstwowej”, która dynamicznie łączy więcej niż jedną gałąź. Z punktu widzenia programowania gałęzie są typami statycznymi, a zatwierdzenia są kompilacjami.
intuicyjnie,