• Git конфиги Синхронизация_$HOME_конфигов Надоело синхронизировать между своими машинами конфиги между $HOME. Куча мороки:
    — Заводишь учётку на новой машине, стянешь туда .bashrc, а .vimrc забудешь
    — Обновил конфиг на одной машине, а на другие оно почему-то само не попадает
    — Банальное копирование может не сработать, если отличаются версии целевого софта. Я уже попадал, когда раскидал .vimrc с использованием слишком новых возможностей.
    — Всякие нюансы связанные с тем, что на разных машинах хочется иметь конфиги слегка отличающиеся (местная специфика работы)

    Попробую подойти к проблеме системно: все конфиги в git (заодно будет история с комментариями о том, что когда и зачем было добавлено!). При этом все конфиги разделю на файлы .конфиг и .конфиг_местный, последнии будет вызываться из .конфиг и будет содержать конфигурацию, специфичную для данной конкретной системы.

    Понемногу мигрирую. В основном ок, но ~/.ssh/config никак include не поддерживает. :(

Replies (16)

  • @qnikst, Фотографии на сайте этой штуки сильно внезапны. Я поначалу подумал, что спамеры и до жуйка добрались. Но потом глаза всё-таки зацепились за текст и дали сигнал, что он релевантен.
  • @Self-Perfection, да, наверное сопроводительный комментарий от меня бы не помешал. Утилита интересная, но я так и не осилил её полноценно.
  • @qnikst, Посмотрел повнимательнее — это какой-то overkill. Я не хочу учить хаскель и утилиту, про которую слышало полтора человека, ради решения некритичной для себя задачи.

    И с гитом оно как-то портабельнее. Конфиги из гита можно просто вытянуть на систему где даже не то что хаскеля, но и гита нет: git archive и вперёд.
  • @Self-Perfection, так этож фронтэнд к синхронизации через гит :) а хацкель можно скомпилять статически. Но с тем, что оверкил — согласен.
  • @Self-Perfection, мне кажется тебе нужен puppet :)
  • @Self-Perfection, Гит с бранчами на каждую машину с другими версиями, другими требованиями и т.д.
  • @kapsh, То ли я не умею использовать Git, то ли от такого подхода будет больше мороки, чем упрощения. Я задолбаюсь туда-сюда всё черрипикать между бранчами.

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

    Проблемы с версиями решаются заворачиванием в блоки, учитывающие $BASH_VERSION.
  • @Self-Perfection, Еще можно хранить специфику в патчах. Для автоматизации можно попробовать что-то из: git.wiki.kernel.org
    Сам, правда, только hg mq пробовал
  • @Self-Perfection, так-то можно любую утилиту запускать на той машине, где она установлена и есть доступ к остальным, монтируя нужные места по sshfs (fuse), например.
  • @anton0xf, полюбому его паппет спасёт.
  • @anton0xf, Вот про специфику в патчах по-подробнее пожалуйста. Как вы это себе представляете?
  • @Self-Perfection, ну как. (конкретные действия различаются в зависимости от используемых средств. я опишу то, что можно непосредственно сделать с помощью git и patch, т.е. самый многословный вариант)
    есть базовое состояние файла из головы репозитория H1.
    дописываем в него нужные специфические строки, сохраняем изменения в виде патча P1 в отдельном репозитории для патчей, а в основном репозитории изменения откатываем.
    теперь нужная специфическая версия — это H1+P1.
    далее, например, затягиваем изменения в базовый файл и получаем H2. пробуем накатить наш патч на P1 на H2. если не получается непосредственно, то мерджим (в простейшем случае patch --merge) и снова полчаем патч P1' (т.е. измененную версию P1, изменения которой можно снова сохранить в репозитории для патчей).
    теперь нужная специфическая версия — это H2+P1'.
    потом, например, мы хотим что-то добавить к специфической версии: накатываем на H2 наш патч P1' и вносим нужные изменения, строим новый патч P1'' и сохраняем его новую версию в репозитории с патчами.
    либо можно создать уже патч P2 и получить новую специфическую версию как H2+P1'+P2.

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

    мда. выглядит страшно) но на самом деле, если выбрать подходящую тулзу для управления сериями патчей, то любая модификация будет делаться в пару-тройку коротких команд.
  • @nikandroff, Ну не знаю, конфиги это такая интимная штука, не хочется их показывать всем подряд.

    И бездумно копировать чужие простыни тоже не хочется.
  • @Self-Perfection, там по ссылке если порыть поглубже много интересных тулзов для управления конфигами в гите, с выдиранием секретов и прочее. хотя у меня они в частном гит-репозитории все равно. а по поводу чужого — я в основном какие-то элементы и идеи упаду, а не конфиг целиком