Как сохранить & ldquo; точечные файлы & rdquo; под контролем версий?

Etckeeper - отличный инструмент для отслеживания изменений в ваших файлах конфигурации в /etc. Несколько ключевых вещей об этом действительно выделяются. Он может использоваться с различными VCS: git, mercurial, darcs или bzr. Он также выполняет автоматическую фиксацию ежедневно и всякий раз, когда вы устанавливаете, удаляете или обновляете пакет. Он также отслеживает права доступа к файлам и метаданные о владельцах и группах пользователей.

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

В худшем случае, я представляю, что простая задача cron выполняется bzr add && bzr ci один или два раза в день с добавлением ~/Documents, ~/Music и т. Д. К .bzrignore. ?

Хотя я бы предпочел базар, другие варианты могут быть интересны.

30
задан 13 December 2017 в 20:27

8 ответов

Я храню свои файлы zsh и vim в git, помещаю их на github, в разные репозитории:

для zsh, например, я создал «.zsh» и поместил в него zshrc и zshenv плюс скрипт связать zshrc с ~ / .zshrc и zshenv с ~ / .zshenv, что-то вроде этого.

while true
do
read -p "do you want to link zshenv to ~/.zshenv (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshenv ~/.zshenv; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

while true
do
read -p "do you want to link zshrc to ~/.zshrc (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshrc ~/.zshrc; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

, поэтому я делаю

git clone git://git@github.com:tshirtman/.zsh
cd .zsh
./init.sh

для .vim, это почти то же самое, за исключением того, что я использую субмодули для плагинов с патогеном, поэтому я добавил это в init.sh

[ 112]

и когда я хочу добавить плагин vim, я делаю

git submodule add git://github.com/nathanaelkane/vim-indent-guides.git bundle/vim-indent-guides

, например.

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

0
ответ дан 13 December 2017 в 20:27

Я сделал это, скопировав все мои точечные файлы, которые я хотел бы держать под контролем исходного кода, в папку с именем «точечные файлы» в моем / home / каталоге. Конечно, это означает сохранение дубликатов и копирование туда-сюда при необходимости, но я считаю, что это самое простое решение для меня.

0
ответ дан 13 December 2017 в 20:27

Я использую решение, которое не является автоматическим, как etckeeper (я должен сделать коммит вручную), но оно хорошо сработало для меня. Это не так развито, как мне нравится, но работает.

Я написал свою собственную утилиту, аналогичную GNU Stow , так как stow не делал всего, что я хотел. Я называю это Стоу в доме . Когда запускается, он ищет каталог с именем "HOME". Затем он берет все в этом каталоге и символически связывает его с соответствующим местоположением в $ HOME, создавая каталоги по мере необходимости. Он также будет переводить имена файлов - если файл начинается с «_», он будет заменен на «.». Я сделал это, потому что лучше редактировать мои точечные файлы, когда они не скрыты (по умолчанию их можно увидеть в списках каталогов). Затем он поместил бы их в имя, ожидаемое их приложением.

Итак, у меня есть несколько git-репозиториев для моей конфигурации. Я помещаю только точечные файлы, которые я лично редактирую в них. Преимущество этого в том, что у меня может быть репозиторий для файлов точек, который я могу поделиться с другими (например, моей конфигурацией Emacs) и один для других, которые являются частными (скажем, моя конфигурация ssh, с именами хостов и тому подобное для работы). Символьная ссылка ставит с stow-in-home, все расставляет на свои места, но контроль источника для каждого из них может быть отдельным.

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

0
ответ дан 13 December 2017 в 20:27

Я храню свои файлы в подкаталоге и делаю символические ссылки. У меня есть скрипт, который автоматизирует это. Вы можете проверить все это на http://code.google.com/p/samking-config-files/source/browse/

0
ответ дан 13 December 2017 в 20:27

Я не знал, есть ли что-нибудь, что могло бы сделать это, поэтому я собрал некоторый код для достижения именно того, что вы хотите, используя мой репозиторий здесь: http://github.com/robertmassaioli/config-files

У меня есть файл, который говорит, где все файлы принадлежат, и программа generate_links просто помещает их все туда. Если вы знаете, что делаете, и можете скомпилировать некоторый код на Haskell, то это действительно просто и легко. Хотя имейте в виду, что это действительно было сделано для моего личного использования.

0
ответ дан 13 December 2017 в 20:27

Не могли бы вы добавить dot files в хранилище, используемое в Etckeeper?

0
ответ дан 13 December 2017 в 20:27

Я превратил весь свой каталог ~ в хранилище Bazaar. Хранение метаданных не является проблемой для файлов в домашнем каталоге: все принадлежит одной учетной записи и группе, и bzr уже хранит бит выполнения.

Я вручную добавляю «интересные» файлы к нему (я не хочу, например, чтобы моя музыкальная коллекция или кэш Firefox находились под контролем версий), но если вы хотите автоматизировать это с помощью скрипта, я думаю, что это простое решение сделать bzr add && bzr ci на выбранных каталогах или на выходе команды find просто сделает эту работу.

0
ответ дан 13 December 2017 в 20:27

Ну, я продолжал и делал это вручную, пока не нашел лучшего решения. Так что я мог бы также объяснить, что я сделал.

Сначала я сделал bzr init ~, но следующее, что я сделал, было bzr ignore "*". Я решил, что не хочу держать все это под контролем версий. Это просто не стоило того, особенно если учесть, что есть некоторые вещи, которые вы действительно не должны хранить в vcs, как ключи Поэтому мне пришлось bzr add указать конкретные файлы, которые я хотел. Вы также можете добавить исключения в .bzrignore. Здесь также полезны регулярные выражения Python. Я держу это довольно тонким пока. Если все пойдет хорошо, я мог бы добавить все ~/.config и ~/.gconf тоже.

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

#! /bin/bash

set -e

TIME=$(date)
STATUS=$(bzr status)

if [ -n "$STATUS" ]; then
    if [ -n "$1" ]; then
         bzr ci ~ -m "$1"
    else
        bzr ci ~ -m "Automatic commit on $TIME"
    fi
fi

exit
0
ответ дан 13 December 2017 в 20:27

Другие вопросы по тегам:

Похожие вопросы: