немного о git'е
Feb. 2nd, 2012 03:57 am(эта запись может быть интересна программистам)
Наверное, это неправильно, что меня так смешит запись Reset Demystified. Если вкратце, то автор книги Pro Git (!), признается в том, что мало написал о команде git reset в своей книге, потому что плохо ее понимал (!!). Но с тех пор он прочитал о ней побольше, и сейчас объяснит ее раз и навсегда, в блог-записи на 17 страниц!
Можно ли придумать более убедительную демонстрацию извращенности и враждебности командной строки гита? У команды git reset, которая потенциально может полностью стереть ваши изменения навсегда, есть три разных подвида, каждый из которых делает совершенно разную работу, и еще один из этих подвидов очень похож на другую команду, git checkout, но только в одном из ее подвидов - другой опять-таки делает совершенно другое! Но ничего, все станет кристально ясно, как только мы изучим полезнейшую сводную таблицу в конце записи:

Правда, теперь все понятно?
Я вспомнил, когда это прочитал, как два или три года назад мне так же было смешно, когда в Hacker News обсуждали новый сайт "Daily git tips". Я пытался сказать одну простую вещь: если вам для работы с системой управления версиями нужен сайт с ежедневными новыми советами, то что-то не так в вашей системе. Но меня, кажется, не очень поняли. Или не согласились.
Наверное, это неправильно, что меня так смешит запись Reset Demystified. Если вкратце, то автор книги Pro Git (!), признается в том, что мало написал о команде git reset в своей книге, потому что плохо ее понимал (!!). Но с тех пор он прочитал о ней побольше, и сейчас объяснит ее раз и навсегда, в блог-записи на 17 страниц!
Можно ли придумать более убедительную демонстрацию извращенности и враждебности командной строки гита? У команды git reset, которая потенциально может полностью стереть ваши изменения навсегда, есть три разных подвида, каждый из которых делает совершенно разную работу, и еще один из этих подвидов очень похож на другую команду, git checkout, но только в одном из ее подвидов - другой опять-таки делает совершенно другое! Но ничего, все станет кристально ясно, как только мы изучим полезнейшую сводную таблицу в конце записи:
Правда, теперь все понятно?
Я вспомнил, когда это прочитал, как два или три года назад мне так же было смешно, когда в Hacker News обсуждали новый сайт "Daily git tips". Я пытался сказать одну простую вещь: если вам для работы с системой управления версиями нужен сайт с ежедневными новыми советами, то что-то не так в вашей системе. Но меня, кажется, не очень поняли. Или не согласились.
no subject
Date: 2012-02-02 02:07 am (UTC)Сайтов с ежедневными новыми советами по любой теме навалом, какую не возьми. Потому это явление никак не может считаться аргументом против чего-либо.
no subject
Date: 2012-02-02 02:23 am (UTC)no subject
Date: 2012-02-02 03:48 am (UTC)no subject
Date: 2012-02-02 02:37 pm (UTC)гит вообще контринтуитивен и хрупок, начиная от наличия там индекса (с содержанием отличным от всего вокруг), ибаторики с сертификатами (внезапных отказов работать из-за wrong CA) до вот таких-вот reset.
(no subject)
From:no subject
Date: 2012-02-03 01:08 am (UTC)no subject
Date: 2012-02-02 02:27 am (UTC)no subject
Date: 2012-02-02 12:26 pm (UTC)no subject
Date: 2012-02-02 02:52 am (UTC)> книге, потому что плохо ее понимал
Ну, собственно, это говорит о том, что git можно успешно
пользоваться и не разбираясь в этих тонкостях.
no subject
Date: 2012-02-02 08:39 am (UTC)(no subject)
From:no subject
Date: 2012-02-02 03:33 am (UTC)Вообще когда кто-то упомнает git в контексте сложности изучения - это к срачу. Вот там уже выше в комментах написали что а вот в меркуриале дескать все зашибись.
А конкретно по технической стороне темы: новичку достаточно знать reset --hard [commit] для того чтобы откатывать ветку (ну и конечно всегда коммитить перед reset - тогда по логу коммитов всегда можно восстановить все что было откачено).
Все остальное нужно редко и осваивается постепенно за годы регулярного использования git, как у того чувака. Но это не значит что эти редкие фичи вообще не нужны или что они как то мешают новичкам.
no subject
Date: 2012-02-02 08:29 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-02-02 04:14 am (UTC)no subject
Date: 2012-02-02 05:12 am (UTC)Что касается "команды git reset, которая потенциально может полностью стереть ваши изменения навсегда" - duh, эта команда для того и предназначена, чтобы стирать изменения! Она и называется reset, а не please-save-my-changes, именно поэтому. Это как жаловаться, что ножом можно порезаться. На то он и нож! А опций у неё много, потому как изменения бывают разные - которые только внесли в файлы? Которые собрались коммитить? Которые уже закоммитили? Разным изменениям - разные опции. Не нужно - не пользуйтесь, запомните один reset --hard и в 90% достаточно. Можно даже алиас прописать, если руки устают набирать.
no subject
Date: 2012-02-02 06:56 am (UTC)no subject
Date: 2012-02-02 07:08 am (UTC)no subject
Date: 2012-02-02 12:31 pm (UTC)(no subject)
From:no subject
Date: 2012-02-02 07:25 am (UTC)git'ом больше года пользуюсь и никогда не читал никаких толстых мануалов про него. И, помнится, только после этой статьи наконец понял про The Three Trees of Git и перестал каждый раз гуглить "git revert last commit".
При этом, естественно, я не утверждаю, что понимаю все тонкости использования reset, да и каких-то сложных случаев использования у меня в практике не было.
no subject
Date: 2012-02-02 09:40 am (UTC)(no subject)
From:no subject
Date: 2012-02-02 07:31 am (UTC)no subject
Date: 2012-02-02 07:53 am (UTC)no subject
Date: 2012-02-02 07:55 am (UTC)no subject
Date: 2012-02-02 08:04 am (UTC)Но, пытаясь ответить на вопрос «почему гит вообще такой сложный?», скажу, что ответ на него лежит в области математики. В основе лежит несколько базовых понятий, над которыми довольно естественным образом (т.е. как бы сама!) строится вся система. В качестве аналогии можно упомянуть машину Тьюринга — базовые понятия просты, но потом как бы случайно оказывается, что любой алгоритм, который можно помыслить, выражается в виде программы для этой машины. И образуется целая научная дисциплина с кучей открытых проблем.
Действительно, как было отмечено выше, бо́льшая часть функциональности гита — не для каждодневного использования. Чтобы снять тот же слой функциональности, что предоставляет, например, subversion, достаточно изучить примерно такой же объем мануалов. И только если захочется странного, придется потрудиться. Мне как-то понадобилось разобраться, как превращать поддиректории в ветки и наоборот (в subversion такая проблема вообще не стоит, поскольку там нет понятия ветки; ветка (и тег) — это всего лишь конвенциональная поддиректория). Я реально убил день, вкуривая мануалы, но в конце-концов научился это делать. Причем реальность (да, я использую именно слово «реальность», а не «особенности реализации», «идеология системы» и т.д.) такова, что инструменты, необходимые для этого, вроде бы простого, действия, настолько мощны, что позволяют произвести любое мыслимое преобразование над деревом объектов, и, как следствие, довольно сложны. Если бы идеология диктовала иметь отдельный инструмент для каждого из подобных действий, то пришлось бы заводить их тысячами. Такая политика годится лишь для VCS с сильно редуцированной функциональностью, благо их уже существует множество на любой вкус.
no subject
Date: 2012-02-02 08:37 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-02-02 08:24 am (UTC)no subject
Date: 2012-02-02 08:51 am (UTC)no subject
Date: 2012-02-02 10:03 am (UTC)но за один только git stash можно простить многое :) я даже с рабочим svn-ом из гита работаю, ибо удобнее и быстрее ...
да и тот же git stash полезно делать перед использованием неизвестной команды :)
no subject
Date: 2012-02-02 11:08 am (UTC)no subject
Date: 2012-02-02 01:29 pm (UTC)Пришлось гнать mercurial ссаными тряпками из проекта за это.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-02-02 12:16 pm (UTC)no subject
Date: 2012-02-02 08:04 pm (UTC)Не очень понимаю, кстати, замечаний о сложности гита. После некоторого обучения используется легко. Мы недавно перевели нашу компанию на использование git (c clearcase, starteam, subversion, cvs). Переход прошел гладко и впечатления хорошие. При всем этом гит позволяет быть очень эффективным, если узнать чуть больше, чем нужно для повседневной работы.
Сам я, в свое время эволюционировал в направлении vss => subversion => mercurial => git => ????
no subject
Date: 2012-02-02 09:17 pm (UTC)no subject
Date: 2012-02-03 01:46 am (UTC)no subject
Date: 2012-02-03 12:26 pm (UTC)