Как использовать Mercurial для контроля версий текстовых документов? - PullRequest
5 голосов
/ 27 мая 2011

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

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

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

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

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

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

Ответы [ 3 ]

15 голосов
/ 27 мая 2011

Мне нечего сказать об использовании 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 по умолчанию на использование этой опции.Возможно, вы сможете узнать, есть ли у Mercurial нечто подобное.

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 голосов
/ 27 мая 2011

Мой любимый урок по Mercurial от Джоэла Спольски

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

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

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

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

3 голосов
/ 27 мая 2011

Сначала я бы порекомендовал два бесплатных онлайн-источника о 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

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

...