Czy istnieje uproszczony system kontroli wersji odpowiedni dla niekodujących programów piszących w Emacsie?

28

Jestem nauczycielem akademickim i uwielbiam pisać jak najwięcej w Emacsie. Kluczową rzeczą, której mi brakuje, jest możliwość łatwego przeglądania zmian, które wprowadziłem do pliku tekstowego w miarę upływu czasu.

Funkcje śledzenia w artykułach Wikipedii lub Dokumentach Google są zgodne z tym, czego szukam. Grałem z systemami kontroli wersji takimi jak git, ponieważ wydaje się, że są one dobrze obsługiwane przez Emacsa, ale uznałem, że są one trudne w użyciu i znacznie bardziej złożone niż to, czego potrzebuję. Rejestrowanie repozytoriów, sprawdzanie i wylogowywanie, wszystko to było po prostu kłopotliwe.

Nie sądzę, że istnieją jakieś pakiety, które zapewniają funkcjonalność, której szukam w stosunkowo przyjazny dla użytkownika sposób?

Brian Z
źródło
3
Polecam użycie giti magit- github.com/magit/magit - ponieważ już trochę się z tym bawiłeś . Prawdopodobnie będziesz chciał zapoznać się z opcjami wiersza polecenia, aby lepiej zrozumieć, co magitsię dzieje. Emacs nie jest dla niekodujących, ale jesteś na scenie wystarczająco długo, aby się go nie bać - :) Możesz także spróbować grać z gist: github.com/defunkt/gist.el
lawlist
Technicznie celem vc-grupy poleceń jest uproszczenie procesu korzystania z VCS. Niestety nie są one tak intuicyjne, aby pozwalały użytkownikom bez doświadczenia dobrze z nich korzystać. Z drugiej strony systemy takie jak te, o których wspominasz, są bardzo ograniczające, dlatego szybko rozwija się wymagania, których nie można zaspokoić. gnu.org/software/emacs/manual/html_node/emacs/… istnieje uproszczony mechanizm przechowywania kopii zapasowych, ale z powodu powyższego wolałbym raczej nauczyć się korzystać z niektórych VCS.
wvxvw
6
Jestem również naukowcem i zacząłem używać git/ magitdo kontroli wersji moich artykułów. Na początku wygląda to na zastraszające, ale a) nie musisz uczyć się wszystkiego naraz, i b) korzystanie z niego jest przyjemne po przejściu początkowej krzywej uczenia się. Dobry przepływ pracy pomaga również zdyscyplinować zadania pisania, ponieważ zachęca do adnotacji o tym, co robisz - co jest świetnym sposobem na uzyskanie harmonogramu ewolucji projektu pisania.
Dan
Z jakiego systemu operacyjnego korzystasz? Używałem RCS od lat, a wcześniej SCCS, ale tak się stało, że nie było już w pakiecie z systemem operacyjnym, a ostatnio przerzuciłem się na git, ponieważ niektóre dokumenty były podupadłe. Proces sprawdzania w git ma jeden dodatkowy krok w porównaniu do RCS, ale w wielu sytuacjach bardzo przydatne jest, aby zestawiać pliki razem.
Andrew Swann
Miałem to na myśli i automatyczne zatwierdzanie może być częścią historii: Automatycznie zobowiązuj się do git po każdym zapisaniu projektów
.ryuslash.org/

Odpowiedzi:

43

Problemem z istniejącymi systemami kontroli wersji nie jest ich złożoność; to fakt, że jest tam tak wiele informacji, że początkujący mogą mieć trudności z zobaczeniem lasu dla drzew (tj. zorientowaniem się, co robią i nie muszą się uczyć, kiedy dopiero zaczynają) ).

Ten post skupi się na tym git, jak opisać sterowanie Emacsem za pomocą pakietu dodatków o nazwie magit. Tak , gitjest złożony, ale nie musisz się dużo uczyć, aby go produktywnie wykorzystać do opisanego celu.

Zakładam, że masz gitzainstalowany (jeśli nie, zdobądź go tutaj ) i że w ogóle nie chcesz opuszczać Emacsa.


