LINUX.ORG.RU

Mercurial vs Git


2

8

Почему git больше распространён, если он только для огромных команд и зверской автоматизации?

Ведь есть много маленьких команд, которым был бы удобнее Mercurial.

Что-то тут нечисто...

Ответ на: комментарий от baverman

в stg — ветке

Такое поведение сильно выбешивает. Постоянно приходится патчи с ветку на ветку утягивать.

Чем rebase или branch --clone не устраивает? И что mq в этом плане дает?

Да и зачем такие сложности? Вылизываешь с помощью stg фичу в отдельной ветке, периодически делаешь ветке rebase на upstream, потом сливаешь ее с основной. Изменения уходят в основной репозиторий. Всё, работа для stg закончена. Если нужен backport, то это уже отдельная работа.

Когда патчи ортогональны веткам, намного меньше проблем.

В рамках ветки ты работаешь с очередью, в рамках репозитория с веткой. Где тут место для проблем?

amm
()
Ответ на: комментарий от tailgunner

hg qpop -a; hg co -С different-branch; hg qqueue patches-for-different-branch

$ stg br different-branch

Ты _это_ называешь «ограничением»?

Да. То что не сделав qpop -a, не наложишь патчи на другую ветку, это ограничение. А то что 3 команды вместо одной, да еще и название очереди появляется, это просто неудобство.

amm
()
Ответ на: комментарий от drBatty

Даже команды так назвали, как мне хотелось.

Ты не поверишь:

[alias]
	st = status
	ci = commit
	br = branch
	co = checkout
	di = diff
	lo = log --graph --oneline --decorate --all
Add нет, так как пользуюсь stg refresh.

Опции тоже назвали, как ты хотел?

amm
()
Ответ на: комментарий от amm

И что mq в этом плане дает?

Нет бессмысленной привязки к бранчам.

Вылизываешь с помощью stg фичу в отдельной ветке, периодически делаешь ветке rebase на upstream, потом сливаешь ее с основной. Изменения уходят в основной репозиторий.

Вот это сложности в чистом виде. Тут хватит тупо одного патча.

Где тут место для проблем?

Я часто в патчах храню временные изменения, которые имеют смысл только на моей машине. Например изменения в конфигах (боевая, тестовая база) или отладочные инструкции. Несколько очередей, непривязанных к бранчам, это здравая идея, так как патчи могут накладываться без конфликтов на произвольное место графа и лишние действия тут только расстраивают.

baverman ★★★
()
Ответ на: комментарий от baverman

Вот это сложности в чистом виде. Тут хватит тупо одного патча.

Для фичи может, а иногда и должен быть, тест. Часто, чтобы откомментировать свои действия, «тупой патч» может быть раз на несколько последовательных патчей. Или тебя слово «фича» смущает?

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

stg rebase вместо hg qpop -a и hg qqueue лишние действия?

amm
()
Ответ на: комментарий от amm

Сначала ты объясняешь, что плохо жить без ветко-специфичных очередей, потом говоришь «вылизываешь в отдельной ветке». Как ты вообще работаешь? Зачем тебе веткоспецифичные очереди, насколько часто ты переключашься между ними и, главное, зачем?

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от amm

В stg можно по-другому?

Если другие разработчики не решают опубликовать свои фичи в репе, то работаю только с мастером (и то, в последнее время начал подтягивать их как патчи на мастер). Да, одна очередь на всё про все. Только написал один скриптик для пуша, чтоб он её игнорировал.

