Як тримати "крапки файлів" під контролем версій?


30

Etckeeper - це чудовий інструмент для відстеження змін у ваших конфігураційних файлах /etc. Кілька ключових речей про це дійсно виділяються. Він може використовуватися з найрізноманітнішими системами ДКС: git, mercurial, darcs або bzr. Він також автоматично здійснює щоденні і щоразу встановлення, видалення або оновлення пакету. Він також відстежує дозволи файлів та метадані власності користувачів / груп.

Я також хотів би тримати "точкові файли" у своєму домашньому каталозі під контролем версій, бажано базару. Хтось знає, чи існує такий інструмент, як etckeeper для цієї мети?

У гіршому випадку, я вважаю , що простий хрон працює bzr add && bzr ciодин або два рази на день разом з додаванням ~/Documents, ~/Musicі т.д. до .bzrignore Anyone вже робив щось подібне за допомогою сценарію?

Хоча я віддаю перевагу базару, інші варіанти можуть бути цікавими.


4
Пов’язана дискусія на Unix Stack Exchange: Поради щодо надання ~ під контролем джерела . Він не відповідає на ваше запитання, але, тим не менш, може надати корисну інформацію.
Жил "ТАК - перестань бути злим"

1
Зараз для цього існує маса інструментів. Дивіться dotfiles.github.io у розділі "Утиліти dotfile загального призначення".
Робін Грін

@RobinGreen Якщо ви працювали над цим правильною відповіддю, я міг би прийняти це. bzrце, звичайно, не шлях в 2015 році.
небудь

Відповіді:


7

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

У мене є файл, який говорить про те, куди належать усі файли, і програма create_links просто розміщує їх там. Якщо ви знаєте, що ви робите, і можете скласти якийсь код Haskell, то це дійсно просто і легко. Хоча попередити, що це справді зроблено для мого особистого використання.


3
+1 для haskell! -1 за хаскель! Лол. ні, але насправді.
Дерек

Я чую тебе. Я вибрав Haskell тому, що я його вивчаю, це може бути, а може і не найкращим мовою, що підходить для роботи. :)
Роберт Массайолі

3

Ну, я пішов вперед і робив це вручну, поки не знайшов кращого рішення. Тож я міг би так само пояснити, що я зробив.

Спочатку я зробив це bzr init ~, але наступне, що я зробив bzr ignore "*". Я вирішив, що не хочу тримати всю справу під контролем версій. Це просто не варто, особливо якщо ви вважаєте, що є деякі речі, які ви дійсно не повинні тримати в ЦК, як ваші ключі. Тож мені довелося до bzr addконкретних файлів, які я хотів. Ви також можете додати винятки до .bzrignore. Регулярні вирази Python також корисні. Зараз я тримаю це досить тонко. Якщо все піде добре, я можу додати все ~/.configі ~/.gconfтеж.

Я також написав швидкий сценарій, який я веду як роботу з кроном. Він перевіряє, чи змінилися файли, і якщо це робить автоматичне виконання:

#! /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

Коли я вперше опублікував цю відповідь, я вибрав власну відповідь, але вирішив її скасувати. Це, безумовно, не найкраща відповідь на це запитання у 2015 році.
колись

2

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

Я вручну додаю до нього "цікаві" файли (я не хочу, наприклад, щоб моя музична колекція або кеш-пам'ять Firefox знаходилися під контролем версій), але якщо ви хочете автоматизувати це за допомогою сценарію, я вважаю це простим рішенням виконання bzr add && bzr ciу вибраних каталогах або на виході findкоманди просто виконає роботу.


2

Я зберігаю свої 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

git submodule init
git submodule update

і коли я хочу додати плагін vim, я це роблю

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

наприклад.

ОК, знадобиться трохи більше роботи, якщо у вас є більше декількох точок dir, якими ви хочете керувати, але ніщо не заважає вам помістити їх у один і той же самий dir або розділитись на дії (для всіх графічних редакторів, один для веб-діяльності ...) або так. у всякому разі, це я і зробив, так що лише два мої центи :).


1

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

Я написав власну утиліту, схожу на GNU Stow , оскільки Stow не зробив все, що хотів. Я називаю це Stow in Home . Після запуску шукає каталог з назвою "ДОМАШНЯ". Потім він забирає все, що знаходиться під цим каталогом, і посилає його на відповідне місце в $ HOME, створюючи необхідні каталоги. Він також перекладе імена файлів - якщо файл починається з '_', він буде замінений на '.'. Я зробив це, тому що приємніше редагувати мої крапкові файли, коли вони не приховані (див. Їх у списках каталогів за замовчуванням). Тоді це покладе їх на ім'я, на яке очікує їх застосування.

Отже, у мене є кілька сховищ git для моєї конфігурації. Я розміщую лише крапкові файли, які я особисто редагую в них. Перевагою цього є те, що я можу мати сховище для точкових файлів, якими я можу поділитися з іншими (наприклад, моя конфігурація Emacs) та один для інших, які є приватними (скажімо, моїм конфігурацією ssh, з іменами хостів та подібними для роботи). Синхлінізовані ставки з прихованим домом ставлять все в потрібне місце, але джерело управління для кожного може бути окремим.

Це добре спрацювало для мене. Дійсно, немає причин, щоб я не міг налаштувати щось на автоматичне виконання фіксацій. Або перемістіть усі крапкові файли у відповідні сховища та все ще використовуйте Stow в домашніх умовах. Але так я робив справи.


0

Не можете ви додати dot filesдо сховища, яке використовується у Etckeeper?


1
Як би я це зробив? символізує їх усіх десь там /etc?
andrewsomething

Ну .. це один варіант
txwikinger

0

Я зробив це, скопіювавши всі мої dotfiles, які мені подобається тримати під контролем джерела, у папку під назвою "dotfiles" у моєму / home / каталозі. Звичайно, це означає зберігання дублікатів та копіювання вперед та назад, коли це необхідно, але я вважаю, що це для мене найпростіше рішення.


1
замість того, щоб керувати дублікатами, ви не могли просто створити посилання на ваші dotfiles?
Райан

Я думаю, що ти точно можеш!
Дерек

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.