Создание и использование хранилища Mercurial для системных файлов - PullRequest
3 голосов
/ 04 декабря 2011

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

  1. Mercurial не хранит метаданные файла (владение, права доступа, расширенные атрибуты).

  2. Mercurial не будет обрабатывать файлы, которые не находятся в каталоге репозитория.

Я полагаю, что я нашел решение для (1), хотя, по-видимому, оно включает изменение источника отдельной утилиты и немного hgrc магия.

Второй момент кажется более хитрым: я не хочу помещать репозиторий Mercurial в корень файловой системы (/) по разным причинам. К сожалению - по вполне допустимой очень веской причине - Mercurial не будет обрабатывать файлы, находящиеся вне корня хранилища, ни напрямую, ни через символические ссылки.

Возможно, я мог бы написать скрипт-обертку, который использовал бы, например, mount --bind или unionfs , чтобы Mercurial мог получить доступ к корневой файловой системе. В прошлом я писал похожий сценарий, но он ни в коем случае не был прозрачным, и мне приходилось прыгать через много обручей при его использовании - сделать его правильно было бы сложно, особенно если я хочу обрабатывать абсолютные пути к файлам.

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

  • Существует ли существующее полное решение для этого варианта использования? Расширение Mercurial или скрипт-обертка, которые позволят hg прозрачно работать с системными файлами?

  • В качестве альтернативы - и весьма неохотно - существует ли современная система контроля версий или другое решение для управления версиями, которое сделает это из коробки?

Ответы [ 2 ]

2 голосов
/ 04 декабря 2011

В качестве альтернативы - и весьма неохотно - существует ли современная система контроля версий или другое решение для управления версиями, которое сделает это «из коробки»?

Flyback (аналогично«Машина времени» от Apple) не является VCS, но если все, что вам нужно, это линейная история, то это может быть именно то, что вам нужно.

1 голос
/ 25 августа 2013

Я наконец нашел простое решение, используя git. В частности, git позволяет рабочему каталогу ( рабочее дерево в терминах git) находиться вне самого хранилища. Прежде всего я должен сделать следующее:

  • Создайте безопасный каталог в нужном месте:

    # mkdir -p /root/git
    # chmod 700 /root/git
    
  • Инициализировать репозиторий git в предыдущем каталоге:

    # cd /root/git
    # git init
    
  • Измените .git/config для включения опции core.worktree, добавив worktree = /etc в раздел [core]

  • Используйте git обычно:

    # git add /etc/hosts
    # git commit -m "..." -a
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...