Существует ли упрощенная система контроля версий, подходящая для некодеров, пишущих в Emacs?


28

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

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

Я не думаю, что есть какие-либо пакеты, которые предоставляют функциональность, которую я ищу, относительно дружественным способом?


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

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

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

На какой операционной системе вы работаете? Я использовал RCS в течение многих лет, а ранее SCCS, но это стало тем случаем, что он больше не был связан с ОС, и недавно переключился на git, имея некоторые документы в подрывной деятельности. Процесс регистрации в git имеет один дополнительный шаг по сравнению с RCS, но в ряде случаев очень полезно иметь наборы файлов, зарегистрированных вместе.
Эндрю Суонн

Это было у меня на уме, и автоматическая фиксация может стать частью истории: автоматически фиксировать git после каждого сохранения 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:

Буфер состояния Magit после внесения изменений в отслеживаемый файл

Просмотр последних коммитов

Наконец, если вы хотите просмотреть прошлые коммиты, вы можете нажать l 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

Вы убедили меня, что стоит попробовать новую версию системы контроля версий, и это должно быть полезным руководством. Благодарность!
Брайан З

1
Пока все хорошо, но одно разочарование состоит в том, что когда я изменяю несколько слов в длинном абзаце, весь абзац выделяется как поэтапное изменение. Я действительно хочу видеть изменения слово за словом, а не построчно.
Брайан З

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чтобы получить больше информации о том, что означают различные настройки.
itjeyd

Вам нужно будет поэкспериментировать с настройками magit-diff-fine-hunk, чтобы приблизиться к тому, что вы хотите. Настройки по умолчанию отлично подходят для отслеживания изменений кода, но не обязательно блестящие, когда вы хотите отслеживать изменения в профессионалах. Это может занять некоторое время, прежде чем вы получите это совершенно правильно, но это должно быть возможно, и как только вы это сделаете, я подозреваю, что вы никогда не вернетесь!
Тим Х

11

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

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

8

Я подозреваю, что вы найдете режим резервного копирования и / или Backup 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
Это казалось привлекательным вариантом в теории, но это просто дает мне огромную папку, полную случайных резервных копий. Версии, которые меня интересуют, полностью похоронены. Возможно, есть способ вручную запустить нумерованную резервную копию файла, но только когда я этого захочу? Если бы я также мог как-то прикрепить к этой резервной копии краткое «сообщение коммита», это было бы очень хорошим решением. Но сейчас, я думаю, я застрял в изучении магии :)
Brian Z

2

У меня еще не было возможности использовать это решение, но вы также можете рассмотреть флеш-пирог Кори Доктороу и Томаса Гидеона . Вот что Доктороу должен сказать по этому поводу :

Мне было предложено сделать это после обсуждений с несколькими цифровыми архивариусами, которые жаловались на то, что до компьютеризированной эры писатели подготовили серию полных черновиков на пути к публикациям, в которых были удалены записи, аннотации и т. Д. Это архивное золото, поскольку оно освещает творческий процесс таким образом, что часто выявляет скрытые истории, стоящие за книгами, которые нам небезразличны. Напротив, многие авторы создают только один (или несколько) цифровых файлов, которые изменяются вплоть до времени публикации, без каких-либо реальных систематических записей промежуточных состояний между первым битом композиции и финальным черновиком.

Введите Flashbake. Каждые 15 минут Flashbake просматривает любые файлы, которые вы просите проверить (у меня он просматривает все мои художественные произведения, мой список задач, мой файл полезной информации и завершенные электронные версии моих недавних книг). ) и записывает любые изменения, сделанные со времени последней проверки, помечая их текущим часовым поясом на системных часах, погодой в этом часовом поясе, полученной из Google, и последними тремя заголовками с пометкой «под» под ними в RSS вашего блога. кормить (я охарактеризовал это как «Где я, как там, и о чем я думаю?»). Он также записывает время работы вашего компьютера. Для будущей версии, я думаю, было бы забавно, если бы последние три песни воспроизводились вашим музыкальным проигрывателем

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

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


1

Хотя это абсолютно не связано emacs, вы все равно можете сохранять свои текстовые файлы в Dropbox, а если вы являетесь профессиональным пользователем, вы можете использовать расширенную историю версий . (Если вы хотите шифрование, вы можете посмотреть на SparkleShare .)

Тогда есть flashbake, который немного автоматизирован ( вот учебник ).

Также он просил в другом месте тоже , для которых ответы могут оказаться полезными.


Flashbake выглядит очень многообещающе. Я обязательно попробую.
Брайан З

-1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.