Ruslan Brest, rb.labtodo.com
Backend web-developer: CodeIgniter, PHP, MySQL, OpenCart, PrestaShop, MaxSite CMS

Распробовал Git

Просмотров: 11353 RSS Обсудить
Linux » Web development » Git, SVN

Распробовал Git: он действительно оказался во многом гораздо удобнее, чем SVN. В первый день мне не очень понравилась большая, чем в Subversion, атомарность действий и необходимость каждый раз добавлять изменённые файлы в коммит. Я понимал, что это сулит и чем может быть полезно, но сперва показалось неудобным: ты машина — ты и следи/добавляй, раз всё известно, зачем мне лишняя рутина? Позже у коммита обнаружился ключ -a вдобавок к "git add .", так что по этому поводу ворчать стало некуда. Ну а потом всё-таки понравился этот мелочный контроль (можно некоторые файлы держать у себя изменёнными для экспериментов и не пускать их в репозиторий).

Что нравится и заметно в первую очередь в Git после SVN, так это:

  1. деление на оффлайн и онлайн работу: здесь можно комфортно коммитить сколько угодно локально, затем слить всё пачкой из дома или из офиса. Мне как любителю работать с ноутбуком и нелюбителю зря переплачивать за мобильный трафик это очень удобно (хотя основная причина скорее быстрая разрядка батарей телефона при постоянном или частом использовании GPRS/EDGE/3G). См. также пункт 5 этого списка;
  2. служебных папок нет по всему дереву каталогов (как в SVN), есть только одна в корне проекта (репозитория). При работе с SVN приходилось перед массовой заливкой на сервер не забывать очищать дерево каталогов от этих .svn -- и места занимают прилично, да и не дело их на сервере держать. А если и держать, то надо не забывать блокировать через .htaccess. См. также пункт 5;
    • в SVN локальная рабочая копия очень жёстко привязана к абсолютному пути на диске, поэтому любая попытка скопировать или перенести папки внутри копии обычными средствами, а не командами SVN, гарантируют массу приключений и неприятных открытий;
  3. branch и merge устроены гораздо проще и логичней -- пользоваться ими хочется сразу же. В SVN они вроде бы тоже есть, но столько лишнего надо в голове держать, что писать километровые пути просто сил никаких нет. В итоге при работе в командах до десятка человек мы работали только с транком и пользовались буквально 3 командами: checkout первый раз и update/commit в процессе. Хватало. Но git branch -- это очень даже. Концепция и сценарии работы очень понравились, они гораздо удобней и при самостоятельной работе, и для 2 человек. Не говоря уже про более обширные команды;
  4. простота и удобство создания репозиториев: буквально зашёл в папку с проектом, git init && git add . && git commit -m 'initial commit' -- и вот у нас уже новый репозиторий. Не связанный пока никак с онлайн, но зато уже сразу можно работать с кодом, удобно следить за изменениями и пользоваться ветками. Процесс заведения репозиториев в SVN у меня был гораздо дольше, ну и онлайн в случае SVN обязателен, что для меня далеко не всегда плюс: иногда это здорово мешает. Так что я очень доволен этой разницей.
  5. служебные файлы SVN занимают столько же места, сколько и отслеживаемые, удваивая таким образом объём папки проекта (было 100 мегабайт - стало 200). Что с ветками - не знаю, не пользовался ими под SVN. Репозиторий Git'а раза в 2 с хвостиком МЕНЬШЕ отслеживаемого проекта. Из очень приятного: этот репозиторий (папку .git в корне проекта) очень легко сбекапить или перенести на другой компьютер, где его можно восстановить даже в глухой деревне без онлайна (git checkout master -- и из пустоты рядом с .git мгновенно возникает весь проект). См. также пункты 1 и 2.

Есть и существенный недостаток. При использовании Git каждый человек держит у себя всю копию репозитория. У нас при работе в Proxistep была актуальна проблема больших графических файлов. С ними в команде работал обычно один, от силы два человека: художник-дизайнер и верстальщик. И верстальщику в итоге нужна, условно говоря, всего одна картинка после всех согласований с клиентом. А дизайнеру совершенно не нужен код. А остальным разработчикам (3-4 человека) -- дизайн. Наблюдать и выкачивать все эти изменения и версии дизайна было неудобно и тяжело. Это тормозило и было большинству команды совершенно неинтересно, отнимало время, а в некоторых проектах - весьма заметное место на диске. К тому же обычным состоянием разработчика являлось участие в нескольких текущих проектах и часть недавних проектов тоже лежала в состоянии быстрой готовности.

Сейчас, конечно, полегче - скорости доступа к интернет заметно выросли и объёмы HDD растут год от года. Но иногда это может стать проблемой.

SVN в принципе способен частично решить эту проблему: в нём, в отличие от Git, можно делать checkout-ы и commit-ы отдельных папок репозитория, поэтому на первый взгляд достаточно всего лишь разумно разделить по каталогам работу. Проблема лишь в том, что некоторым ролям нужны разные наборы каталогов, и если кто-то оказался "на стыке", сделать одним коммитом изменения в 2 разных каталогах уже не получится: придётся видеть в общем репозитории 2 коммита вместо одного. Проблема на самом деле мелкая и скорее эстетическая, но на всякий случай стоит иметь в виду.

Для повседневной работы мне хватает с головой командной строки git'а и Meld для сравнения, но на всякий случай скажу про знакомые мне GUI инструменты для работы с Git:

  • RabbitVCS поддерживает и SVN, и Git;
  • Giggle гораздо приятнее глазу, чем gitk.

Полезные материалы для начинающих знакомство с Git:

  • Git - SVN Crash Course — для тех, кто мигрирует с SVN на Git; таблицы соответствия для быстрого старта и укладывания в голове аналогий
  • http://progit.org/book/ru/ — хороший перевод об устройстве и логике работы Git; кратко, последовательно и понятно, без "воды" и лирических отступлений
  • http://habrahabr.ru/blogs/development/68341/ — одна из самых понятных и кратких статей о правильной организации коллективной работы над проектами с использованием Git
  • http://help.github.com/git-cheat-sheets/
  • Git-SVN Comparison

И не забудьте про git-svn! Этот пакет даёт нам в распоряжение такую замечательную команду, как git svn clone <SVN_repo_URL> /path/to/git/repo, которая позволит создать Git-репозиторий из SVN-репо, сохранив всю историю коммитов. Безусловно полезная при миграции вещь.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru digg.com friendfeed.com liveinternet.ru livejournal.ru yandex.ru del.icio.us
Оставьте комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

Авторизация  Facebook. MaxSiteAuth. Loginza

(обязательно)