About Blog Dev | Alfa Romeo SZ Conkeror wishlist

Особенность статей о git’е

Заметил одну интересную особенность статей о Гите — каждая из них рассказывает о формате его репозитория, в который раз талдыча про его простоту и понятность, в то время как статьи про Меркуриал и Базар содержат более близкую пользователю информацию.

Похоже, всё потому, что с интерфейсом Гита просто невозможно справиться, не понимания в точности, что же происходит. В то время как в Меркуриале эта информация избыточна — всё достаточно просто и без того. :)

Add post to: Delicious Reddit Slashdot Digg Technorati Google
Comment post

Comments

A.K. 30.06.2008 14:43

Да ладно вам. Git GUI, который идет в стандартной поставке, достаточно неплох — все просто и понятно. В нем даже можно увидеть дерево версий и все пересечения брэнчей. И это абсолютно не требует ни каких знаний о его внутреннем устройстве. Ну если не считать предложение о сжатии репозитория при каждом запуске Git GUI. Я искренне не понимаю почему эту процедуру нельзя проводить автоматически.

А на счет статей вы правильно заметили, очень редко они объясняют как сделать какую-то конретную вещь.

reply
Вадим 30.06.2008 16:05

Просто Гиту нужно сделать интерфейс по проще и тогда люди к нему потянутся!)))

reply
Alexander Artemenko 30.06.2008 16:47

Да нормальный у git интерфейс. Уже некоторое время пользуюсь, все достаточно удобно. Как устроен репозиторий, до сих пор имею лишь отдаленное представление, да и то ни разу не пригодилось.

reply
Alexander Solovyov 30.06.2008 17:08

Да нормальный у git интерфейс.

Ну так, с натяжкой… Довольно противный после меркуриала.

reply
Alexander Artemenko 30.06.2008 17:09

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

reply
Alexander Solovyov 30.06.2008 17:23

Ты похоже не совсем правильно понял. Ветки в меркуриале присутствуют точно так же, как и в гите, только у них нет имён (хотя сейчас есть определённая движуха на тему того, чтобы их добавить). И их точно так же можно пушить отдельно (а не полностью весь репозиторий) с помощью hg pull -r id_of_head, и ребазировать с помощью mq. Но тут такая штука, что меркуриал меньше на такой режим работы ориентирован, и пока это не сильно удобно (хотя есть надежды, что скоро это поменяется).

А так я одно время пользовался плагином Local Branches, хотя подходец немного грязноватый, конечно. :)

reply
Alexander Artemenko 30.06.2008 17:33

Вот вот, они просто разные. Это точно так же, как vim и emacs. Оба вроде тексты редактируют, но одним больше нравится первый, другим — второй.

reply
haizz 30.06.2008 21:58

http://zorgg.blogspot.com/2008/06/blog-post_30.html

reply
jetxee 1.07.2008 12:15

В точку. Почему-то с джитом нужно непременно вникать в то, как он устроен и как работает. А с Hg можно сосредоточиться на том, что хочешь сделать. Поэтому предпочитают hg.

reply
Alexander Solovyov 1.07.2008 12:34

джитом

Эхех… я, конечно, немного придираюсь к словам, но для меня джит — это JIT, just-in-time compiler. :-)

Поэтому предпочитают hg.

А некоторые предпочитают гит… Но из всех его фич мне лично не хватает упомянутых выше именованных веток. А так да, hg рулит. :)

reply
Vadim Fint 1.07.2008 19:04

Нууу… в целом понимание работы любого механизма — неважно какого — сделает работу с ним проще. И это даже к газонокасилкам относится с той лишь разницей, что все мы и так прекрасно знаем их устройство.

