From Novosibirsk, Russia? Our tiny company is looking for current or future rock-star developers.

December 16, 2007

Поломки и резервные копии

В детстве я обещал себе, что если (например) буду долго копить на машину, куплю её и разобью в первый же день, то ничуть не расстроюсь. И вообще, что не буду расстраиваться о вещах. У меня всегда были сомнения, смогу ли я действительно относиться столь спокойно; теперь появляется возможность проверить это на практике.

Например, под ёлочку в этом году я положу себе MacBook Pro 15", потому что сегодня разбил экран своего старенького MacBook'а 13". Благо, я могу себе такое позволить. Отрицательных эмоций нет. Сегодня хорошо посидели в «Жили-Были» с Юрой Бабуровым — завоевание мира всё еще запланировано, — потом выпил коньячку и хорошо поспал, проснулся совершенно счастливым. Обретенная радуга во весь экран ничуть не ухудшила настроение (естественно, работе она не мешает, ибо я работаю с подключенным внешним монитором).

Сломанный ноут мы уже нарекли новой моделью Mac mini flat. А если оторвать экран вообще, получится конструктивный аналог ZX Spectrum — клавиатура, в которую спрятан компьютер. Но, конечно, сначала я попытаюсь его сдать в сервис. Давно хотел домой второй мак.

В прошлом месяце я отбил кусок от стекла на экране своего сотового (матрица не пострадала). А еще от другого падения он перестал звонить. И корпус давно треснувший. Но до сдачи в ремонт руки так и не дошли. Опять же, на такие мелочи я внимания не обращал.

Сейчас вспомнил, что вчера за'push'ал все изменения по работе на свой хостинг (приватно использую git, хотя основной репозиторий в CVS). «Вот теперь никакие катаклизмы ей не повредят», — сказал я. Очень вовремя, сегодня запросто мог накрыться жесткий диск. (А всего-то: шел с закрытым ноутом и выронил его из рук на пол.) В прошлом месяце подписался на .Mac, получил право пользоваться Apple Backup, сделал резервную копию всех фотографий на DVD. Опять же, не зря.

Мораль: резервное копирование — ваш друг. Навсегда.

December 15, 2007

Девять причин перейти на Git

Обновление: см. также пост «Всё, что нужно знать про Git».

Когда-то я рекомендовал CVS, если вы пользуетесь системой контроля версий в основном для резервного копирования, и что-нибудь вроде Mercurial, если видите в этом искусство.

Теперь всё изменилось. Я однозначно рекомендую одну систему контроля версий для любых потребностей: Git.

Причины:

0. Я бы даже не стал упоминать это, но ведь кто-нибудь спросит. Git — распределенная система контроля версий (разумеется). Дальнейшее описывает, почему он лучше Mercurial, Bazaar, darcs и др.

1. Репозиторий остаётся в ваших руках. В CVS, например, файлы имели вразумительный формат, и к ним по большой потребности можно было применить /dev/hands или /usr/bin/perl (что мно-о-ого раз спасало автора этих строк).

Ваши возможности в Git на порядок больше, поскольку весь его высокоуровневый интерфейс — это всего лишь набор скриптов, использующих утилиты низкого уровня в лучших традициях Unix. Теми же утилитами удобно править базу данных и вам. (В крайнем случае можно и руками — вся база хранится в зазипованых текстовых файлах простого формата, имя которых является SHA1-хешем содержимого.)

2. За git-commit --interactive можно продать душу. Этот минималистский консольный интерфейс для выбора входящих в коммит изменений лучше всех виденных мною GUI.

3. Двусторонняя синхронизация с CVS и Subversion. Если работодатель или автор любимого плагина имеет консервативные взгляды, вас это не остановит. (Правда, commit'ы в CVS экспортируются наполовину вручную.)

4. Man, it's sane. Логичный и предсказуемый. Скажем, мне нравится концепция index'а (и записи в него по git-add) и отслеживания перемещений по содержимому (команды вроде svn mv всегда доставляли одни проблемы). Естественно, это субъективная оценка.

5. Теперь есть адекватная версия для Windows. Разумеется, это не преимущество перед другими, но до появления MinGW-порта круг применений был ограничен. (Не попадайтесь на провокации и не качайте версию, которая пытается скомпилировать Git при инсталляции! Это всё проделки Ктулху. Инсталлятор нормальных бинарников работает отлично.)

6. Git умеет строить из себя CVS-сервер, так что ваша любимая IDE будет с ним общаться, как с родным. (С другой стороны, под OS X мне удобнее пользоваться командной строкой, чем поддержкой в IDE.)

7. Git имеет красивый веб-интерфейс out of the box. Я привык выбирать продукты, хорошо работающие из коробки, и это для меня хороший знак. (Ср. с убогой умолчательной темой у Mercurial.)

8. Формат репозитория дружелюбен к rsync, обычному HTTP и backup'ам. Коммиты только добавляют новые файлы, не изменяя существующих. (Не считая файлов-ссылок вроде HEAD и refs/heads/master, но их мало и они очень маленькие.) Файлы репозитория можно раздавать через HTTP любым веб-сервером. Эффективно работает rsync. (Однако: после push'а изменений через тупой протокол на сервере нужно выполнить специальную команду Git, обновляющую некоторые файлы.)

9. Как следует из пункта 1, с использованием низкоуровневых утилит можно писать свои скрипты, делающие что-то интересное и новое. Многие этим воспользовались, так что у Git есть расширения (например, для patch queues, если вам сиё актуально) и альтернативные интерфейсы.

Одним словом, что бы вы ни думали про ядро Linux, за создание Git Линуса Торвальдса точно можно уважать.

Недостаток один — в процессе работы (иногда) требуется вовлечение мозга. Впрочем, всё реже и реже — например, магическое заклинание «git-reset --hard HEAD^» / «git-commit -c ORIG_HEAD» теперь стало частью «git-commit --amend». В любом случае, перед применением Git вам придется разобраться в его внутренностях (вся информация есть в tutorial'е и в man'ах).

Смотрим и наслаждаемся: Linus Torvalds on git (Google Tech Talk).