Чи є спрощена система контролю версій, яка підходить для написання некодерів у Emacs?


28

Я академік і люблю займатися якомога більше своїх писань в Emacs. Ключова річ, якої мені не вистачає, - це можливість легко переглядати зміни, внесені мною в текстовий файл з часом.

Функції відстеження у статтях Вікіпедії або Документах Google обидва відповідають тому, що я шукаю. Я грав з такими системами управління версіями, як git, тому що вони, здається, добре підтримують Emacs, але мені було важко використовувати та набагато складніше, ніж те, що мені потрібно. Реєстрація сховищ, реєстрація та вихід, все, що було просто клопітно.

Я не думаю, що там є якісь пакети, які забезпечують функціонал, який я шукаю, відносно зручним для користувача способом?


3
Я рекомендую використовувати gitі magit- github.com/magit/magit - оскільки ви вже трохи пограли з цим. Напевно, ви захочете ознайомитись із параметрами командного рядка, щоб ви краще зрозуміли, що magitробиться. Emacs не призначений для некодерів, але ви були досить довго на сцені, щоб цього не боятися - :) Ви також можете спробувати пограти з gist: github.com/defunkt/gist.el
законник

Технічно мета vc-групи команд - спростити процес використання VCS. На жаль, вони не настільки інтуїтивні, щоб дозволити користувачам, які не мають досвіду, добре використовувати їх. З іншого боку, такі системи, як ви, про які ви згадуєте, дуже обмежують, так що швидко розвиваються вимоги, які вони не можуть задовольнити. gnu.org/software/emacs/manual/html_node/emacs/… існує спрощений механізм збереження резервних копій, але, зважаючи на вищезазначене, я б рекомендував навчитися використовувати деякі VCS замість цього.
wvxvw

6
Я також академік і почав використовувати git/ magitдля контролю версій своїх робіт. Початок виглядає залякуючим, але а) вам не доведеться вивчати все це одразу, і б) приємно користуватися після переходу початкової кривої навчання. Хороший робочий процес також допомагає дисциплінувати свої завдання з письма, оскільки заохочує вас коментувати те, що ви робите, - це чудовий спосіб отримати графік еволюції письмового проекту.
День

На якій операційній системі ви працюєте? Я використовував RCS роками, а раніше SCCS, але це сталося так, що це вже не в комплекті з ОС, і нещодавно перейшов на git, маючи декілька паперів під підривом. Процес перевірки в git має один додатковий крок у порівнянні з RCS, але в ряді ситуацій дуже корисно, щоб набори файлів були зареєстровані разом.
Ендрю Сванн

Це було на мій погляд, і автоматичної фіксації може бути частиною історії: Автоматично зробити мерзотника після кожного збереження projects.ryuslash.org/git-auto-commit-mode
grettke

Відповіді:


43

Проблема існуючих систем управління версіями полягає не стільки в їх складності; Справа в тому, що там є така велика кількість інформації, що початківцям може бути дуже важко побачити ліс за деревами (тобто зрозуміти, що вони роблять, і не потрібно вчитися, коли вони тільки починають роботу ).

Ця публікація буде зосереджена на тому git, а також описати, як керувати нею від Emacs за допомогою додаткового пакету, який називається magit. Так , gitце складно, але вам не потрібно багато вчитися, щоб продуктивно використовувати це з метою, яку ви описуєте.

Я припускаю, що ви gitвстановили (якщо цього не зробите, отримайте його тут ), і що ви зовсім не хочете залишати Emacs.


Встановлення magit

magitє gitпередумови для Emacs. Він доступний у MELPA, і встановити його можна за допомогою:

M-x package-install RET magit RET

Якщо ви не ввімкнули MELPA у своїй конфігурації, ви можете знайти інструкції, як це зробити тут .

Налаштування сховища

Скажімо, ~/writingу вашому домашньому каталозі є папка, яка містить один або кілька документів, які ви хочете поставити під контроль версій.

  1. Відкрийте папку в Dired: C-x d ~/writing RET
  2. Відкрийте оболонку: M-x shell RET
  3. Введіть git initі натисніть RET.

Це воно. Тепер у вас є gitсховище. Не потрібно «реєструвати» його ніде. gitє розподіленою системою управління версіями; для відстеження змін не потрібен віддалений сервер.

Перевірка стану вашого сховища

  1. Поверніться до буфера Dired, який містить список файлів у вашому сховищі.
  2. Зробіть M-x magit-status RET.

Ви можете думати про буфер, який з'являється як "панель управління" для роботи з вашим сховищем. Для нового сховища воно виглядає приблизно так:

