Как использовать Mercurial для контроля версий текстовых документов?

Это не совсем вопрос программирования, но я думаю, что он подходит здесь лучше, чем в группе TeX

Я хочу использовать контроль версий для отслеживания изменений текстовых файлов (которые используются для создания вывода LaTeX. (Поскольку я не программист, у меня еще нет более глубокого опыта с системой контроля версий). Я хотел бы использовать Mercurial для этого, и я работаю над MacOS X 10.6.

Файлы относятся к приложениям для работы, поэтому в основном 3 файла для каждой компании:

  • письмо с мотивацией
  • CV
  • и один файл с дипломами, сертификатами,...

У меня есть несколько вопросов, касающихся практических вещей:

  • У меня уже есть один каталог, содержащий много подкаталогов (по одному для каждой компании). Каждый подкаталог содержит эти 2 или 3 *.tex файлы, а также вспомогательные файлы и полученные pdf файлы. (а иногда и другие файлы с информацией о компании).
    Если я хочу добавить уже существующие файлы в новый репозиторий и создать ревизию от каждой (около 15 разных версий), как я могу это сделать?
    Конечно, отношения "родитель" и "ребенок" не будут видны, но, по крайней мере, я могу сделать diff и посмотреть, что изменилось, и у каждого будет номер редакции.
  • Могу ли я оставить эти файлы в исходных каталогах и добавить их в систему управления версиями, или они должны быть в определенном месте?
    (Я хотел бы добавить другие файлы в эти каталоги, которые не будут добавлены в элемент управления версиями, и мне интересно.
  • Могу ли я дать "имя" ревизии (например, название компании) для более удобного поиска после этого?
  • Каким будет лучший рабочий процесс для создания новых версий?
    Я бы выбрал существующую ревизию из репозитория, экспортировал ее в новую папку для новой компании, изменил файлы tex и вернул ее обратно в репо?!

Ответ 1

Сначала я бы рекомендовал два бесплатных онлайн-источника о Mercurial: hginit и книга Mercurial: окончательное руководство.

Теперь, на ваши вопросы.

Я начну с третьего. Да, можно добавлять имена к ревизиям, они называются тегами.

Чтобы зафиксировать существующие версии в линейной истории в одном репозитории, выполните следующие действия:

mkdir myNewRepo
cd myNewRepo
hg init

Теперь у вас есть новый репозиторий. Для каждого каталога компании повторите следующие шаги, чтобы скопировать файлы в репозиторий, сделать их известными hg, зафиксировать их и пометить эту новую ревизию именем.

cp ../oldVersionA/* .
hg add letter.tex resume.tex diploma.pdf
hg commit -m "Job application to A Inc."
hg tag companyA

Обратите внимание, что вам нужно только добавить каждый путь к файлу один раз в репозиторий.

Ответ 2

Мне нечего сказать об использовании Hg, но я думал, что поделился бы некоторыми неприятными проблемами, которые у меня были с использованием git для моих латексных файлов (я полагаю, hg будет вести себя одинаково).

VCS, вероятно, первоначально были разработаны для кода версий, и, как правило, у вас есть одно предложение на строку. Однако, с латексными и другими текстовыми документами, естественно написать полный абзац текста, не разбивая каждую строку на отдельное предложение. Поэтому любое изменение слова в абзаце сдвигает позиции всех других следующих слов в параграфе, а когда вы делаете diff, он показывает, что весь абзац изменен. Это раздражает, когда у вас много текста, и вы делаете ревизию, а затем все подсвечивается! Вот небольшой пример:

\documentclass{article}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque blandit lacus aliquet eros tempus non tristique nisl consectetur. Sed orci odio, viverra quis rutrum eu, eleifend eget risus. Nam elementum tempus auctor. Nunc tincidunt dui et mauris varius faucibus ultrices nulla iaculis. 
\end{document}

После первоначальной фиксации и внесения небольшого изменения здесь вывод diff:

enter image description here

Я не могу сказать, какие изменения я сделал! Обходным путем является использование необязательного --color-words, в котором будут выделены только слова, которые были изменены. Обычно я использую этот параметр diff по умолчанию. Вы можете узнать, есть ли что-то похожее на меркурий.

enter image description here

Хотя git записывает весь абзац как измененный, он выделяет только слова, которые были изменены, что достаточно для меня.


Альтернативное решение требует небольшого изменения в том, как вы пишете ваши латексные файлы. Рассмотрим этот пример, измененный из приведенного выше.

\documentclass{article}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Pellentesque blandit lacus aliquet eros tempus non tristique nisl consectetur.
Sed orci odio, viverra quis rutrum eu, eleifend eget risus.
Nam elementum tempus auctor.
Nunc tincidunt dui et mauris varius faucibus ultrices nulla iaculis. 
\end{document}

Здесь каждое предложение получает свою собственную строку. Если вы скомпилируете оба примера латекса, разница в выходе не будет. Это связано с тем, что латекс автоматически помещает пробел после периода и игнорирует один разрыв строки. Теперь, когда вы делаете изменения внутри строки и различаете ее, git выделяет только эту строку, а не весь абзац. Это то, что я начал медленно начинать, хотя сначала было неприятно не читать текст абзаца.

Ответ 3

Мой любимый учебник по Mercurial здесь Joel Spolsky

enter image description here Вы можете попробовать использовать графические инструменты для Mac OS, такие как Murky или MacHg.

Это поможет вам начать работу.

Поскольку вы хотите отслеживать линейную историю ваших изменений, работа с Mercurial в консоли может быть громоздкой для вас. Инструменты GUI обычно скрывают тайные параметры и показывают только более простое подмножество доступных операций.

UPDATE: Mercurial также имеет репозиторий и рабочий каталог. Разница в том, что хранилище Mercurial хранится локально, и все это. Нет части "центрального сервера". Вся история, теги, ветки хранятся в каталоге .hg в вашем проекте. Рабочий каталог - всего лишь моментальный снимок данной версии. Например, в истории вашего репозитория имеется 99 коммитов. Код рабочего каталога может быть обновлен, чтобы соответствовать, скажем, 50 commit или 98 commit. Таким образом, вы "перемотка вперед" или "перемотать" рабочий каталог, указав номер фиксации (или хеш).