Instalowanie magit

magitjest gitnakładką na Emacsa. Jest dostępny w MELPA i można go zainstalować za pomocą:

M-x package-install RET magit RET

Przy małej szansie, że nie włączyłeś MELPA w konfiguracji, znajdziesz instrukcje, jak to zrobić tutaj .

Konfigurowanie repozytorium

Załóżmy, że masz folder wywoływany ~/writingw katalogu domowym, który zawiera jeden lub więcej dokumentów, które chcesz poddać kontroli wersji.

  1. Otwórz folder w Dired: C-x d ~/writing RET
  2. Otwórz powłokę: M-x shell RET
  3. Wpisz git initi naciśnij RET.

to jest to! Masz teraz gitrepozytorium. Nigdzie nie trzeba go „rejestrować”. gitjest rozproszonym systemem kontroli wersji; nie wymaga zdalnego serwera do śledzenia zmian.

Sprawdzanie statusu swojego repozytorium

  1. Wróć do bufora Dired, który wyświetla listę plików w repozytorium.
  2. Zrobić M-x magit-status RET.

Możesz myśleć o buforze, który pojawia się jako „panel sterowania” do pracy z repozytorium. W przypadku nowego repozytorium wygląda to mniej więcej tak:

Bufor statusu Magit dla nowo utworzonego repozytorium

  • Możesz poruszać się między różnymi sekcjami tego bufora za pomocą n( magit-goto-next-section) i p( magit-goto-previous-section).

  • Możesz odświeżyć bufor naciskając g( magit-refresh).

Pamiętaj, że możesz przywołać bufor stanu z dowolnego pliku lub katalogu, który należy do repozytorium, które wcześniej skonfigurowałeś.

Dodawanie plików

Jak widać na zrzucie ekranu, w repozytorium znajdują się trzy pliki, które gitobecnie nie są śledzone. Aby gitrozpocząć śledzenie pliku, musisz go wyodrębnić : wskaż plik, który chcesz dodać, naciśnij s. Bufor statusu będzie wyglądał następująco:

Zatrzymaj bufor stanu po dodaniu pliku 1.txt

Zobowiązanie się

Po przemieszczeniu jednego lub więcej plików, możesz zatwierdzić je, naciskając c c. Spowoduje to wyświetlenie bufora, który wygląda następująco:

Bufor Magit do wprowadzania komunikatu zatwierdzenia

Wpisz swój komunikat zatwierdzenia u góry, a następnie naciśnij, C-c C-caby sfinalizować zatwierdzenie. (Aby przerwać, naciśnij C-c C-k.)

Bufor statusu będzie wyglądał następująco:

Bufor statusu Magit po pierwszym zatwierdzeniu

Zmiany etapowe

Jeśli wprowadzisz zmiany w śledzonym pliku, zostaną one wymienione w osobnej sekcji („Zmiany niestacjonarne”) w buforze stanu:

Niestopniowe zmiany (zwinięte)

Aby przejrzeć zmiany wprowadzone w pliku, przejdź do wiersza z napisem Modified file-1.txti naciśnij TAB:

Zmiany nieetapowane (rozwinięte)

Aby wprowadzić zmiany, naciśnij s:

Zachowaj bufor stanu po przemieszczeniu zmian do śledzonego pliku

Wyświetlanie przeszłych zatwierdzeń

Wreszcie, jeśli chcesz przejrzeć poprzednie zatwierdzenia, możesz nacisnąć l l(to dwie małe litery L):

Bufor dziennika Magit

Jak zwykle możesz poruszać się po buforze, który pojawia się w ni p. Magit pokaże zmiany związane z poszczególnymi zatwierdzeniami wymienionymi w tym buforze w osobnym oknie.

Podsumowanie

Z muszli:

  • git init: Zainicjuj gitrepozytorium w bieżącym katalogu

Z dowolnego pliku lub katalogu powiązanego z gitrepozytorium:

  • M-x magit-status RET