Magit буфер статусу для новоствореного сховища

  • Ви можете переміщатися між різними розділами цього буфера за допомогою n( magit-goto-next-section) та p( magit-goto-previous-section).

  • Ви можете оновити буфер, натиснувши g( magit-refresh).

Зауважте, що ви можете створити буфер статусу з будь-якого файлу чи каталогу, що належать до сховища, яке ви створили раніше.

Додавання файлів

Як видно на скріншоті, у сховищі є три файли, які gitнаразі не відстежуються. Щоб сказати gitпочати відстеження файлу, вам потрібно його поетапно : Позначаючи точку на файлі, який потрібно додати, натисніть s. Буфер стану буде виглядати приблизно так:

Magit буфер стану після додавання файлу-1.txt

Здійснення

Після постановки одного або декількох файлів ви можете зробити їх, натиснувши c c. Це виведе буфер, який виглядає приблизно так:

Magit буфер для введення повідомлення про фіксацію

Введіть повідомлення про фіксацію вгорі, а потім натисніть, C-c C-cщоб завершити виконання. (Щоб скасувати, натисніть C-c C-k.)

Буфер стану буде виглядати приблизно так:

Magit буфер стану після першого введення

Постановочні зміни

Якщо ви внесете зміни до відстежуваного файлу, вони будуть вказані в окремому розділі ("Ненаписані зміни") в буфері стану:

Нестандартні зміни (згорнуті)

Щоб переглянути зміни, внесені у файл, перейдіть до цього рядка Modified file-1.txtта натисніть TAB:

Нестандартні зміни (розширено)

Щоб змінити ці зміни, натисніть s:

Завантажте буфер статусу після постановки змін на відстежуваний файл

Перегляд минулих комітетів

Нарешті, якщо ви хочете переглянути минулі комісії, ви можете натиснути l l(це два малі регістри):

Magit журналу буфера

Як завжди, ви можете орієнтуватися в буфері, який додається nі p. Magit покаже зміни, пов'язані з окремими комісіями, переліченими в цьому буфері, в окремому вікні.

Підсумок

З оболонки:

  • git init: Ініціалізувати gitсховище в поточному каталозі

З будь-якого файлу чи каталогу, пов’язаних із gitсховищем:

  • M-x magit-status RET

З буфера стану:

  • s щоб додати нові файли або зміни етапів

  • c c здійснити поетапні зміни

    • C-c C-c завершити фіксацію
    • C-c C-k відміняти скоєння
  • l l для перегляду журналів фіксації

Це воно. :)


7
Вам не потрібно git initз оболонки. Якщо ви зателефонуєте M-x magit-statusдесь за межі будь-якого сховища git, він запропонує встановити його. (Але вам потрібно буде зателефонувати ще раз, щоб відобразити буфер статусу після завершення налаштування).
wvxvw

Ви переконали мене, що варто ще раз спробувати контролю над версіями, і це має бути корисним посібником. Спасибі!
Брайан Z

1
Поки що добре, але одне розчарування полягає в тому, що коли я змінюю кілька слів у довгому абзаці, то весь весь абзац виділяється як поетапна зміна. Мені дуже хочеться бачити зміни слово за словом, а не рядок за рядком.
Брайан Z

