?

Log in

No account? Create an account
немного о git'е - По делам сюда приплыл, а не за этим [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

немного о git'е [фев. 2, 2012|03:57 am]
Anatoly Vorobey
(эта запись может быть интересна программистам)

Наверное, это неправильно, что меня так смешит запись Reset Demystified. Если вкратце, то автор книги Pro Git (!), признается в том, что мало написал о команде git reset в своей книге, потому что плохо ее понимал (!!). Но с тех пор он прочитал о ней побольше, и сейчас объяснит ее раз и навсегда, в блог-записи на 17 страниц!

Можно ли придумать более убедительную демонстрацию извращенности и враждебности командной строки гита? У команды git reset, которая потенциально может полностью стереть ваши изменения навсегда, есть три разных подвида, каждый из которых делает совершенно разную работу, и еще один из этих подвидов очень похож на другую команду, git checkout, но только в одном из ее подвидов - другой опять-таки делает совершенно другое! Но ничего, все станет кристально ясно, как только мы изучим полезнейшую сводную таблицу в конце записи:



Правда, теперь все понятно?

Я вспомнил, когда это прочитал, как два или три года назад мне так же было смешно, когда в Hacker News обсуждали новый сайт "Daily git tips". Я пытался сказать одну простую вещь: если вам для работы с системой управления версиями нужен сайт с ежедневными новыми советами, то что-то не так в вашей системе. Но меня, кажется, не очень поняли. Или не согласились.
СсылкаОтветить

Comments:
Страница 1 из 2
<<[1] [2] >>
[User Picture]From: sanmai
2012-02-02 02:07 am
Никто же не заставляет вас пользоваться всеми вариантами команды reset?

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

Edited at 2012-02-02 02:09 (UTC)
(Ответить) (Thread)
[User Picture]From: vzaliva
2012-02-02 02:23 am
одна из причин почему я предпочитаю mercurial
(Ответить) (Thread)
[User Picture]From: link0ff
2012-02-02 03:48 am
В Bazaar больше возможностей (например, поддержка bound branches).
(Ответить) (Parent) (Thread)
[User Picture]From: msh
2012-02-02 02:27 am
Ну да, а для тех, кому git недостаточно запутан, Google еще придумал repo :-)
(Ответить) (Thread)
[User Picture]From: avva
2012-02-02 12:26 pm
А, я даже и не знал об этом (ничего не писал под Андроид пока что).
(Ответить) (Parent) (Thread)
[User Picture]From: helvegr
2012-02-02 02:52 am
> признается в том, что мало написал о команде git reset в своей
> книге, потому что плохо ее понимал

Ну, собственно, это говорит о том, что git можно успешно
пользоваться и не разбираясь в этих тонкостях.
(Ответить) (Thread)
[User Picture]From: develop7
2012-02-02 08:39 am
и каждый пользователь, который не разбирается в этих тонкостях, пишет о git книгу, название которой начинается с «Pro»(fessional)?
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: amosk
2012-02-02 03:33 am
Если вам для освоения профессии нужно много лет учиться, то что-то не так в вашей профессии :)

Вообще когда кто-то упомнает git в контексте сложности изучения - это к срачу. Вот там уже выше в комментах написали что а вот в меркуриале дескать все зашибись.

А конкретно по технической стороне темы: новичку достаточно знать reset --hard [commit] для того чтобы откатывать ветку (ну и конечно всегда коммитить перед reset - тогда по логу коммитов всегда можно восстановить все что было откачено).

Все остальное нужно редко и осваивается постепенно за годы регулярного использования git, как у того чувака. Но это не значит что эти редкие фичи вообще не нужны или что они как то мешают новичкам.

(Ответить) (Thread)
[User Picture]From: develop7
2012-02-02 08:29 am
Слишком много усилий для освоения второстепенного инструмента, в затылок которому дышит толпа аналогов. А под Mercurial есть hg-git, который позволяет вообще не менять хостинг репозиториев.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: bvlb
2012-02-02 04:14 am
у меня последнее время точно такое же ощущение, но не от git'а, а от английской грамматики.
(Ответить) (Thread)
[User Picture]From: stas
2012-02-02 05:12 am
Непонятного мало, но я бы тоже не согласился. Гит просто имеет функций на пару порядков больше, чем его предшественники. Да, 90% этих функций 90% времени не нужны. Но уж когда нужны, так уж нужны. Разумеется, некоторые real men презираются системы, где много опций, и никогда не пользуются vim (emacs они вообще считают воплощением лично Диавола), а только sed, потому что у vim слишком много опций. Я, например, не принадлежу к таким людям - я считаю, что принцип make simple things easy and complex things possible вполне осмыслен и гит ему следует. Да, в нём больше complex things - потому что это complex things с чем-то типа svn были вообще либо незовможны, либо делались с помощью лома и такой-то матери.

