2. Иван Бессарабов
разработчик
http://friendfeed.com/bessarabov
ivan@bessarabov.ru
3. 1. Я начал выступать в роли R
2. Я столкнулся с проблемой P
3. У меня возникли такие-то вопросы Q1
4. В ходе работы на часть вопросов Q2 из
Q1 я получил работающие ответы A
5. В ходе работы и получения ответов A
возникли новые вопросы Q3, которые я
пока не могу решить
6. Помогите мне найти ответы на вопросы
Q1-Q2 и Q3
Денис предложил следующие темы для докладов
4. 1. Я начал выступать в роли R
2. Я столкнулся с проблемой P
3. У меня возникли такие-то вопросы Q1
4. В ходе работы на часть вопросов Q2 из
Q1 я получил работающие ответы A
5. В ходе работы и получения ответов A
возникли новые вопросы Q3, которые я
пока не могу решить
6. Помогите мне найти ответы на вопросы
Q1-Q2 и Q3
Я выбрал для рассказа эту тему
11. Я много времени работаю в консоли. И мне бы хотелось чтобы рабочее окружение в консоли
на всех машинах было как можно более одинаковое.
12. $ ..
$ cd ..
$ ..
-bash: ..: command not found
Например, я предпочитаю вводить “..” вместо “cd ..”, но если не указать дополнительные настройки,
то это работать не будет.
13. $ ..
$ cd ..
А таких штук у меня вагон и маленькая тележка. Вот такая тележка. И я хочу чтобы если у меня появилась
Какая-то новая команда, то она сразу же работала на всех машинах.
14. Задача – синхронизировать настройки между всеми машинами на которых я работаю. Я работаю только на
линуксе и маке, поэтому windows не при делах (кроме того там другой принцип хранения настроек).
15. /home/bessarabov/
/Users/bessarabov/
На линуксе и на маке все файлы пользователя находятся в одной папке.
16. ~.
|-- bin
|-- Desktop
|-- Documents
| |-- screen_shots
| `-- keynotes
|-- Dropbox
|-- git
|-- .vim ←
|-- some_file.txt ←
|-- .bashrc ←
|-- .gitconfig ←
`-- .vimrc ←
Для этой папки есть удобное сокращение – символ тильда. Все настройки хранятся
в текстовых файлах. Т.е. задача заключается в том чтобы синхронизировать некоторые файлы.
17. ~.
|-- bin ←
|-- Desktop
|-- Documents
| |-- screen_shots
| `-- keynotes
|-- Dropbox
|-- git
|-- .vim
|-- some_file.txt
|-- .bashrc
|-- .gitconfig
`-- .vimrc
В процессе решения задачи я еще пришел к том что удобно синхронизировать не только
конфигурационные файлы, но и некоторые другие файлы,
18. После того как задача был сформулирована появилась необходимость как-то назвать проект.
Первое что пришло в голову это название felix. Такое название и оставил.
19. ~.
|-- .git ←
|-- bin
|-- Desktop
|-- Documents
| |-- screen_shots
| `-- keynotes
|-- Dropbox
|-- git
|-- .vim
|-- some_file.txt
|-- .gitignore ←
|-- .bashrc
|-- .gitconfig
`-- .vimrc
Первый подход к решению. Просто в домашней папке создать рабочую копию системы контроля версий.
Все файлы и папки, которые нужно синхронизировать – комитить, остальные игнорировать.
20. Git
Получилась вот такая очень простоая система. Все машины получают конфигурационные файлы через один
репозиторий.
21. ~.
|-- .git
|-- git
| |-- bem-bl
| |-- Mock-Person
| `-- rakudo
|-- .vim
|-- some_file.txt
|-- .gitignore ←
|-- .bashrc
|-- .gitconfig
`-- .vimrc
Через некоторое вермя работы обнаружились некоторые неудобства, когда домашняя папка
является рабочией копией. 1) достаточно часто появлялись новые файлы, поэтому часто приходилось
обновлять .gitignore
22. ~.
|-- .git
|-- git ←
| |-- bem-bl ←
| |-- Mock-Person ←
| |-- new_project ←
| `-- rakudo ←
|-- .vim
|-- some_file.txt
|-- .gitignore
|-- .bashrc
|-- .gitconfig
`-- .vimrc
2) В домашней паке у меня есть рабочие копии в папке git. Несколько раз при создании нового репозитория
~/git/new_project я забывал сделать git init и комитил все в репозитарий felix, а не в new_project
23. v2
В конце концов эти недостатки меня окончательно достали, а тут как раз Слава Матюхин рассказал как можно
решить эту проблему.
24. ~.
|-- felix
| |-- .vim
| |-- .bashrc
| `-- .gitconfig
|-- .vim
|-- .bashrc
`-- .gitconfig
Решение очень простое - создать рабочую копию не в домашней папке, а в ~/felix.
25. ~.
|-- felix
| |-- .vim
| |-- .bashrc
| `-- .gitconfig
|-- .vim
|-- .bashrc
`-- .gitconfig
А в домашней папке должны лежать ссылки на файлы в ~/felix. Это решает обе проблемы:
1) В рабочей копии нет лишних файлов, поэтому не нужно мучатся с .gitignore
2) так как нет репозиториев на более глубоком уровне фаловой системы, то нет и проблем с комитами
26. ~.
|-- felix
| |-- create_symlinks.pl
| `-- tilde
| |-- .vim
| |-- .bashrc
| `-- .gitconfig
|-- .vim
|-- .bashrc
`-- .gitconfig
На самом деле структура файлов немного другая. Еще есть скрипт, который синхронизирует файлы + все
файлы, которые нужно синхронизировать находятся в подпапке tilde
28. И еще два слова о том как я построил работу. Изначально я пытался работать в git с ветками – т.е. настройки
для каждого типа компьютеров жили в одной ветки, но оказалось, что это сложно и не удобно поддерживать.
Поэтому сейчас я уже почти полностью перешел на работу в одной ветке, а различия между машинами
релазизую if-ами.
29. Profit
1. На всех машинах
одинаковые настройки
2. Бекап настроек
В итоге мне удалось решить ту задачу, которая у меня возникла. “На сдачу” появился дополнительный профит в
виде бекапа (git сервер же бекапится, да?). Первый подход к задаче у меня был немного менее года назад, а
версия 2 у меня работает около 5 месяцев.