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.

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

а мержить kdiff’ом, он файлы не портит.

В смысле «не портит»? Если у тебя «хотредеплой» может поломаться от любой правки файла, то по смыслу он может поломаться от ЛЮБОЙ правки файла. Делай ты эту правку хоть в kdiff, хоть в kate, хоть в vim.

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

Ты себе как процесс мерджа представляешь без ПРАВКИ файлов? Магией?

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

ЛЮБОЙ правки файла. Делай ты эту правку хоть в kdiff, хоть в kate, хоть в vim.

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

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

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

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

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

А мне еще кажется странным, что не работает у него среда разработки, а виноват git.

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

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

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

Твоя среда разработки могла бы уметь делать более умный мердж и вообще могла бы уметь хоть какой-то мердж? Могла бы. Но не умеет.

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

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

среда делает самый лучший мерж и много чего еще, но мне не нужна и даже мешает разломанная рабочая копия в промежутке когда я делаю операции из cli. Бывает так, что вы решаете проблемы за рамками среды разработки.

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

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

В твоем процессе тебе не хватает барьера, который бы пушил код только когда ты ему сказал это сделать. Гит тут ваще не при чем.

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

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

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

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

И где разница? Тебе надо туда пушить валидный код, а не наполовину готовую функцию, во время написания которой ты ушел посрать.

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

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

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

считаю его поносным калом :)

Ты всё считаешь поносным калом.

Как будто что-то плохое.

Но я всё ещё силюсь понять, как можно считать «enp0s20f0u5u2c2» (скопировано с реального сервера!) предсказуемым именем, а «eth0» – нет.

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

кровь-кишки можно разложить по файлам с суффиксным форматом, например MySuperCode.java.${short_hash}.conflict. Мне кажется, какие-то другие системы управления версиями типа меркуриала или базара так и делали. Вот по ним пускай мержилки и работают.

Это хороший вариант.

Но это чисто для удобства работы с кодом.

От твоих проблем в IDE это никак не спасёт. Вот допустим git merge так и сделал - обновил те файлы, которые можно было смерджить автоматически, а которые нельзя – для тех сделал файлы с суффиксом .conflict.

Как результат ты имеешь ту самую «разваленную рабочую копию» в неконсистентном состоянии. Просто у тебя инструменты хот редеплоя говно. Вот и всё.

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

для тех сделал файлы с суффиксом .conflict.

Как результат ты имеешь ту самую «разваленную рабочую копию» в неконсистентном состоянии. Просто у тебя инструменты хот редеплоя говно. Вот и всё.

ну нет, файлы с расширением .conflict будут всеми проигнорированы кроме мержилки

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

Но я всё ещё силюсь понять, как можно считать «enp0s20f0u5u2c2» (скопировано с реального сервера!) предсказуемым именем, а «eth0» – нет.

Так вроде цель была не предсказуемость, а постоянство.

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

ну нет, файлы с расширением .conflict будут всеми проигнорированы кроме мержилки

Зато другие проигнорированы не будут, а там уже несовместимые сигнатуры методов, другие классы и т.п.

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

Но я всё ещё силюсь понять, как можно считать «enp0s20f0u5u2c2» (скопировано с реального сервера!) предсказуемым именем, а «eth0» – нет.

Так вроде цель была не предсказуемость, а постоянство.

Не-не-не, оно называется «predictable interface names».

Стабильности, кстати, в них тоже не наблюдается. Не больше чем в eth0/eth1.

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

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

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

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

Непродуктивно это когда ты пушишь код, который не работает, и он ломает тебе стейджинг :))))

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

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

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

мержить все в песочнице

Так в чем проблема сделать мердж в отдельной копии репы? Вам букву D в DCVS дали специально для этого.

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

Так вроде цель была не предсказуемость, а постоянство.

Проблема в том, что оно везде плохо.

Ляптоп: у меня не будет больше одного wifi интефрейса в обозримом будущем, я бы хотел видеть его как wifi0, а не wlp0s20f3.

Десктоп: eth0, eth1 и wifi0 появляются постоянно примерно всегда, если мне нужно их прибить я дам им человечные имена в /etc/systemd/network: isp, lan и wlan.

Сервер: они не предсказуемые, потому что замена райзера все ломает, перераспределение конфигурации PCIe (выключение/включение питания на портах или изменение пропускной способности) все ломает, а автоматический провижонинг эти имена не использует, потому что использует MAC адреса карт, известные заранее.

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

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

Ну ты тут третий день ноешь что опечатка в коде ломала тебе весь процесс. Твой тулинг был всрат, смирись.

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

у меня были: 3 рабочих копии для разработки и одна для деплоев, но не спасало. Сегодня вот например в совсем невинной ситуации мне снова гит насрал конфликтом.

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

Сервер: они не предсказуемые, потому что замена райзера все ломает, перераспределение конфигурации PCIe (выключение/включение питания на портах или изменение пропускной способности) все ломает, а автоматический провижонинг эти имена не использует, потому что использует MAC адреса карт, известные заранее.

systemd умеет присваивать имя интерфейсу исходя из мак-адреса. Выглядит ещё более всрато, честно говоря: enx78e7d1ea46da.

Так что да, фича просто абсолютно бесполезная в лучшем случае.

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

systemd умеет присваивать имя интерфейсу исходя из мак-адреса. Выглядит ещё более всрато, честно говоря: enx78e7d1ea46da.

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

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

systemd умеет присваивать имя интерфейсу исходя из мак-адреса. Выглядит ещё более всрато, честно говоря: enx78e7d1ea46da.

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

Нуууууу… венда вот присваивает UUID :DDDD

Серьёзно, вот прям вот так: \Device\NPF_{506B4345-1FC0-43F4-BFCF-4FFAD7739AFF}.

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

Но в cli ты этого ЕМНИП не видишь

Да не, netsh это покажет, если попросишь. Но прикол в том, что из скриптов обращаться приходится как раз через GUID к интерфейсу. А в остальном, тебе эти названия просто нахрен не всрались, потому что есть гуй.

https://ibb.co/qFZQ2rH

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

Все вышеуказанные наименования в разы удобнее «Realtek GbE #3» и уж тем более «\Device\NTPNP_PCI0036». Вот где настоящая шиза, я тебе как вендузятник говорю.

Reatek GbE #3 я могу по телефону продиктовать, а wlp012319afdj93 – нет.

cumvillain
()