baverman ★★★
()
Последнее исправление: baverman (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Сначала ты объясняешь, что плохо жить без ветко-специфичных очередей, потом говоришь «вылизываешь в отдельной ветке».

...с помощью stg

Где противоречие?

Как ты вообще работаешь? Зачем тебе веткоспецифичные очереди, насколько часто ты переключашься между ними и, главное, зачем?

Переключаюсь, когда меняется решаемая задача. Зачем нужны? Так удобно же: не надо помнить куда приложена очередь, не надо делать делать qpop -a, чтобы переключиться, можно положить очередь поверх другой. Как в подобных случаях может помочь mq, я не знаю. Или скажешь, не нужно?

amm
()
Ответ на: комментарий от baverman

Если другие разработчики не решают опубликовать свои фичи в репе, то работаю только с мастером (и то, в последнее время начал подтягивать их как патчи на мастер). Да, одна очередь на всё про все. Только написал один скриптик для пуша, чтоб он её игнорировал.

А если у тебя несколько патчей в очереди логически связаны, как ты их будешь таскать по этой очереди? Свернешь в один патч? Или ты, в принципе, задачу на отдельные патчи не дробишь?

amm
()
Ответ на: комментарий от LongLiveUbuntu

Попробую провернуть такое в Git.

Не трать время. В git, если ты даже скопируешь файлы, размер репозитория не вырастет (если не считать размер tree и commit объектов).

amm
()
Ответ на: комментарий от hobbit

Вы все еще изучаете возможности своей ИДЕ? Тогда мы идем к вам!
С любовью, команда разработчиков Notepad.

urxvt ★★★★★
()
Ответ на: комментарий от hobbit

VCS должна просто работать и НЕ ТРЕБОВАТЬ ИЗУЧЕНИЯ. Потому svn продолжает рулить. ИМХО.

согласен. Но есть некое «но» - vcs не нужна. Нужно DVCS.

svn != DVCS, и потому не нужно.

drBatty ★★
()
Ответ на: комментарий от hobbit

Потому svn продолжает рулить.

SVN — это «паровоз» с КПД 10% в эпоху сверхскоростных «электровозов». Очень много танцев и камланий нужно сделать, чтобы правильно сделать merge конкурирующих коммитов. Поэтому коммиты делаются нечасто, проект развивается медленно.

Пара ссылок:

Переход на DVCS, Mercurial

Hg Init: Часть 1. Переобучение для пользователей Subversion

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

Очень много танцев и камланий нужно сделать, чтобы правильно сделать merge конкурирующих коммитов

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

alex_custov ★★★★★
()
Ответ на: комментарий от amm

Не за счет этого, а за счет простейшей системы хранения, которой требуется регулярная сборка мусора, чтобы функционировать более-менее быстро.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от amm

Гг.

Подробнее, пожалуйста.

Просто расскажи, как ты работаешь - особеннл, зачем тебе нужнынесколько _одновременно наложенных_ серий патчей.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Просто расскажи, как ты работаешь

Появлась новая задача:

  $ stg br -c newtask
  $ stg new solution
  $ write solution
  $ stg ref
Решили, вспомнили, что надо написать тест:
  $ stg new test
  $ write test
  $ stg ref
Сделали вид, что начали работу с теста:
  $ stg sink
Приходит идея, что можно решение оптимизировать:
  $ stg new special-case
  $ write special case solution
  $ stg ref
Возвращаемся к прежней работе:
  $ stg br oldtask

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

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

amm
()
Ответ на: комментарий от tailgunner

Не за счет этого, а за счет простейшей системы хранения, которой требуется регулярная сборка мусора, чтобы функционировать более-менее быстро.

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

Причем здесь «простейшая-непростейшая» и сборка мусора? Вопрос о способе хранения и адресации объектов в репозитории.

amm
()
Ответ на: комментарий от alex_custov

У людей занимающихся абсолютно разными задачами есть потребность изменять одни и те же файлы. И это не измениться никак, товарищ теоретик, ибо эти файлы и должны быть общие.

F457 ★★★★
()
Ответ на: комментарий от F457

да, спасибо, накушался я этими общими файлами - чуть ли не каждую неделю вопли «кто поменял API бл...». За общие для всего проекта файлы должен отвечать один человек, и ему нужно писать енхансменты в багзиллу, иначе будет бардак и никто ни за что не отвечает.

alex_custov ★★★★★
()
Ответ на: комментарий от kamre

Забавно:

Не, забавно другое:

That said, I never met this extreme difference in other repositories besides the Linux kernel. Yet this is no surprise to me, given that git was especially written to handle that use-case.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Вот это тоже интересно:

git is simply more efficient in storing directory layout than Mercurial, because it:
a) uses a more aggressive compression mechanism, and
b) stores the directory layout of the whole repo in small tree-object nodes instead of one big file.

kamre ★★★
()
Ответ на: комментарий от alex_custov

Не меняй чужое апи без согласования и будет меньше бюрократии

F457 ★★★★
()
Ответ на: комментарий от kamre

Вот это тоже интересно:

Там всю нить интересно прочитать, не выдергивая цитаты.

tailgunner ★★★★★
()
Ответ на: комментарий от iZEN

SVN — это «паровоз»

Люди жаловались, что на очень больших репозитариях (5 ТБ) git и hg умирают. svn работает.

Плюс ещё какие-то были непонятки с кодировками. В svn мне пользователь создал файл с русским именем - он корректно скачался на клиенты с виндой (где cp1251) и линуксом (причём старым линуксом, где локаль кои-8). Причём это отлично работает как в командной строке, так и в TortoiseSVN. Последний раз, когда я интересовался этим вопросом, у «наследников» с этим были проблемы.

Возможно, сейчас всё это вылечили. Но мне, например, нужно очень сильно подумать, прежде чем переводить на DVCS наш фирменный репозитарий, который ведётся с 2006 года.

hobbit ★★★★★
()
Ответ на: комментарий от iZEN

Кстати, вот этот текст Спольски я читал. И он меня насторожил. Дело в том. что Джоэл нормальный публицист и обычно пишет человеческим языком. А тут вдруг у него попёр язык рекламных заклинаний. «Доверьтесь ему» и др. Такое ощущение, что автор сам в чём-то не уверен.

hobbit ★★★★★
()

Прекратите решать за других, что им удобнее.

// А вообще я за меркуриал, да.

MyNameIsWinner
()
Ответ на: комментарий от hobbit

Это ты про того который привел 0 формальных критериев о приемке на работу? :)

По теме интересно вас не задевает медленность SVN на таком старом репе? Или там в новых версиях уже все более лучше?

zz ★★★★
()
Ответ на: комментарий от zz

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

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

А тут вдруг у него попёр язык рекламных заклинаний. «Доверьтесь ему» и др. Такое ощущение, что автор сам в чём-то не уверен.

Не, тут другое. Реклама.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Не за счет этого, а за счет простейшей системы хранения, которой требуется регулярная сборка мусора, чтобы функционировать более-менее быстро.

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

annulen ★★★★★
()
Ответ на: комментарий от annulen

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

мне нравиться.

drBatty ★★
()
Ответ на: комментарий от annulen

Не за счет этого, а за счет простейшей системы хранения, которой требуется регулярная сборка мусора, чтобы функционировать более-менее быстро.

Сборка мусоры нужна совсем не для этого

Да, это я неправильно выразился (давно перестал следить за git). Имелся в виду git-repack.

tailgunner ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

у git нет GUI уровня TortoiseHg

есть TortoiseGit, только подобная фигня нафиг не нужна.

Тут видно распространение Git и hg https://www.ohloh.net/repositories/compare

Хотите быть маргиналами при том что никаких исключительных фичей не получите - юзайте Hg. Хотите иметь очень мощный и распространенный инструмент - юзайте Git.

quest ★★★★
()
Ответ на: комментарий от iZEN

Я думал, что маргиналы это те, кто использует CVS и SVN. Как жестоко я ошибался!!

+1, мой мир не будет прежним

I-Love-Microsoft ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.