LINUX.ORG.RU

Mercurial против Git в Facebook

 , ,


0

5

Привет, ЛОР!

Нашёл довольно интересную заметку о том, почему некоторые до сих пор используют Mercurial. В частности, Facebook этим славен. Может кому интересно тут будет.

https://graphite.dev/blog/why-facebook-doesnt-use-git

TL;DR для Ъ:

Года до 2012 в Facebook царствовал Git, но с ним были проблемы. У лицекниги была жирная монорепа, и Git начинал ощутимо лагать на ней. Перцы из Facebook написали разрабам гита с предложением ускорить работу собственно гита, но те их послали, предложив место этого распилить монорепу на кусочки. Лицекниговые такой поворот сюжета не оценили, и тут им подвернулся Mercurial, разрабы которого как раз без проблем приняли патчи с улучшением производительности.

С тех пор в мордокниге царствует Mercurial.

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

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

Syncro ★★★★★
()
Последнее исправление: Syncro (всего исправлений: 2)
Ответ на: комментарий от PRN

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

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

Он написал эту хрень, потому что у разработчиков ядра, из-за какого-то конфликта, отозвали лицензию на бесплатное использование BitKeeper, а открытых/бесплатных распределённых систем контроля фактически не было, они только начинали появляться.

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

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

Ты не понял. Ядро – это 30 миллионов строк кода, над которым параллельно работают тысячи человек. И если в таком режиме git хорошо себя показывает, то он вполне годен и для более мелких проектов.

но подозреваю там и график не такой отжайловый как у пром. программистов и прикладников

С 10 до 18, как и у всех.

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

Осталось только понять причём тут Darcs и Haskell.

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

Он написал эту хрень, потому что у разработчиков ядра, из-за какого-то конфликта, отозвали лицензию на бесплатное использование BitKeeper, а открытых/бесплатных распределённых систем контроля фактически не было, они только начинали появляться.

Конфликт был как раз в том, что некоторые разрабы ядра работали над открытыми аналогами BitKeeper, чего лицензия BK делать категорически не разрешала.

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

Лицензия запрещала реверс инжиниринг, в котором заподозрили разработчика соответствующих утилит.

Ненене, разработка аналогичных прог тоже была запрещена. Один из изначальных авторов Mercurial из-за этого собственно прекратил работать над Mercurial.

Блин, сейчас глянул, этот чел транснулся и теперь «девка». Прямо эпидемия какая-то!

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

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

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

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

модель разработки автократическая

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

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

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

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

им подошла бы централизованная с бранчами. Расаределенная это когда ваши базы кода не совсем одно и тоже, но изменениями можно атомарно обмениваться, а гит не может справиться в двумя немного разошедшимися ветками или репами.

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

им подошла бы централизованная с бранчами.

Ты с дуба рухнул? Там тысячи человек и десятки контор. Централизованная им бы никак и никуда не пошла.

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

Расаределенная это когда ваши базы кода не совсем одно и тоже, но изменениями можно атомарно обмениваться

Прямо как… у ядерщиков!

а гит не может справиться в двумя немного разошедшимися ветками или репами.

Почему у ядерщиков всё работает-то?

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

Ты не понял. Ядро – это 30 миллионов строк кода

мир полон феноменов, но у них основной воркфлоу полинейнее

Осталось только понять причём тут Darcs и Haskell.

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

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

Ты с дуба рухнул? Там тысячи человек и десятки контор.

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

Прямо как… у ядерщиков!

если ты по итогу засылаешь патч в главную ветку автократу это не расаределенная разработка

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

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

Какие фашисты? Какая бочка? Причём тут Haskell? Дядя, ты поехавший!

т.е. не связанные полностью по истории базы кода.

Это как? Когда у тебя в разных ветках вообще совсем разный код без общего предка? Нахрена такое нужно? Дядя, ты поехавший №2!

если ты по итогу засылаешь патч в главную ветку автократу это не расаределенная разработка

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

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

У тебя кривые руки, смирись.

Да нет, он просто упёртый поехавший кретин. Но копипасту годную генерит, этого у него не отнимешь! Прямо как @erzent в былые годы!

https://ibb.co/cgfqRqx

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

Ты, похоже, вообще не понял смысл распределённости.

Уже второй такой коментарий в этом треде вижу. Может благородные доны снизойдут до нас, несведущих, и расскажут в чем сакральный смысл распределенности?

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

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

Расскажи это профсоюзу пилотов в какой-нибудь Франции.

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

Гит распиарил один жирный швед по имени Лойнуус Тороваалтос. Он ещё довольно всратую операционку сделал. Как же её называют-то… лайнекс? Нет, это слабительное. Слюнекс? Нет, тоже не то. Забыл как называется, но ты про неё точно знаешь.

Праильна, надо быть как БСДушники и сидеть на CVS до скончания времён.

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

