felix — система синхронизации конфигов
TRANSCRIPT
![Page 1: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/1.jpg)
Слайддля настройки
проектора
![Page 2: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/2.jpg)
Иван Бессарабов
разработчик
http://friendfeed.com/bessarabov
![Page 3: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/3.jpg)
1. Я начал выступать в роли R 2. Я столкнулся с проблемой P 3. У меня возникли такие-то вопросы Q1 4. В ходе работы на часть вопросов Q2 из
Q1 я получил работающие ответы A 5. В ходе работы и получения ответов A
возникли новые вопросы Q3, которые я пока не могу решить
6. Помогите мне найти ответы на вопросы Q1-Q2 и Q3
Денис предложил следующие темы для докладов
![Page 4: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/4.jpg)
1. Я начал выступать в роли R 2. Я столкнулся с проблемой P 3. У меня возникли такие-то вопросы Q1 4. В ходе работы на часть вопросов Q2 из
Q1 я получил работающие ответы A 5. В ходе работы и получения ответов A
возникли новые вопросы Q3, которые я пока не могу решить
6. Помогите мне найти ответы на вопросы Q1-Q2 и Q3
Я выбрал для рассказа эту тему
![Page 5: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/5.jpg)
Р
У меня есть Problem
![Page 6: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/6.jpg)
РS
Но кроме Problem у меня еще есть и Solution
![Page 7: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/7.jpg)
Моя проблема заключается в том, что у меня много компьютеров на которых я работаю. Рабочий компьютер.
![Page 8: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/8.jpg)
Домашний десктоп
![Page 9: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/9.jpg)
Домашний ноутбук
![Page 10: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/10.jpg)
И с десяток серверов
![Page 11: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/11.jpg)
Я много времени работаю в консоли. И мне бы хотелось чтобы рабочее окружение в консолина всех машинах было как можно более одинаковое.
![Page 12: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/12.jpg)
$ ..$ cd ..
$ ..-bash: ..: command not found
Например, я предпочитаю вводить “..” вместо “cd ..”, но если не указать дополнительные настройки,то это работать не будет.
![Page 13: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/13.jpg)
$ ..$ cd ..
А таких штук у меня вагон и маленькая тележка. Вот такая тележка. И я хочу чтобы если у меня появиласьКакая-то новая команда, то она сразу же работала на всех машинах.
![Page 14: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/14.jpg)
Задача – синхронизировать настройки между всеми машинами на которых я работаю. Я работаю только налинуксе и маке, поэтому windows не при делах (кроме того там другой принцип хранения настроек).
![Page 15: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/15.jpg)
/home/bessarabov/
/Users/bessarabov/
На линуксе и на маке все файлы пользователя находятся в одной папке.
![Page 16: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/16.jpg)
~ . |-- bin |-- Desktop |-- Documents | |-- screen_shots | `-- keynotes |-- Dropbox |-- git |-- .vim ← |-- some_file.txt ← |-- .bashrc ← |-- .gitconfig ← `-- .vimrc ←
Для этой папки есть удобное сокращение – символ тильда. Все настройки хранятсяв текстовых файлах. Т.е. задача заключается в том чтобы синхронизировать некоторые файлы.
![Page 17: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/17.jpg)
~ . |-- bin ← |-- Desktop |-- Documents | |-- screen_shots | `-- keynotes |-- Dropbox |-- git |-- .vim |-- some_file.txt |-- .bashrc |-- .gitconfig `-- .vimrc
В процессе решения задачи я еще пришел к том что удобно синхронизировать не толькоконфигурационные файлы, но и некоторые другие файлы,
![Page 18: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/18.jpg)
После того как задача был сформулирована появилась необходимость как-то назвать проект.Первое что пришло в голову это название felix. Такое название и оставил.
![Page 19: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/19.jpg)
~ . |-- .git ← |-- bin |-- Desktop |-- Documents | |-- screen_shots | `-- keynotes |-- Dropbox |-- git |-- .vim |-- some_file.txt |-- .gitignore ← |-- .bashrc |-- .gitconfig `-- .vimrc
Первый подход к решению. Просто в домашней папке создать рабочую копию системы контроля версий.Все файлы и папки, которые нужно синхронизировать – комитить, остальные игнорировать.
![Page 20: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/20.jpg)
Получилась вот такая очень простоая система. Все машины получают конфигурационные файлы через один репозиторий.
Git
![Page 21: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/21.jpg)
Через некоторое вермя работы обнаружились некоторые неудобства, когда домашняя папкаявляется рабочией копией. 1) достаточно часто появлялись новые файлы, поэтому часто приходилось
обновлять .gitignore
~ . |-- .git |-- git | |-- bem-bl | |-- Mock-Person | `-- rakudo |-- .vim |-- some_file.txt |-- .gitignore ← |-- .bashrc |-- .gitconfig `-- .vimrc
![Page 22: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/22.jpg)
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 — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/23.jpg)
v2
В конце концов эти недостатки меня окончательно достали, а тут как раз Слава Матюхин рассказал как можно решить эту проблему.
![Page 24: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/24.jpg)
~ . |-- felix | |-- .vim | |-- .bashrc | `-- .gitconfig |-- .vim |-- .bashrc `-- .gitconfig
Решение очень простое - создать рабочую копию не в домашней папке, а в ~/felix.
![Page 25: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/25.jpg)
А в домашней папке должны лежать ссылки на файлы в ~/felix. Это решает обе проблемы:
1) В рабочей копии нет лишних файлов, поэтому не нужно мучатся с .gitignore2) так как нет репозиториев на более глубоком уровне фаловой системы, то нет и проблем с комитами
~ . |-- felix | |-- .vim | |-- .bashrc | `-- .gitconfig |-- .vim |-- .bashrc `-- .gitconfig
![Page 26: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/26.jpg)
На самом деле структура файлов немного другая. Еще есть скрипт, который синхронизирует файлы + все
файлы, которые нужно синхронизировать находятся в подпапке tilde
~ . |-- felix | |-- create_symlinks.pl | `-- tilde | |-- .vim | |-- .bashrc | `-- .gitconfig |-- .vim |-- .bashrc `-- .gitconfig
![Page 27: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/27.jpg)
https://github.com/bessarabov/felix
Cкрипт для синхронизации файлов сегодня появится на github
![Page 28: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/28.jpg)
И еще два слова о том как я построил работу. Изначально я пытался работать в git с ветками – т.е. настройки для каждого типа компьютеров жили в одной ветки, но оказалось, что это сложно и не удобно поддерживать.
Поэтому сейчас я уже почти полностью перешел на работу в одной ветке, а различия между машинами релазизую if-ами.
![Page 29: Felix — система синхронизации конфигов](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55a175941a28abb3468b45c1/html5/thumbnails/29.jpg)
Profit1. На всех машинах
одинаковые настройки2. Бекап настроек
В итоге мне удалось решить ту задачу, которая у меня возникла. “На сдачу” появился дополнительный профит в виде бекапа (git сервер же бекапится, да?). Первый подход к задаче у меня был немного менее года назад, а
версия 2 у меня работает около 5 месяцев.