Лучшая система управления версиями для управления домашними каталогами

У меня есть 3 Linux-машины, и вы хотите каким-то образом сохранить dotfiles в своих домашних каталогах в синхронизации. Некоторые файлы, такие как .vimrc, одинаковы для всех трех машин, а некоторые из них уникальны для каждой машины.

Я использовал SVN раньше, но все шумихи о DVCS заставляют меня думать, что я должен попробовать один - есть ли какой-то конкретный, который лучше всего работал бы с этим? Или я должен придерживаться SVN?

Ответ 1

У меня была такая же проблема, и я построил инструмент поверх Subversion, который добавляет разрешение, право собственности и отслеживание secontext, сохраняет каталоги .svn из фактически выпущенных версий деревьев и добавляет концепцию слоев, чтобы вы могли пример отслеживает все ваши настройки, связанные с разработкой, которые вы затем проверяете только на компьютерах, которые вы используете для разработки.

Это помогло мне лучше настроить мои настройки на 50 машинах, в которые я вхожу.

Здесь страница проекта. Он по-прежнему немного груб по краям, но мы также используем его при работе с конфигурацией системы версий для наших 60 + серверов.

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

Ответ 2

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

Ключевое различие между Unison и VCS заключается в том, что Unison готов отложить рассмотрение конфликтов, которые необходимо объединить. Плюс он получает все права по умолчанию. И это быстро: я использую его ежедневно, по линии DSL, для синхронизации около 40 ГБ данных.

Ответ 3

Любой DVCS, скорее всего, будет работать нормально. Мой любимый Bazaar. Было бы проще сохранить ваши файлы конфигурации в .config, версии, а затем, по необходимости, символически.

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

Ответ 4

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

Ответ 6

git или Mercurials дешевое ветвление будет отлично работать для этой ситуации. Я начал с Mercurial, потому что он проще, но впоследствии переместился на git.

Ответ 7

Один из способов справиться с этим очень гибко - это иметь каталог сборки под контролем ревизий, а не пытаться подключиться к вашему фактическому домашнему каталогу (который имеет свои проблемы)

поэтому внутри этого вы сохраняете структуру, например

/home/you/code/dotfiles
/home/you/code/dotfiles/dotbashrc
/home/you/code/dotfiles/dotemacs
...
/home/you/code/dotfiles/makefile

и makefile может содержать логику для специализированных файлов (или не)

может быть тяжелее, чем вам нужно, но если ваша фактическая настройка сложна (я делал это через 3 или 4 разных объединения за раз), тогда стоит сделать что-то вроде этого.

Ответ 8

Я использую для этого git. До сих пор мне удалось синхронизировать домашние каталоги на нескольких машинах, без необходимости разветвления и слияния. Вместо этого я использую git rebase. Конфликтов до сих пор было мало и далеко и легко разрешено.

Я сохраняю файлы, которые должны иметь отдельное содержимое из контроля версий, помещая их в .gitignore.

Я сохраняю файлы конфигурации для следующих инструментов в git:

  • различные оболочки
  • emacs и приложения, т.е.
    • гну
    • BBDB
    • Emacs-w3m
  • собачонка
  • Экран
  • различные утилиты и скрипты

Я сохраняю заметки и такие в подкаталоге, который имеет свой собственный репозиторий git.

Ответ 9

Я бы предложил посмотреть etckeeper, если вы еще этого не сделали. Он предназначен для версий файлов конфигурации в /etc с помощью системы управления версиями:

etckeeper - это набор инструментов для let/etc хранится в git, ртутный, даркский или bzr-хранилище. Он подключается к apt (и другой упаковке менеджеров, включая yum и pacman-g2) автоматически совершать сделанные изменения до /etc во время обновления пакета. Это отслеживает метаданные файлов, которые системы управления обычно отсутствуют но это важно для /etc, например, разрешения /И т.д./тень. Он довольно модульный и настраиваемый, а также простой использовать, если вы понимаете основы работая с контролем версий.

Хотя он предназначен для /etc, я думаю, что он, вероятно, также хорошо работает (возможно, с некоторой адаптацией) для домашних каталогов, поскольку основные потребности одинаковы.

Ответ 10

Я знаю, что это старый поток, но нашел его при поиске некоторых dotfiles.

Моя текущая система использует подрывную деятельность. Главное, что я сделал, это проверить рабочую копию в ~/.svnhome/(в ретроспективе она должна была бы назвать его .dotfiles или что-то более общее). Затем я создаю символические ссылки на файлы, которые я фактически использую на этом компьютере в домашних условиях. Например, мои папки .procmail и .spamassassin нужны только на почтовом сервере, поэтому я не привязываю их на своем домашнем сервере.

Единственный файл, который имеет некоторые отличия, - это файл .bashrc имеет некоторые дополнительные строки на моем mac для macports. Поэтому в нижней части .bashrc у меня есть проверка, существует ли .bashrc_local и анализирует это.

Это последняя оставшаяся вещь, которую я использую subversion (все остальное использует git, кроме работы). Преимущество svn заключается в том, что он не является dvcs, поэтому мне не нужно беспокоиться о случайном сбое на одном сервере и забыть его нажать.

Я решил переместить его на git, чтобы я мог создавать ветки. Используя приведенный выше пример, у меня была бы ветка для моего основного сервера, что я бы добавил папки .procmail и .spamassassin, но не имел те, которые находятся в главной ветке. Но нынешняя система работала отлично в течение многих лет - до того, как git даже существовала - и у нее нет какой-либо конкретной мотивации, чтобы ее изменить сейчас.