Гит — явно не дурак, с несколько иными приоритетами. Лично мне гуя вообще не нужна, либо очень редко (и базаровские gui-коммандочки тут аж прям в яблочко =)), зато я бы очень ценил скорость (хотя если честно, если в базар запихнуть всю джангу — то статус всех файлов (включая уйму .svn/*) вышвыривается за полсекунды или около того.

Проблема номер два — для оценки этих вещей с ними надо поработать весьма долгое время. По поводу той же скорости — я например не могу с уверенностью сказать что буду доволен базаром (у меркуриала сейчас примерно такая же производительность. Или чуть шустрее =)), когда буду зеркалить нечто с парой тысяч каммитов. Хотя. Взять и проверить. Чего это я… =)

Я вот гит люблю за его хирургическую точность. В меркуриале и базаре все спешат. То и дело вылезают либо уж ОЧЕНЬ спорные моменты в архитектуре, либо с версии 1.3 до 1.5 API меняется с ног на голову (базаар), а потом с 1.5 до 1.6 обратно с головы в ноги (опять базар). В гите это всё отточено. Потому и обсуждают они это много. Потому и рассказывают и пишут — тоже много. В базаре же внутри я видел достаточное количество моментов формирующих в голове мысль примерно следующего содержания “вот тут мы быстренько слепили, вроде шустро работает”. А может у автора и вовссе мыслей не возникало, ибо при чуть чуть изменённом окружении, скажем, сотне бранчей в папке, вместо ожидаемых 10 — всё просто встаёт.

Так что — главное выбрать правильную тулзу для задачи. Хорошо что есть и базаар и меркуриал и гит. Вот это — 100% =).

reply
Alexander Solovyov 1.07.2008 19:15

если в базар запихнуть всю джангу — то статус всех файлов (включая уйму .svn/*) вышвыривается за полсекунды или около того.

Ну, чисто для прикола, чекаут джанги с hg.dpaste.com:

D:\web\django>hg st --time
Time: real 0.155 secs (user 0.016+0.000 sys 0.078+0.000)
D:\web\django>hg tip --template "{rev}"
5632

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

Я работал с проектом на ~10500 коммитов (сейчас там уже ~12 тысяч, ЕМНИП), и всё было более чем отлично. Первый чекаут с нуля с сервера в Лондоне проходил за несколько минут, быстрее, чем чекаут в Subversion. =)

То и дело вылезают либо уж ОЧЕНЬ спорные моменты в архитектуре, либо с версии 1.3 до 1.5 API меняется с ног на голову (базаар), а потом с 1.5 до 1.6 обратно с головы в ноги (опять базар).

Базар, больше 20 раз поменявший формат репозитория, вообще стрёмная штука, и говорить что-то о его стабильности сложно. :) Меркуриал, как и гит, делал это один раз пока, ну и не могу сказать, что там всё тяп-ляп сделано, нету такого ощущения. Мэтт, похоже, вообще чувак довольно основательный.

reply
Vadim Fint 1.07.2008 20:43

Базар это все же поле для экспериментов. И по крайней мере форматы бранчей конвертятся между друг другом одной коммандочкой. Я говорил даже не о формате бранчей, а о общем api для работы с ними через питон. Есть ведь до фени внешних утилит, но больше всего раздражает, конечно, когда нужно то и дело допиливать trac-bzr (а с ним и у меркуриала не все хорошо.. даже у тебя на byteflow траке =)).

Ну, чисто для прикола, чекаут джанги с hg.dpaste.com

D:\web\django>hg st --time
Time: real 0.155 secs (user 0.016+0.000 sys 0.078+0.000)

мммм… я о полном зеркале говорил а не о чекауте… но сча проверимс:

Полное зеркало джанги с launchpad (упёрлись в ширину моего канала и.. lauchpad все же великий тормоз)

time bzr branch --quiet lp:django django-launchpad
bzr branch --quiet lp:django django-launchpad  12.19s user 0.64s system 2% cpu 9:18.16 total

cd django-launchpad
time bzr st
bzr st  0.26s user 0.04s system 99% cpu 0.301 total

time bzr st
bzr st  0.20s user 0.03s system 99% cpu 0.226 total

time bzr remove-tree
bzr remove-tree  1.16s user 0.19s system 99% cpu 1.351 total

time bzr checkout
bzr checkout  2.27s user 0.23s system 100% cpu 2.501 total

cd .. && du -hs django-launchpad
42M     django-launchpad

Вот последний чекаут показывает как раз голую скорость — распаковку последнего чекаута без сетевых соединений. Кстати. Я про полсекунды говорил все же голый статус на дереве с svn инфой!

time svn co http://code.djangoproject.com/svn/django/trunk django-svn-trunk >/dev/null
svn co http://code.djangoproject.com/svn/django/trunk django-svn-trunk  0.94s user 0.77s system 0% cpu 5:24.56 total

cd django-svn-trunk
time bzr init .
bzr init .  0.16s user 0.02s system 99% cpu 0.187 total

time bzr add >/dev/null
bzr add > /dev/null  2.26s user 0.14s system 99% cpu 2.423 total

time bzr ci -m 'initial rev (:'
bzr ci -m 'initial rev (:'  5.36s user 0.41s system 99% cpu 5.796 total

time bzr st
bzr st  0.64s user 0.12s system 99% cpu 0.765 total

time bzr st
bzr st  0.42s user 0.09s system 99% cpu 0.510 total

Мда… каждую неделю апдейчу джангу в базаровском бранче и даже почти в яблочко угадал сколько времени статус делается (: Опыт не пропьёш..

На самом деле статус — это почти голая производительность фс и кеша ос.

find django-launchpad -type f | wc -l
1191

find django-launchpad -type f | wc -l
359

find django-svn-trunk -type f | wc -l
4580

find django-svn-trunk -type d | wc -l
3135

Вон — svn в 4 раза кол-во файлов увеличивает.. и в 10 (!) раз кол-во папок. По крайней мере с точки зрения базара (:

Я работал с проектом на ~10500 коммитов (сейчас там уже ~12 тысяч, ЕМНИП), и всё было более чем отлично. Первый чекаут с нуля с сервера в Лондоне проходил за несколько минут, быстрее, чем чекаут в Subversion. =)

Опять же — скорость чекаутов практически не зависит от формата репозитория — один фиг по сети будет передаваться 100% объём последней ревизии + какое-то количество сопутствующей инфы (размер которой становится все менее критичен при увеличении проекта =)). А вот полное зеркало — тут уже интереснее. В базаре есть даже эксперимент с полным инкрементивным форматом. Но тут возникает второй трабл — если тысячу коммитов собирать диффками даже для 1 файла — это, черт побери, долго. Зато сам репозиторий получается ничтожным по размерам в сравнении со всем остальным =).

Тем не менее я не хочу ни одну систему ставить выше другой. Опыта работы с bzr у меня поболе чем с меркуриалом и ещё более чем с гитом. Одно могу сказать точно — централизованные vcs — нафик! ))

Но… поразмышляй:

du -hs django-svn-trunk
36M

du -hs django-launchpad-checkout-lightweight
14M

du -hs django-launchpad
42M

(: сейчас устал. Завтра ещё все это прогоню через меркуриал, если ты не поспособствуешь =))

p.s. bzr —version: 1.5

reply
Alexander Solovyov 1.07.2008 21:18

(а с ним и у меркуриала не все хорошо.. даже у тебя на byteflow траке =)).

Не, у меркуриала с ним всё отлично, а у byteflow всё поломалось, потому что мне очень хотелось увидеть http://hg.piranha.org.ua/ с темой paper, и потому меркуриал у меня там — свежее не бывает. :) А TracMercurial следует за релизами, естественно.

мммм… я о полном зеркале говорил а не о чекауте… но сча проверимс:

Я тоже. Я ж показал, сколько там ревизий. ;)

D:\web\django>hg up --time -r null
0 files updated, 0 files merged, 1176 files removed, 0 files unresolved
Time: real 1.287 secs (user 0.500+0.000 sys 0.344+0.000)
D:\web\django>hg up --time
1176 files updated, 0 files merged, 0 files removed, 0 files unresolved
Time: real 2.902 secs (user 1.469+0.000 sys 1.172+0.000)

Нужно учитывать, что винда и оно несколько медленнее работает.

Опять же — скорость чекаутов практически не зависит от формата репозитория

Ты плохо воспринял моё слово “чекаут”. Check out — стащить, нафиг. ;) Стащить в меркуриале можно только всё полностью.

А вот полное зеркало — тут уже интереснее.

Вот именно, что я показывал полное зеркало. 5632 ревизии. Это только trunk, естественно.

Но… поразмышляй:

.hg сам весит 16 692 kb, вместе с working copy — 29 596 kb. :-)

D:\web\django>hg --version
Mercurial Distributed SCM (version 626cb86a6523+tortoisehg)

Это TortoiseHg 0.4rc1

reply
Vadim Fint 1.07.2008 22:41

и всё-таки папок .svn у тебя ведь нет, раз ты тащил джангу с зеркала hg.dpaste.com (:

проверь с ними, чтоб у тебя ~4500 файлов получилось у джанги. Хрен с ними с ревизиями (теперь зато буду знать что в джанге есть толлько 1 вариант чекаута… у базара — три (:

reply
Alexander Solovyov 2.07.2008 0:15

А, таки нету .svn.

теперь зато буду знать что в джанге есть толлько 1 вариант чекаута… у базара — три (:

Ну, одним из GSoC-проектов для меркуриала сейчас как раз и является частичный чекаут. Посмотрим, что там выйдет.

reply

Comment form for «Особенность статей о git'е»

Required. 30 chars of fewer.

Required.

Comment post