Вот греп не надо настраивать.

Да ты чо.

$  alias sgrep
alias sgrep='grep   --color=auto   -r -n   --exclude-dir=.svn   --exclude-dir=.git   --exclude-dir=.deps   --exclude-dir=build-aux   --exclude-dir=m4   --exclude-dir=*-obj   --exclude='\''*.[oa]'\''   --exclude='\''*.so'\''   --exclude='\''*.xz'\''   --exclude='\''*~'\''   --exclude-dir=autom4te.cache   --exclude=aclocal.m4   --exclude=config.sub   --exclude=ltmain.sh   --exclude=.intltool-merge-cache'
wandrien ★★
()
Ответ на: комментарий от spbzip

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

В распределённых (таких как git, mercurial и другие), даже если я не являюсь участником проекта с допуском, я могу легко создать последовательность коммитов и отправить их в апстрим любым приемлемым для них способом. Сеть может быть недоступна в процессе.

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

ack - это что-то очень древнее (если не ошибаюсь, ещё на Perl написаное).

Сейчас есть более быстрые альтернативы, предпочитаю, ripgrep. Ну и настройка требуется даже для ripgrep (всё предусмотреть невозможно, у меня есть свои исключаемые типы файлов и каталоги, такие как node_modules, *.min.js, и т.д.).

anonymous
()

Вот еще статья про различия в архитектуре между Git и Mercurial: https://web.archive.org/web/20190103121909/https://www.hackerearth.com/practi...

Если честно, Git архитектурно выглядит кривым костылем с самого начала: вот многие критикуют языки с Garbage Collector'ом, но его необходимость для системы контроля версий, которая вообще довольно статичная - это как?! Не, понятно, что когда ты напроектировал систему, в которой у тебя нет такого понятия как «ветка», а есть «референсы» и ты можешь потерять референс, то естественно, что у тебя будет мусор, но ё-моё... Когда в самом начале, Линус представлял Git в ходе презентации в Google и говорил «Git делает вещи чуточку лучше, чем Mercurial» - это полная чушь.

X-Pilot ★★★★★
()
Ответ на: комментарий от firkax

Впрочем, распределённость нафиг не сдалась не только ей, но и большинству обычных людей

Нет, обычным людям она как раз нужна. В гите я могу клонировать репозиторий и дальше творить в локальном репозитории что угодно без доступа к центральному серверу. Как сделать то же самое с SVN? А если центральный сервер сдохнет, то я могу за пять минут из локальной копии поднять зеркало.

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

Ты забыл уточнить - речь не про «что угодно», а только про составление дерева коммитов. Потому что всё остальное можно делать и в свн без доступа к серверу. И да, большинству людей это не нужно, они git push вызывают сразу после git commit и никак иначе.

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

Ждёшь пока починят. Не починят - твоё зеркало тоже ненужно т.к. проект видимо закрыли и доработки к нему больше не нужны.

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

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 3)
Ответ на: комментарий от grem

Что за дурацкий вопрос? Править локальные файлы ты всегда можешь, система контроля версий в этом не участвует. Участвовать она начинает только когда ты коммиты будешь составлять.

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

Вопрос в контексте использования svn. Как в нём создать коммит без сервера? Как создать набор последовательных коммитов? Мне правда интересно, так как иногда нужно иметь дело с svn репозиторием с целью подготовки набора патчей, но как это сделать найти пока не удавалось.

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

Прочти нормально моё сообщение и не тупи. Вот даже процитирую ещё раз:

Ты забыл уточнить - речь не про «что угодно», а только про составление дерева коммитов. Потому что всё остальное можно делать и в свн без доступа к серверу.

«Всё остальное» - это как раз то, что не связано с составлением дерева коммитов.

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

Потому что всё остальное можно делать и в свн без доступа к серверу.

А что можно делать в svn без доступа к серверу? И зачем тогда svn упоминается, если речь не о коммитах, а о правке файлов, для которых он, очевидно, не нужен?

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

Затем, что Werenter заявил, что в свн без доступа к серверу чуть ли не блокируется вся работа. Это неверно и я ему возразил. Свн, действительно, тут почти ни при чём. Система контроля версий нужна для публикации результатов, а не для кодинга, и отсутствие первого не блокирует второе. Впрочем, одна важная функция всё-таки есть - посмотреть что именно ты изменил в рабочей копии от последнего коммита.

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

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

Ты не шаришь. В гите есть просто потрясающая фича git-bisect, которая нужна как раз для кодинга. Если в svn такого нет, то место ему на помойке.

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

То есть в теме про систему контроля версий ты рассказываешь о том, что система контроля версий не нужна.

одна важная функция всё-таки есть - посмотреть что именно ты изменил в рабочей копии от последнего коммита.

А если я хочу новые изменения внести, не связанные с законченным изменением, то что?

grem ★★★★★
()