Z bufora stanu:

  • s aby dodać nowe pliki lub zmiany etapów

  • c c zatwierdzać zmiany etapowe

    • C-c C-c aby sfinalizować zatwierdzenie
    • C-c C-k przerwać zatwierdzenie
  • l l aby wyświetlić dzienniki zatwierdzeń

to jest to! :)

itsjeyd
źródło
7
Nie musisz tego robić git initz powłoki. Jeśli zadzwonisz M-x magit-statusgdzieś poza repozytorium git, zaoferuje utworzenie jednego. (Musisz jednak wywołać go ponownie, aby wyświetlić bufor stanu po zakończeniu instalacji).
wvxvw
Przekonałeś mnie, że warto dać kolejną kontrolę wersji i powinien to być pomocny przewodnik. Dzięki!
Brian Z
1
Jak dotąd tak dobrze, ale jedną frustracją jest to, że kiedy zmieniam kilka słów w długim akapicie, cały akapit jest podświetlany jako zmiana etapowa. Naprawdę chcę zobaczyć zmiany słowo po słowie, a nie linia po linii.
Brian Z
3
@BrianZ Możesz dostosować zmienną, magit-diff-refine-hunkaby uzyskać pożądane zachowanie. Dodaj (setq magit-diff-refine-hunk t) lub (setq magit-diff-refine-hunk 'all) do pliku inicjującego. Możesz zrobić, C-h v magit-diff-refine-hunk RETaby uzyskać więcej informacji na temat znaczenia różnych ustawień.
itsjeyd
Będziesz musiał eksperymentować z ustawieniami magit-diff-refine-hunk, aby zbliżyć się do tego, czego chcesz. Domyślne ustawienia są świetne do śledzenia zmian kodu, ale niekoniecznie genialne, gdy chcesz śledzić zmiany w profesjonalistach. Może zająć trochę czasu, zanim wszystko będzie dobrze, ale powinno być możliwe, a kiedy to zrobisz, podejrzewam, że nigdy nie wrócisz!
Tim X
11

Oprócz magit(jak umiejętnie pokazuje odpowiedź @ itsjeyd) możesz również spróbować git-timemachine, który zapewnia funkcje szybkiego przełączania między starszymi wersjami pliku pod gitkontrolą wersji. Zgodnie ze stroną github, następujące domyślne skróty klawiszowe dają ci wyobrażenie o tym, co możesz zrobić:

  • p Odwiedź poprzednią wersję historyczną
  • n Odwiedź następną historyczną wersję
  • w Skopiuj skrót skrótu bieżącej wersji historycznej
  • W Skopiuj pełny skrót bieżącej wersji historycznej
  • q Wyjdź z wehikułu czasu.
Dan
źródło
8

Podejrzewam, że tryb kopii zapasowych i / lub Backup Walker są bardzo interesujące.

Oba mają na celu wykorzystanie istniejących mechanizmów tworzenia kopii zapasowych w Emacsie, a także zapewniają lepszy dostęp do historii plików i ich widoczność, bez konieczności dodatkowego VCS.

phils
źródło
6

Jak wspomniano, prostym sposobem na posiadanie różnych wersji pliku jest system kopii zapasowych Emacs.

(setq backup-directory-alist '(("." . "~/emacs-backups"))
      version-control 'numbered
      make-backup-files t
      delete-old-versions 'never)

Spowoduje to użycie dedykowanego katalogu do numerowanych kopii zapasowych, który nigdy nie zostanie automatycznie usunięty. Następnie możesz użyć C-u C-x C-sdo utworzenia innej wersji w dowolnym momencie.

Chociaż myślę, że nie ma łatwego, gotowego do użycia interfejsu do np. Różnicowania tych wersji. Trzeba więc ręcznie otworzyć jedną lub dwie kopie zapasowe i użyć ediff-buffersna nich i / lub oryginalnym buforze.

politza
źródło
1
Możesz różnicować kopie zapasowe, używając na przykład: gnu.org/software/emacs/manual/html_node/emacs/… (zaznacz jeden plik mpunktem przejścia do drugiego pliku i naciśnij =).
wvxvw
2
Teoretycznie wydawało się to atrakcyjną opcją, ale po prostu daje mi przytłaczający folder pełen losowych kopii zapasowych. Wersje, którymi jestem zainteresowany, są całkowicie zakopane. Być może istnieje sposób, aby ręcznie uruchomić numerowaną kopię zapasową pliku, ale tylko wtedy, gdy chcę? Gdybym mógł jakoś dołączyć krótką „wiadomość zatwierdzenia” do tej kopii zapasowej, byłoby to bardzo miłe rozwiązanie. Ale na razie chyba utknąłem w nauce magit :)
Brian Z
2

Nie miałem jeszcze okazji skorzystać z tego rozwiązania, ale możesz też rozważyć flashowanie Cory'ego Doctorowa i Thomasa Gideona . Oto, co ma do powiedzenia Doctorow :

Zostałem poproszony o zrobienie tego po rozmowach z kilkoma archiwistami cyfrowymi, którzy skarżyli się, że przed erą skomputeryzowaną pisarze przygotowali serię kompletnych szkiców w drodze do publikacji, wraz z wymazami, adnotacjami i tak dalej. Są to archiwalne złoto, ponieważ oświetlają proces twórczy w sposób, który często ujawnia ukryte historie leżące u podstaw książek, na których nam zależy. Natomiast wielu autorów tworzy tylko jeden (lub kilka) plików cyfrowych, które są modyfikowane aż do czasu publikacji, bez żadnych rzeczywistych systematycznych zapisów stanów przejściowych między pierwszym kawałkiem kompozycji a końcowym szkicem.

Wpisz Flashbake. Co 15 minut Flashbake sprawdza wszystkie pliki, o które prosisz, aby je sprawdził (mam ich wgląd we wszystkie moje prace w toku, moja lista rzeczy do zrobienia, mój plik przydatnych fragmentów informacji oraz ukończone elektroniczne wersje moich ostatnich książek ) i zapisuje wszelkie zmiany wprowadzone od ostatniej kontroli, adnotując je bieżącą strefą czasową na zegarze systemowym, pogodą w tej strefie czasowej pobraną z Google oraz trzema ostatnimi nagłówkami z wierszem pod nimi w kanale RSS bloga kanał (scharakteryzowałem to jako „Gdzie jestem, jak tam jest i o czym myślę?”). Rejestruje także czas pracy komputera. W przyszłej wersji myślę, że fajnie byłoby odtwarzać trzy ostatnie utwory w odtwarzaczu.

To powiedziawszy, nigdy nie miałem okazji tego przetestować, ponieważ skończyłem pisać dużo rzeczy w trybie org, dużo programowałem i ... cóż ... trochę lepiej się posługiwałem magit, i ostatecznie po prostu ... nie musiałem tego używać.

W każdym razie to rozwiązanie było skierowane do pisarzy pracujących nad nietechnicznymi projektami. Może się okazać, że może pasować do twoich wymagań.

Tariq Kamal
źródło
1

Chociaż jest to absolutnie niezwiązane emacs, nadal możesz zapisywać pliki tekstowe w Dropbox, a jeśli jesteś profesjonalnym użytkownikiem, możesz skorzystać z rozszerzonej historii wersji . (Jeśli chcesz szyfrowania, możesz spojrzeć na SparkleShare ).

Potem jest flashbake, który jest nieco zautomatyzowany ( tutaj jest tutorial ).

Również został poproszony gdzie indziej też , dla których odpowiedzi można znaleźć użyteczne.

Zsolt Botykai
źródło
Flashbake wygląda bardzo obiecująco. Zdecydowanie spróbuję.
Brian Z
-1

Możesz użyć Dropbox. To sprawia, że ​​poprawna wersja twojego pliku za każdym razem, gdy naciskasz Cx Cs. Do szyfrowania moich plików tekstowych używam GNU Privacy Guard, obsługiwanego przez Emacsa.

Роман Захаров
źródło