Что касается "команды git reset, которая потенциально может полностью стереть ваши изменения навсегда" - duh, эта команда для того и предназначена, чтобы стирать изменения! Она и называется reset, а не please-save-my-changes, именно поэтому. Это как жаловаться, что ножом можно порезаться. На то он и нож! А опций у неё много, потому как изменения бывают разные - которые только внесли в файлы? Которые собрались коммитить? Которые уже закоммитили? Разным изменениям - разные опции. Не нужно - не пользуйтесь, запомните один reset --hard и в 90% достаточно. Можно даже алиас прописать, если руки устают набирать.
(Ответить) (Thread)
[User Picture]From: kaathewise
2012-02-02 06:56 am
Подписываюсь под каждым словом. Еще бы хотел добавить, что у команды git reset три подвида делают не "совершенно разную работу", как пишет avva, ведь следующая команда включает в себя предыдущую, и все что они все делают - это 3 ступени отката коммита.
(Ответить) (Parent) (Thread)
[User Picture]From: yan
2012-02-02 07:08 am
Daily git tips: а что же, там в самом деле все советы всегда новые? У меня вот стоит на машине fortune, так и она повторяется.
(Ответить) (Thread)
[User Picture]From: avva
2012-02-02 12:31 pm
Это по замыслу типа блог был.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: zelych
2012-02-02 07:25 am
Отличная статья.
git'ом больше года пользуюсь и никогда не читал никаких толстых мануалов про него. И, помнится, только после этой статьи наконец понял про The Three Trees of Git и перестал каждый раз гуглить "git revert last commit".

При этом, естественно, я не утверждаю, что понимаю все тонкости использования reset, да и каких-то сложных случаев использования у меня в практике не было.
(Ответить) (Thread)
[User Picture]From: develop7
2012-02-02 09:40 am
самое забавное, что эти же люди будут продолжать настаивать, что «git простой и понятный».
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: plakhov
2012-02-02 07:31 am
Угу, и не поймут. Это люди, лишенные чувства собственной смертности, я им иногда завидую.
(Ответить) (Thread)
[User Picture]From: emdin
2012-02-02 07:53 am
Гитом я научился пользоваться примерно за два дня. Clearcase я изучал на двухнедельных курсах, что не мешало раз в несколько месяцев сталкиваться с проблемами и ошибками, которые можно было разрешить только с помощью специально обученных людей из build coordination center. В корпоративном руководстве по СС было несколько команд, про которые просто было написано -- "не использовать, опасно". Правда, теперь всё понятно?
(Ответить) (Thread)
From: vasaku
2012-02-02 07:55 am
при всей извращенности, git вышел пригоднее для дела чем все остальное. он даже как svn клиент лучше всех родных svn клиентов.
(Ответить) (Thread)
[User Picture]From: janatem
2012-02-02 08:04 am
Вопрос в том, чтобы отобразить набор понятий гита в команды и сделать это интуитивно понятно? Если так, то я соглашусь, что здесь есть над чем работать. (Вместо git reset --hard говорить git hard-reset?) Но это не очень важно, можно привыкнуть и к этой странной конвенции или даже налепить своих алиасов на основные операции.

Но, пытаясь ответить на вопрос «почему гит вообще такой сложный?», скажу, что ответ на него лежит в области математики. В основе лежит несколько базовых понятий, над которыми довольно естественным образом (т.е. как бы сама!) строится вся система. В качестве аналогии можно упомянуть машину Тьюринга — базовые понятия просты, но потом как бы случайно оказывается, что любой алгоритм, который можно помыслить, выражается в виде программы для этой машины. И образуется целая научная дисциплина с кучей открытых проблем.

Действительно, как было отмечено выше, бо́льшая часть функциональности гита — не для каждодневного использования. Чтобы снять тот же слой функциональности, что предоставляет, например, subversion, достаточно изучить примерно такой же объем мануалов. И только если захочется странного, придется потрудиться. Мне как-то понадобилось разобраться, как превращать поддиректории в ветки и наоборот (в subversion такая проблема вообще не стоит, поскольку там нет понятия ветки; ветка (и тег) — это всего лишь конвенциональная поддиректория). Я реально убил день, вкуривая мануалы, но в конце-концов научился это делать. Причем реальность (да, я использую именно слово «реальность», а не «особенности реализации», «идеология системы» и т.д.) такова, что инструменты, необходимые для этого, вроде бы простого, действия, настолько мощны, что позволяют произвести любое мыслимое преобразование над деревом объектов, и, как следствие, довольно сложны. Если бы идеология диктовала иметь отдельный инструмент для каждого из подобных действий, то пришлось бы заводить их тысячами. Такая политика годится лишь для VCS с сильно редуцированной функциональностью, благо их уже существует множество на любой вкус.
(Ответить) (Thread)
[User Picture]From: develop7
2012-02-02 08:37 am
Я не пойму вот чего. Почему для того, чтобы эффективно и осознанно пользоваться VCS с якобы «редуцированной функциональностью», изучать их внутреннее устройство абсолютно не обязательно?
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: janatem
2012-02-02 08:51 am
Пинок git'у с другой стороны — хочу, чтоб добавили команду git copy.
(Ответить) (Thread)
[User Picture]From: dimas
2012-02-02 10:03 am
ну да, гит это инструмент, которым можно выстрелить себе в ногу или даже задницу, десятью разными способами :)

но за один только git stash можно простить многое :) я даже с рабочим svn-ом из гита работаю, ибо удобнее и быстрее ...

да и тот же git stash полезно делать перед использованием неизвестной команды :)
(Ответить) (Thread)
Страница 1 из 2
<<[1] [2] >>