30
Слайд для настройки проектора

Felix — система синхронизации конфигов

Embed Size (px)

Citation preview

Page 1: Felix — система синхронизации конфигов

Слайддля настройки

проектора

Page 2: Felix — система синхронизации конфигов

Иван Бессарабов

разработчик

http://friendfeed.com/bessarabov

[email protected]

Page 3: Felix — система синхронизации конфигов

1. Я начал выступать в роли R 2. Я столкнулся с проблемой P 3. У меня возникли такие-то вопросы Q1 4. В ходе работы на часть вопросов Q2 из

Q1 я получил работающие ответы A 5. В ходе работы и получения ответов A

возникли новые вопросы Q3, которые я пока не могу решить

6. Помогите мне найти ответы на вопросы Q1-Q2 и Q3

Денис предложил следующие темы для докладов

Page 4: Felix — система синхронизации конфигов

1. Я начал выступать в роли R 2. Я столкнулся с проблемой P 3. У меня возникли такие-то вопросы Q1 4. В ходе работы на часть вопросов Q2 из

Q1 я получил работающие ответы A 5. В ходе работы и получения ответов A

возникли новые вопросы Q3, которые я пока не могу решить

6. Помогите мне найти ответы на вопросы Q1-Q2 и Q3

Я выбрал для рассказа эту тему

Page 5: Felix — система синхронизации конфигов

Р

У меня есть Problem

Page 6: Felix — система синхронизации конфигов

РS

Но кроме Problem у меня еще есть и Solution

Page 7: Felix — система синхронизации конфигов

Моя проблема заключается в том, что у меня много компьютеров на которых я работаю. Рабочий компьютер.

Page 8: Felix — система синхронизации конфигов

Домашний десктоп

Page 9: Felix — система синхронизации конфигов

Домашний ноутбук

Page 10: Felix — система синхронизации конфигов

И с десяток серверов

Page 11: Felix — система синхронизации конфигов

Я много времени работаю в консоли. И мне бы хотелось чтобы рабочее окружение в консолина всех машинах было как можно более одинаковое.

Page 12: Felix — система синхронизации конфигов

$ ..$ cd ..

$ ..-bash: ..: command not found

Например, я предпочитаю вводить “..” вместо “cd ..”, но если не указать дополнительные настройки,то это работать не будет.

Page 13: Felix — система синхронизации конфигов

$ ..$ cd ..

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

Page 14: Felix — система синхронизации конфигов

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

Page 15: Felix — система синхронизации конфигов

/home/bessarabov/

/Users/bessarabov/

На линуксе и на маке все файлы пользователя находятся в одной папке.

Page 16: Felix — система синхронизации конфигов

~ . |-- bin |-- Desktop |-- Documents | |-- screen_shots | `-- keynotes |-- Dropbox |-- git |-- .vim ← |-- some_file.txt ← |-- .bashrc ← |-- .gitconfig ← `-- .vimrc ←

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

Page 17: Felix — система синхронизации конфигов

~ . |-- bin ← |-- Desktop |-- Documents | |-- screen_shots | `-- keynotes |-- Dropbox |-- git |-- .vim |-- some_file.txt |-- .bashrc |-- .gitconfig `-- .vimrc

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

Page 18: Felix — система синхронизации конфигов

После того как задача был сформулирована появилась необходимость как-то назвать проект.Первое что пришло в голову это название felix. Такое название и оставил.

Page 19: Felix — система синхронизации конфигов

~ . |-- .git ← |-- bin |-- Desktop |-- Documents | |-- screen_shots | `-- keynotes |-- Dropbox |-- git |-- .vim |-- some_file.txt |-- .gitignore ← |-- .bashrc |-- .gitconfig `-- .vimrc

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

Page 20: Felix — система синхронизации конфигов

Получилась вот такая очень простоая система. Все машины получают конфигурационные файлы через один репозиторий.

Git

Page 21: Felix — система синхронизации конфигов

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

обновлять .gitignore

~ . |-- .git |-- git | |-- bem-bl | |-- Mock-Person | `-- rakudo |-- .vim |-- some_file.txt |-- .gitignore ← |-- .bashrc |-- .gitconfig `-- .vimrc

Page 22: Felix — система синхронизации конфигов

2) В домашней паке у меня есть рабочие копии в папке git. Несколько раз при создании нового репозитория ~/git/new_project я забывал сделать git init и комитил все в репозитарий felix, а не в new_project

~ . |-- .git |-- git ← | |-- bem-bl ← | |-- Mock-Person ← | |-- new_project ← | `-- rakudo ← |-- .vim |-- some_file.txt |-- .gitignore |-- .bashrc |-- .gitconfig `-- .vimrc

Page 23: Felix — система синхронизации конфигов

v2

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

Page 24: Felix — система синхронизации конфигов

~ . |-- felix | |-- .vim | |-- .bashrc | `-- .gitconfig |-- .vim |-- .bashrc `-- .gitconfig

Решение очень простое - создать рабочую копию не в домашней папке, а в ~/felix.

Page 25: Felix — система синхронизации конфигов

А в домашней папке должны лежать ссылки на файлы в ~/felix. Это решает обе проблемы:

1) В рабочей копии нет лишних файлов, поэтому не нужно мучатся с .gitignore2) так как нет репозиториев на более глубоком уровне фаловой системы, то нет и проблем с комитами

~ . |-- felix | |-- .vim | |-- .bashrc | `-- .gitconfig |-- .vim |-- .bashrc `-- .gitconfig

Page 26: Felix — система синхронизации конфигов

На самом деле структура файлов немного другая. Еще есть скрипт, который синхронизирует файлы + все

файлы, которые нужно синхронизировать находятся в подпапке tilde

~ . |-- felix | |-- create_symlinks.pl | `-- tilde | |-- .vim | |-- .bashrc | `-- .gitconfig |-- .vim |-- .bashrc `-- .gitconfig

Page 27: Felix — система синхронизации конфигов

https://github.com/bessarabov/felix

Cкрипт для синхронизации файлов сегодня появится на github

Page 28: Felix — система синхронизации конфигов

И еще два слова о том как я построил работу. Изначально я пытался работать в git с ветками – т.е. настройки для каждого типа компьютеров жили в одной ветки, но оказалось, что это сложно и не удобно поддерживать.

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

Page 29: Felix — система синхронизации конфигов

Profit1. На всех машинах

одинаковые настройки2. Бекап настроек

В итоге мне удалось решить ту задачу, которая у меня возникла. “На сдачу” появился дополнительный профит в виде бекапа (git сервер же бекапится, да?). Первый подход к задаче у меня был немного менее года назад, а

версия 2 у меня работает около 5 месяцев.

Page 30: Felix — система синхронизации конфигов

Спасибо!

http://friendfeed.com/bessarabov

[email protected]