рабочее: git & friends

Nov 03, 2010 15:03

git - ещё одна open-source SCM написанная "better than any other SCM" =)

за пару минут работы с ним нашел следующие плюсы:

+ служебный каталог .git создаётся в рабочем каталоге только один (по сравнению с .svn разбросанных по каждому под-каталогу)

+ штука изначально заточена под "сетевую" модель разработки, то есть взаимодействие удаленных репозитариев, иначе говоря, рабочий каталог - это как branch (здесь его называют fork) с удаленного репозитария, соответственно, все _ваши_ commit-ы хранятся в нём - можно ходить по логу, делать откаты, и прочее, не взаимодействуя с удаленным сервером, что адски полезно для трудоголиков в дороге.

+ соответственно, при заливке обновлений в основной репозиторий (на самом деле, получается что тут просто нет понятия "основной") - происходит объединение branchей (сливаются все коммиты). причем похоже алгоритм объединения дифференциальный - работает быстро.

+ работает только через ssh, никакого хранения паролей в рабочем каталоге, приватный ключ, естественно, нужно защищать парольной фразой

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

! важное отличие в работе с коммитами. понятно, что каждый коммит - это транзакция.
если при работе с svn транзакцией является общение вашего svn-клиента с сервером репозитария, то для git транзакцией является перенос файлов из рабочего каталога в локальный репозитарий.
чтобы не было лишнего соблазна лазить ручками, локальный репозиторий хранится в немного шифрованном виде. так вот, каждая операция по подготовке коммита (добавление новых/измененных файлов, удаление ненужных файлов и т.п.) - такой микро коммит, в рамках последней незавершенной транзакции. немного запутанно, но привыкаешь быстро - грубо говоря, хранится не только рабочая копия файла, но и все попытки его закоммитить. зато нет проблем с тем, что файл поставлен в очередь на добавление, а в момент собственно commit'а файл куда-то проимелся, из-за чего всё падает (как это часто бывает в svn). но зато, соответственно, тут может иметь место обратный косяк - файл добавили в транзакцию, после чего поменяли локально ещё раз, при коммите эти изменения естественно будут проигнорированы. к счастью, команда status очень подробно про это рассказывает, так что вероятность ошибки тут меньше чем с svn-ом.

бесплатные удаленные git-репозитарии. регистрация на любое мыло, для работы необходимо сгенерировать пару RSA ключей (стандартными SSH-средствами, без заморочек с OpenSSL).

полный мануал можно найти здесь

краткий хелп по командам:

git clone [url] - это checkout, он же fork
... работаем с файлами
git status - человеко понятный статус
git status -s - сокращенная версия статуса, больше похоже на svn
git add [file] - добавить файл в текущую транзакцию коммита
git reset [file] - отменить добавление файла и удалить его изменения из текущей транзакции коммита (передумали коммитить)
git rm - удалить файл из проекта (добавляет в транзакцию операцию удаления файла и заодно удаляет файл локально, если он ещё есть)
git commit -m "comment" - собственно коммит
git commit -am "comment" - "быстрый коммит" для фанатов svn - автоматически добавляет все измененные, модифицированные или удаленные файлы в текущую транзакцию и после этого коммитит
git log
git diff [revision] - сравнить с репозитарием
git diff --cached - сравнить с подготавливаемой транзакцией

хозяйке на заметку

Previous post Next post
Up