3
@BrianZ Ви можете налаштувати змінну, magit-diff-refine-hunkщоб отримати бажану поведінку. Додайте (setq magit-diff-refine-hunk t) або (setq magit-diff-refine-hunk 'all) до свого init-файла. Ви можете зробити, C-h v magit-diff-refine-hunk RETщоб отримати більше інформації про те, що означають різні налаштування.
itsjeyd

Вам потрібно буде експериментувати з налаштуваннями magit-diff-refine-hunk, щоб наблизитися до того, що ви хочете. Налаштування за замовчуванням чудово підходять для відстеження змін коду, але не обов'язково геніальні, коли ви хочете відстежувати зміни в профі. Це може зайняти трохи, перш ніж ви зрозумієте це правильно, але це повинно бути можливим, і як тільки ви це зробите, я підозрюю, що ви ніколи не повернетесь!
Тім Х

11

Окрім magit(як вміло демонструє відповідь @ itsjeyd), ви також можете спробувати git-timemachine, що надає засоби для швидкого переходу через старіші версії файлу під gitконтролем версій. Відповідно до його сторінки github, наступні вкладки клавіатури за замовчуванням дають вам зрозуміти, що можна зробити:

  • p Відвідайте попередню історичну версію
  • n Відвідайте наступну історичну версію
  • w Скопіюйте скорочений хеш поточної історичної версії
  • W Скопіюйте повний хеш поточної історичної версії
  • q Вийдіть з машини часу.

8

Я підозрюю, що вам буде дуже цікавим режим резервного копіювання та / або Резервне копіювання Walker .

Обидва мають на меті використовувати існуючі механізми резервного копіювання в Emacs та забезпечувати кращий доступ до та історію вашої історії файлів, не вимагаючи додаткового VCS.


6

Як було сказано, простий спосіб мати різні версії файлів - це система резервного копіювання Emacs.

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

Для цього буде використаний спеціальний каталог для нумерованих резервних копій, який ніколи не буде автоматично видалений. Потім ви можете C-u C-x C-sв будь-який час зробити іншу версію.

Хоча, я думаю, не існує простого, готового до використання інтерфейсу, наприклад, для розробки цих версій. Тож вам доведеться вручну відкрити одну чи дві резервні копії та використовувати ediff-buffersна них та / або оригінальний буфер.


1
Можна відрізняти резервні копії, використовуючи, наприклад: gnu.org/software/emacs/manual/html_node/emacs/… (позначте один файл з mточкою переміщення до іншого файлу та натисніть =).
wvxvw

2
Це теоретично здавалося привабливим варіантом, але це просто дає мені надзвичайну папку, повну випадкових резервних копій. Мене цікавлять версії, повністю поховані. Можливо, є спосіб вручну запустити нумеровану резервну копію файлу, але лише тоді, коли я цього хочу? Якби я міг якось докласти до цього резервного копіювання коротке повідомлення про "фіксацію", то це було б дуже приємним рішенням. Але наразі, мабуть, я застряг у навчанні магіту :)
Брайан Z

2

У мене ще не було можливості скористатися цим рішенням, але ви, можливо, також захочете розглянути флешкей Cory Doctorow та Томаса Гедеона . Ось що до цього має сказати Doctorow :

Мене запропонували зробити це після обговорень з кількома цифровими архівістами, які скаржилися, що до епохи комп'ютеризації письменники випустили низку повних чернеток на шляху до публікацій, разом із стираннями, анотаціями тощо. Це архівне золото, оскільки вони висвітлюють творчий процес таким чином, що часто розкриває приховані історії за книгами, які нас хвилюють. Навпаки, багато авторів створюють лише один (або кілька) цифрових файлів, які модифікуються аж до часу публікації, без реальних систематичних записів проміжних станів між першим бітом композиції та остаточним проектом.

Введіть Flashbake. Кожні 15 хвилин Flashbake розглядає будь-які файли, на які ви попросите його перевірити (я маю на увазі всю свою незабезпечену літературу, мій список тодо, мій файл корисних бітів інформації та заповнені електронні версії моїх останніх книг ) та записує будь-які зміни, внесені з часу останньої перевірки, анотуючи їх із поточним часовим поясом на системному годиннику, погодою у цьому часовому поясі, як отримано від Google, та останні три заголовки з вашим поточним рядком під ними в RSS вашому блозі feed (Я характеризував це як "Де я, що там, і про що я думаю?"). Він також записує час роботи вашого комп'ютера. Щодо майбутньої версії, я думаю, що було б весело мати останні три пісні, які грає ваш музичний плеєр.

Коли це було сказано, я ніколи не мав можливості перевірити це, оскільки я закінчив писати багато речей в org-режимі, і багато програмував, і ... ну ... я наче краще став використовуватись magit, і врешті-решт, мені щось просто ... не потрібно було це використовувати.

У будь-якому випадку це рішення було спрямоване на письменників, які працюють над нетехнічними проектами. Ви можете виявити, що це може відповідати вашим вимогам.


1

Хоча це абсолютно не пов'язано emacs, ви все одно можете зберігати текстові файли в Dropbox, а якщо ви професійний користувач, ви можете використовувати розширену історію версій . (Якщо ви хочете шифрувати, ви можете подивитися SparkleShare .)

Потім є флешбек, який трохи автоматизований ( ось підручник ).

Також він просив в іншому місці теж , для яких відповіді можуть виявитися корисними.


Flashbake виглядає дуже перспективно. Я обов'язково спробую.
Брайан Z

-1

Ви можете використовувати Dropbox. Це робить ревізовану версію вашого файлу кожен раз, коли ви натискаєте Cx Cs. Для шифрування моїх текстових файлів я використовую GNU Privacy Guard, що підтримується Emacs.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.