The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

mergiraf - AST-ориентированный инструмент для трёхстороннего слияния в Git

14.12.2024 09:34

Опубликован релиз проекта mergiraf 0.4, развивающего драйвер для Git с реализацией возможности трёхстороннего слияния. Mergiraf поддерживает разрешение различных видов конфликтов при слиянии и может использоваться для различных языков программирования и форматов файлов. Возможен как отдельный вызов mergiraf для обработки конфликтов, возникающих при работе со штатным Git, так и замена в Git обработчика слияний для расширения возможностей таких команд, как merge, revert, rebase и cherry-pick. Код распространяется под лицензией GPLv3. В новой версии добавлена поддержка языков Python, TOML, Scala и Typescript, а также проведена оптимизация производительности.

Ниже представлено подробное описание проблем, решаемых при помощи mergiraf:

Программное обеспечение является ярким примером чрезвычайно сложной системы. Сложные системы имеют одно общее свойство - они сложны - и не следует ожидать, что нужное сложное поведение возникнет само собой, случайно. Вместо этого сложные системы эволюционируют со временем, шаг за шагом, и каждая мутация тщательно проверяется на каждом этапе. Эволюцию любой сложной системы можно визуализировать в виде ориентированного дерева, где корень представляет собой пустое множество функций, а каждый узел — за исключением корня — является результатом применения мутации к своему родителю. В контексте продуктов каждый узел называется версией, представляющей собой определённый набор функций и антифункций. Любое изменение этого набора считается мутацией, формирующей ребро в ориентированном ациклическом графе.

Чтобы постепенно привести исходный код в состояние, проявляющее требуемое поведение, и задокументировать детали возникновения этого состояния, программисты представляют свою работу в терминах snapshot-ов и changeset-ов. Snapshot представляет собой определённое состояние продукта со всеми низкоуровневыми деталями, в то время как changeset обозначает переход между snapshot-ами. Обычно snapshot-ы порождаются применением одиночных changeset-ов к их родителям, поэтому эти snapshot-ы почти всегда маркируют то, что делают changeset-ы, которые их создали, и эти термины часто используются взаимозаменяемо.

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

Эта функциональность позволяет разработчикам вести семантически значимую историю проекта, что имеет решающее значение для отладки и ответов на такие вопросы, как "Зачем была введена эта низкоуровневая деталь (например, переменная)?", "Сколько процентов приблизительно составляет мой вклад в этот проект?", "Кого взломали внедрения закладки и когда?", "Какое низкоуровневое изменение сломало эту функцию (хотя вроде бы не должно было, мы всё проверили!?)"

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

Обычно создаётся основная ветка, представляющая "официальный" продукт, от которой ветвятся боковые ветки для каждой функции, которые регулярно (в идеале — после каждого коммита) синхронизируются с основной веткой, что позволяет разработчикам работать с наисвежайшей версией продукта и одновременно внедрять функции, которые они в данный момент разрабатывают, выявляя проблемы, проистекающие от действий других разработчиков, как можно раньше.

Проблемы могут возникнуть при попытке комбинирования функций различных snapshot-ов (нахождения общего предка, и применения changeset-ов, их порождающих, последовательно поверх другого; эта операция называется rebase, слияние же - это почти как rebase, просто структурирует граф коммитов по-другому, в результате чего им становится неудобно манипулировать, поэтому от слияний стараются отказаться в пользу rebase-ов). Современные системы контроля версий (VCS) используют внутренние алгоритмы объединения изменений, которые просто разбивают файлы на отдельные строки, рассматривают каждую строку как символ, а файлы - как их последовательности, и затем применяют для их объединения алгоритмы родом из биоинформатики.

К сожалению, такое построчное представление исходного кода не имеет ничего общего с его содержанием. Единственное его достоинство - оно простое и универсальное. Несоответствие ведёт к конфликтам, при этом являясь постоянным источником головной боли для разработчиков. Разрешение конфликтов требует от разработчика тщательного изучения обеих версий кода, причём не только разделов, обозначенных построчным алгоритмом сравнения как "изменённые" или "конфликтующие", но, возможно, и всего проекта.

Разработчик должен понять изменения, вручную написать объединённый код и устранить любые несоответствия. Проблем намного прибавляется, когда построчный инструмент неправильно идентифицирует изменения, что часто случается при крупных изменениях, включая тривиальные, такие как пеpефоpматирование кода. Если последующие изменения не удаётся применить к вручную объединённому коду, ситуация превращается в полный кошмар. Несмотря на ужасающие случаи, в большинстве случаев построчный алгоритм работает, особенно если разработчики активно стараются не создавать ему проблемы. Один из способов минимизаций подобных проблем - это обязательное требование обработки исходного кода инструментами каноникализации, такими как black.

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

Несмотря на то, что исследования в этой области ведутся вот уже около 30 лет, и вылились в создание нескольких проприетарных коммерческих продуктов, эти исследования до недавнего времени так и не были превращены в практически применимые продукты с открытым исходным кодом. Основная масса СПО-решений начала развиваться в начале 2010-х, и была сфокусирована в основном на языке Java.

Наиболее выдающаяся свободная реализация того периода, GumTree, создана исследователем с академическим бэкграундом, написана на Java, использует своё абстрактное внутреннее представление, имеет бэкэнды, как основанные на генераторе парсеров treesitter, так и базирующиеся на других инструментах для преобразования исходного кода в абстрактные представления. Данная система умеет только визуализировать и генерировать изменения (в виде текстового лога событий, также имеется API, которое можно тривиально вызвать из любого ЯП, имеющего биндинги к Java). Однако для слияния изменений, а равно для просмотра сгенерированных ею diff-файлов, она из коробки неприменима (впрочем, вероятно, что загрузку diff-ов можно реализовать через API).

Более молодая и более применимая на практике реализация difftastic написана на Rust, основана на treesitter, сфокусирована на генерации подсвеченных diff-ов в консоли. Данная система тоже направлена на визуализацию diff-ов и вообще не ставит своей целью слияние изменений или применение патчей.

Совсем недавно появился и активно развивается проект mergiraf. Этот написанный на Rust инструмент (занимает 21 MiB) также основан на treesitter, который уже стал таким же стандартом для парсеров контекстно-свободных грамматик в инструментах разработки, каким стал LLVM для оптимизации низкоуровневых представлений инструкций. В отличии от конкурентов mergiraf предоставляет функции не для генерации diff-ов, а для автоматического разрешения конфликтов слияний. Под капотом mergiraf использует для генерации патчей адаптированную под структуры treesitter реализацию алгоритма, используемого в GumTree, а для применения - реализацию алгоритма, используемого в spork.

Cериализация патчей в файлы, которые могут быть применены потом, к сожалению, напрямую не реализована, но вероятно может быть обеспечена путём парсинга логов событий, генерируемых GumTree. Другим перспективным способом применения различий может быть применение различий не через патчи, а через функциональность рефакторинга LSP-серверов, что может помочь в выявлении конфликтов на уровне всего проекта. Визуализация поддерживается только для конфликтов.

Пример работы:


общий предок "base.py" (отступы табуляцией, лишняя строка в начале)


   foo = 1

   def main():
        print(foo + 2 + 3)

"a.py" (отступы по-прежнему табуляцией, 2 лишних строки в начале вместо одной, для отладочной печати задействована библиотека icecream, добавлен класс "baz":

   from icecream import ic

   foo = 1

   def main():
        ic(foo + 2 + 3)

        class baz:
                def __init__(self):
                        """baz"""


"b.py" (переменная "foo" переименована в "bar", обработано с помощью "black" после изменений, в результате отступы - пробелами и лишние строки вырезаны):

   bar = 1


   def main():
       print(bar + 2 + 3)


Вызов

   ./mergiraf merge ./base.py ./a.py ./b.py -x a.py -y b.py -s base.py -o ./res.py

даёт следующий результат

   from icecream import ic

   bar = 1


   def main():
       ic(bar + 2 + 3)

       class baz:
           def __init__(self):
                """baz"""

(для отладочной печати задействована библиотека "icecream", переменная "foo" переименована в "bar", обработано с помощью "black" после изменений, в результате отступы - пробелами и лишние строки вырезаны, смесь табов и пробелов для отступа, но разрешённый вид).

Тут же виден недостаток инструмента. Стиль документа обычно конфигурируется в файлах ".editorconfig", и глобальные изменения стиля, такие как замена символов табуляции на пробелы и принятие стиля black-а, как было сделано в "b.py", обычно сопровождаются изменениями в ".editorconfig". Поэтому для более корректного применения подобных изменений инструмент должен иметь концепцию для глобального стиля "по умолчанию", и уметь подтягивать настройки из ".editorconfig".

  1. Главная ссылка к новости (https://codeberg.org/mergiraf/...)
  2. Pointers on abstract syntax tree differencing algorithms and tools
  3. Structural Diffs
  4. Список литературы
  5. Похожие проекты
  6. Другие merge-драйверы для Git
Автор новости: Аноним
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62402-mergiraf
Ключевые слова: mergiraf, git, diff, merge
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (94) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, pyphon (?), 10:05, 14/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Как я увидел функционал:
    1. Обрабатываем код black'ом.
    2. Прогоняем линтеры.
    3. Задаём правила форматирования.
    4. Прогоняем код black'ом.
    5. Чтоб не жать одни и теже кнопки используем pre-commit.
    6. ...
    7. Profit.

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

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

     
     
  • 2.5, Аноним (5), 10:25, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Мне понравилась вся суть продукта в одной картинке. https://mergiraf.org/img/scene_3.png из двух разработчиков эта штука сделала сиамских близнецов.
     
  • 2.11, Аноним (11), 11:40, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Каноникализаторы и editorconfig - не панацея. Он помогает уменьшить число конфликтов от того, что один разраб предпочитает одно, другой - другое, и у каждого редактор настроен по-своему. Но конфликты слияния проистекают не только из этого. Это ОГРОМНАЯ ГОЛОВНАЯ БОЛЬ, когда ты не можешь заапстримить свои патчи, потому что апстрим - чудак. Самый ужас начинается, когда апстрим рефакторит структуру проекта одновременно с рефакторингом кода. В результате все файлы с твоими изменениями превращаются в почти сплошной конфликт слияния.


    ЗАПОМНИТЕ, ДЕТИ, ПЕРЕМЕЩЕНИЯ ФАЙЛОВ - СТРОГО В ОДНОМ КОММИТЕ, ЧИСТО ПОД ПЕРЕМЕЩЕНИЯ, А ИЗМЕНЕНИЯ ХОТЬ ОДНОГО СИМВОЛА КОДА - В ДРУГОМ.

     
     
  • 3.16, Аноним (5), 12:17, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Если проект нормально административно устроен все перемещения делает один человек он же по совместительству самый главный человек. Все остальное делают остальные люди и слушают что говорит главный человек. Все остальные перемещатели в очереди на прием к главному.
     
     
  • 4.62, Аноним (62), 19:49, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    какие ещё остальные люди? все остальные рабы делают всё остальное
     
     
  • 5.73, Аноним (5), 09:52, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Наконец то ты понял суть современного общества.
     
  • 3.26, fuggy (ok), 13:41, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А какая разница в скольких коммитах сделано перемещение и рефакторинг. Ведь мержим мы всё равно с итоговым результатом. То есть конфликты будут уже на этапе с перемещением.
     
     
  • 4.38, Аноним (38), 14:28, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Если файл просто 100%-перемещён, конфликтов именно с коммитом перемещения не будет, git поймёт, что изменение нужно перенаправить на другой файл. Когда же перемещение и рефакторинг свалили в кучу, то получаем дифф, где одна сторона /dev/null, и иди сам ищи, куда переместили. И вручную всё сливай.
     
     
  • 5.54, Аноним (54), 16:35, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А если не гит?
    или эта поделка только и гитом работаь умеет?
     
     
  • 6.59, Аноним (59), 18:16, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > А если не гит?

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

     
     
  • 7.71, Аноним (71), 08:31, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Мозилла с вами не согласна.
     
     
  • 8.74, Аноним (5), 09:54, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Пора проснутся мозилла давно перешла на гит с меркуриала ... текст свёрнут, показать
     
     
  • 9.87, Аноним (87), 15:17, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Да Открываем свежий баг, https bugzilla mozilla org show_bug cgi id 1933053 ... текст свёрнут, показать
     
  • 8.96, Аноним (96), 18:18, 16/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Один проект оставшийся на недо-vcs никому не интересен Просто он не будет польз... текст свёрнут, показать
     
     
  • 9.105, Аноним (105), 13:25, 17/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А вот в этом ты ошибся, в обеих пунктах Сам, небось, с Файрфокса сидишь Если ... текст свёрнут, показать
     

  • 1.3, Аноним (3), 10:20, 14/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    Дочитал новость до "развивается проект mergiraf. Этот написанный на Rust инструмент (занимает 21 MiB!)" и прекратил чтение.
     
     
  • 2.6, Аноним (6), 10:27, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Да, на дискету не поместится. Плак плак.
     
     
  • 3.30, adolfus (ok), 13:52, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Причем тут дискеты? Программа всегда загружается в физическую память и всегда там занимает места больше, чем на диске. Соответсвенно, всем остальным зело плохеет и все притормаживается из-за ужимания буферов и возросших в связи с этим обращений к дискам.
     
     
  • 4.33, Аноним (6), 14:01, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Факт 1. У разработчиков обычно очень неплохое железо в связи с высокими зарплатами. Лично у меня 64 гига оперативочки, про OOM забыл как страшный сон, у меня весь рут "/" в tmpfs.

    Факт 2. Сабж висит в оперативке не 24/7, а во время мерджей, что происходит от силы 5 минут в день.

    Мой вопрос тебе: ты оперативку брал для того, чтобы любоваться ей, или чтобы использовать ее на максимум? Ты же надеюсь не покупаешь сервиз лишь для того, чтобы круглый год он пылился где-то на полке, а потом на новый год БОХАТО отведать оттуда оливье?

     
     
  • 5.35, Аноним (5), 14:16, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    А причем тут зарплаты. Нормальным разработчикам железо покупает работодатель. И уж нормальные разработчик как то обходятся без сабжевых костылей просто нормально организовывая работу.
     
  • 5.39, Аноним (38), 14:30, 14/12/2024 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
  • 5.57, Аноним (57), 18:03, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >У разработчиков обычно очень неплохое железо в связи с высокими зарплатами. Лично у меня 64 гига оперативочки

    Ну это про корполративных разработчиков проприетарщины. А если раработчик опенсорсного проекта?

    >у меня весь рут "/" в tmpfs

    Тут напрашивается известный в интернетиках мем: "Чегооооо, .ля?!"
    Проблема курицы и яйца, однако.

     
     
  • 6.94, Andrey (??), 17:13, 16/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    64Гб стоят чуть больше 100 долларов. Если опенсорсный проект хоть кому-то нужен, то разработчик может и донатами набрать, раз уж у него так туго с деньгами.
     
     
  • 7.104, Аноним (105), 13:21, 17/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Опенсорсный проект, за который пользователю хоть цент платить придётся, никому не нужен. Так что тот дебил, который написал программу, требующую от каждого пользователя по "$100" (на самом деле намного больше, и есть вещи, которые ты даже за лимон не купишь), не наберёт донатов даже себе на кофе.
     
  • 5.79, InuYasha (??), 11:46, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > лично у меня 64 гига оперативочки, про OOM забыл как страшный сон

    Вот уж похвастался - так похвастался :D
    Ну, давай и я тогда тоже - 256ГБ в проде и ООМ раз в 12 часов (в среднем). Сколько Жабу ни корми - всё равно мало будет.

    А для себя пишу софт, которому и 8МБ за глаза будет.

     
     
  • 6.95, Andrey (??), 17:23, 16/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Одно дело для себя писать, другое дело для большой аудитории.
     
  • 6.109, Котофалк (?), 01:23, 18/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Айтишников жаба не душит, а ставит на деньги. Прогресс неумолим.
     
  • 4.91, morphe (?), 21:55, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    В память программы паммятся в CoW режиме, соответственно за вычетом релокаций большая часть программы у тебя может загружаться лениво с диска, а раз у нас тут статическая линковка - областей памяти с релокациями тут минимум, а потому потребление тут будет меньше чем если бы эти 20мбайт были разбиты на несколько shared objectов
     
  • 4.97, Аноним (96), 18:28, 16/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, не всегда и не всегда Программа mmap ится, при этом не обязательно все стр... большой текст свёрнут, показать
     
  • 3.49, Аноним (49), 15:46, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Он и на болванку не поместится, если со всеми ржавозависимостями.
     
  • 2.12, Аноним (11), 11:48, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Вы уловили мой сарказм В оригинале там было занимает целых 21 MiB На само... большой текст свёрнут, показать
     
     
  • 3.13, Аноним (11), 11:53, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Проект активно развивается.

    Я имею в виду, что ну вот вы перепишете проект на си. А дальше что? Разрабы запилят ещё десяток функций и перелопатят архитектуру. И вам придётся всё это портировать. Причём уже не нейросетью, а почти вручную, чтобы не превратить историю коммитов уже ВАШЕГО проекта в говно.

     
     
  • 4.31, Аноним (57), 13:54, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вы один из разработчиков?
    Скажем так, если ваш проект будет успешно собираться посредством gccrs, то портировать его я ни на что не буду.
     
     
  • 5.41, Аноним (38), 14:36, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, просто недавно провёл кое-какие эксперименты по компиляции программ без cargo (своих, без сторонних крейтов, с использованием сишных либ). Нет, gccrs нормально не соберёт вообще ничего. На данном этапе gccrs - это просто бесполезный хлам, который не может собрать тривиальнейшие программы по типу hello worldа. Я даже специально максимально её изувечил, насрав на все гарантии раста и обмазав unsafeом (в нём нет стандартной библиотеки раста - сюрприз! так что приходится на libc писать, с полным unsafeом, и и то не хватает фич (в расте всё очень сильно завязано на поддержку комилятора) даже для этого), чтобы gccrs компилировал. А он не компилирует.
     
     
  • 6.51, Аноним (57), 15:52, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Я не имел ввиду, вот прямо сейчас. Когда в GCC заявят, что теперь готов, хотя бы для сборки модулей ядра, когда они на Расте появятся, и хоть каких-то юзерспейсных библиотек.
     
  • 3.34, adolfus (ok), 14:15, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Если выкинуть всё дерево статически-линкуемых зависимостей, заменив его на сишн... большой текст свёрнут, показать
     
     
  • 4.44, Аноним (38), 15:08, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    1 если А вы не используйте крейты - эта экосистема заточена под bloatware Она... большой текст свёрнут, показать
     
     
  • 5.89, Аноним (-), 16:57, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Сишные либы неспособны даже структуры данных экспортировать Например, динамичес... большой текст свёрнут, показать
     
     
  • 6.93, Аноним (93), 04:58, 16/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не передёргивайте Когда я сказал проблема апстрима и мейнтейнеров , я имель в ... большой текст свёрнут, показать
     
  • 3.98, Аноним (96), 18:34, 16/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Программы должны от этого сильно похудеть.

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

     
  • 2.29, Аноним (-), 13:49, 14/12/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.68, Аноним (68), 00:52, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Кстати, интересно. Текст новости, похоже, целиком написан нейросетью. Может и сама утилита тоже?

    В весёлые времена живём!

     
     
  • 3.70, Аноним (71), 08:30, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Текст любой новостной статьи написан нейросетью. Ещё в 1800-лохматом году так было.
     

  • 1.7, Аноним (7), 10:47, 14/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Сильно не хватает такого инструмента. Постоянно конфликты в тех же resx файлах. Хотя там простейший xml.
     
     
  • 2.37, adolfus (ok), 14:23, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Сильно не хватает такого инструмента. Постоянно конфликты в тех же resx файлах.
    > Хотя там простейший xml.

    xml специально придуман, чтобы осложнить программистам жизнь и раздуть код, как и его младший брат -- json.

     
     
  • 3.53, Аноним (5), 16:32, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Чем заменить плейнтекстом? Или нейросетями файлы читать?
     
     
  • 4.55, Аноним (54), 16:36, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    а чатгпт закинул свой файл и попросил отформатировать.
    чем не  "я у мамы погромист"?
     

  • 1.8, nilsys (?), 11:20, 14/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    > ... примером чрезвычайно сложной системы. Сложные системы имеют одно общее свойство - они сложны - и вы не можете ожидать, что нужное сложное поведение возникнет само собой, случайно

    чего?

     
     
  • 2.10, Аноним (10), 11:33, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Сайт OpenNET - не сайт сугубо для программистов, а об СПО в общем, для дилетанто... большой текст свёрнут, показать
     
     
  • 3.22, НейроАноним (?), 12:36, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Да вы что У вас в голове полный бардак Сайт OpenNET 8211 это не просто сайт... большой текст свёрнут, показать
     
     
  • 4.23, freehck (ok), 13:03, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Сайт OpenNET – это не просто сайт для каких-то бездельников или дилетантов!

    Отличная формулировка. То есть, всё-таки для бездельников и дилетантов. =)

     
     
  • 5.36, Я не Аноним (?), 14:20, 14/12/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.40, adolfus (ok), 14:31, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Системы контроля версий - это не инструмент сугубо для программистов. Один мой
    > знакомый документы ворда в них версионирует. Всё лучше, чем папочка с
    > десятком файлов и потенциалом для путаницы.

    Интересно, как бинарники можно в систех управления версиями (СУВ) хранить. Даже если .docx или .odt развернуть, то получится каталог из нескольких xml и бинарников, которые на сегодня никто из СУВ адекватно обрабатывать не умеет. Ну или я проспал лет десять-пятнадцать и за это время кто0-то что-то напсал на эту тему.

     
     
  • 4.50, Аноним (50), 15:48, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Очень просто. Они хоть и не пребазируются и не диффятся, но как бекапы с меньшим геморроем - сойдёт.
     
     
  • 5.52, adolfus (ok), 16:09, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Очень просто. Они хоть и не пребазируются и не диффятся, но как
    > бекапы с меньшим геморроем - сойдёт.

    Ну разве только для этого. Я пару лет назад, когда была одна работа, связанная, в том числе и с разработкой кучей программной документации по GOST19, использовал git для .odt. Но для большего удобства (для diff) дополнительно делал с помощью odttotxt для каждого .odt текстовый файл, а сам  .odt заворачивал в tar, чтобы метаданные не потерять. Плюс все рисунки отдельно от .odt рядом держал. Каждый коммит сопровождался сообщением. В принципе, работало более менее. Но если бы был нормальный xmldiff, то все было бы гораздо проще. Увы.

     
     
  • 6.66, Аноним (66), 22:49, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > odt заворачивал в tar, чтобы метаданные не потерять.
    > то все было бы гораздо проще. Увы.

    Может, чуть проще будет с git-cache-meta или metastore. А может и нет.

     
  • 6.78, fuggy (ok), 10:15, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не обязательно plain text трансформацию хранить как отдельный файл. Можно в конфиге тот же odttotxt драйвер указать и тогда при команде git diff они будет корректно отображать нужный diff.
     
  • 5.77, fuggy (ok), 10:12, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Они легко дифятся, достаточно прописать в git конфиге драйвер odt2txt. Но вот не мержаться, потому что бинарные файлы не имеют понятия строк и не получиться смержить просто объединив две последовательности. Поэтому документацию, если с ней предстоит много работать лучше хранить в markdown в репозитории. В случаи если всё же нужно много работать с бинарными файлами, то тут используем принцип из прошлого: лочим файл, чтобы никто другой в это время не мог с ним работать. Конечно git лочить не умеет, но вот git lfs что-то подобное может.
     
     
  • 6.86, Аноним (87), 15:08, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Доку вообще лучше иметь в markdown виде. Я первым делом когда имею дело с докой в других форматах конверчу её в markdown. Так удобнее прямо в текстовом редакторе с ней работать.
     
  • 4.100, нах. (?), 23:39, 16/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ты больше проспал.

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

    Делала именно это - diff/merge офисных форматов.
    (естественно - в человекочитаемом виде а не вот тебе два xml с блобами - на какой сам сядешь, на какой мать посадишь?)

     
  • 2.42, Аноним (-), 14:50, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Чего чего Пора повышать свой уровень образования, доводя его до минимально необ... большой текст свёрнут, показать
     
     
  • 3.43, Аноним (43), 15:02, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Надо быть не "айтишником", а человеком со здравым смыслом и логикой.
    Программа не должна быть хаотичной системой. В ней не должна происходить самоорганизация. Написание кода - это проектирование и управление сложностью происходит как во время него, так и в процессе написания реализации. Применяя логику и здравый смысл всегда можно поддерживать сложность на приемлемом уровне.

    >непонятен текст рассчитанный не на PhD в Computer Science, а на заурядного хомяка от IT

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

     
     
  • 4.46, Аноним (46), 15:37, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Лет через 10 ты

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

     

  • 1.14, Аноним (11), 12:05, 14/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ещё забыл написать в статью парочку своих мыслей тоже уже написанных, но потеря... большой текст свёрнут, показать
     
  • 1.18, Анониссимус (?), 12:27, 14/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Звучит интересно! Использовать это я, конечно, не буду...
     
     
  • 2.19, eugener (ok), 12:29, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    вот-вот, я тоже с интересом прочитал и то же самое подумал.)
     

  • 1.21, НейроАноним (?), 12:32, 14/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    - Опубликован релиз проекта Mergiraf 0.4 с поддержкой трёхстороннего слияния и разрешения конфликтов в Git.

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

    - В новой версии добавлена поддержка Python, TOML, Scala и TypeScript, а также оптимизация производительности.

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

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

    - Современные системы контроля версий, такие как Git, организуют snapshot-ы в виде ориентированных ациклических графов, что помогает создавать семантически значимую историю проекта.

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

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

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

     
  • 1.24, Вы забыли заполнить поле Name (?), 13:41, 14/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Когда в описании к софтине начинает объясняться почему она такая сложная, то кажется, что дальше можно не читать.
     
  • 1.27, Аноним (43), 13:43, 14/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В разрабатываемой ветке устраивают параллельную реальность, а потом она не мержи... большой текст свёрнут, показать
     
     
  • 2.48, Аноним (50), 15:45, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Слушай, вот ты контрибьютер. Ты сделал изменение для себя. Послал Pull Request. Мейнтейнер-судак тебя игнорил 5 лет, а потом закрыл твой Pull Request со словами "мне лично - не нужно". При этом он продолжал развивать проект у себя в репозитории, постоянно gkjlz rjyakbrns. АО каких процессах тут речь идёт?
     
     
  • 3.65, Аноним (43), 22:14, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Инструмент позволит легче мержить апстрим в свой форк? До первых структурных изменений в апстриме, но возможно. Все равно это капля в море по сравнению с корпоративной разработкой, где веткобесие принимает гротескные формы.
     
     
  • 4.69, Аноним (71), 08:27, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Проблемы в Microsoft - это личные проблемы разработчиков, решивших связать себя с Microsoft. А также компании и их менеджемента. Мы тут причём?

    >До первых структурных изменений в апстриме, но возможно

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

     
     
  • 5.88, Аноним (43), 16:52, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Корпоративная разработка - это в принципе любая коммерческая Даже в проекте с т... большой текст свёрнут, показать
     

  • 1.32, fuggy (ok), 14:00, 14/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Это новость или словоблудие. Какие-то рассуждения с введением в историю тулзов. Этому не место в новости. А вот примеров как включить и настроить или полный список языков и возможность добавить свой язык можно было добавить.

    > слияние же - это почти как rebase, просто структурирует граф коммитов по-другому, в результате чего им становится неудобно манипулировать, поэтому от слияний стараются отказаться в пользу rebase-ов

    Сильное заявление. Разводить холивар я не буду, но у ребейзов свои проблемы, потому что это переписывание истории. Я понимаю почему для лучшего применения этой тулзы хорошо когда изменения идут одно за одним. Почему бы тогда не применить Patch theory и было бы отличное решение из смеси Darcs с математическим подходом на основе популярного git.

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

     
     
  • 2.45, Аноним (50), 15:37, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >у ребейзов свои проблемы, потому что это переписывание истории

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

    >Я понимаю почему для лучшего применения этой тулзы хорошо когда изменения идут одно за одним

    Да не только этой. Иногда бывает удобно превратить часть истории (а иногда - и всю!) в кучу patch-файлов, отредактировать их скриптами, после чего эту кучу patch-файлов за-git-amить. Если у вас коммиты не выстроены в линию, то история будет переструктурирована.

     
     
  • 3.82, fuggy (ok), 14:00, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ребейзы обманывают. Если разработчик написал строки +A +B, после ребейза может превратиться в несвязанные -B +C. И это всё попадает в мастер. В то время как мерж его видно сразу.
     
  • 2.47, Аноним (50), 15:41, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Когда возникает конфликт при мерже это уже звоночек что нужно обратить внимание и вчитаться в код. Тут же это будет происходить тихо автоматом, а эвристики могут и ошибаться.

    Да, меня, как автора новости, это тоже волнует слегка. Но несильно. Ты и для line-based алгоритмов слияния сможешь влёгкую придумать случай, когда код сломается. От перебазирований и слияний это никого не останавливает. Этот риск просто принимают. Указанный же инструмент дополнительного риска не несёт: он фактически просто делает слияние в конфликтных регионах, которые на самом деле не конфликтные, а просто алгоритм на основе строк слишком тупой для них.

     
     
  • 3.90, Аноним (-), 19:42, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Я позволю себе не согласиться, пускай и чисто умозрительно у меня нет конкретны... большой текст свёрнут, показать
     
     
  • 4.99, Аноним (99), 21:14, 16/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    1 Для этого нужно серьёзное финансирование 2 Как я уже сказал, многие конфлик... большой текст свёрнут, показать
     
     
  • 5.107, Аноним (-), 22:14, 17/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем Для этого не потребуется какого-то особого железа, кордвадуо справится ле... большой текст свёрнут, показать
     

  • 1.58, YetAnotherOnanym (ok), 18:04, 14/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Мержей быть не должно.
    Вообще.
    От слова "совсем".
    То есть абсолютно.
     
     
  • 2.64, xsignal (ok), 21:50, 14/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    100% Мержи - источник хаоса.
     
  • 2.72, Аноним (72), 08:35, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    fix> YetAnotherOnanym быть не должно.
    Вообще.
    От слова "совсем".
    То есть абсолютно.
     

  • 1.63, xsignal (ok), 21:00, 14/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Что-то как-то слишком всё сложно, "трёхмерные шахматы" какие-то...
     
     
  • 2.76, Аноним (5), 10:02, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Что-то из разряда смотрите как я могу.
     

  • 1.80, InuYasha (??), 11:48, 15/12/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Пишите сразу, в начале статьи, пожалуйста, что "здрасьте - на Расте". А то время только зря потрачено и надежды разбиты.
     
     
  • 2.81, Аноним (81), 13:35, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Такие инструменты только на memory safe и нужно писать
     
  • 2.83, fuggy (ok), 14:10, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не всё ли равно на чём внутри написано. Если есть бинарник, ты же не собираешься всё компилировать сам. А вот с python или go гораздо хуже. Там начинается веселье поставь pip, поставь go потом качай библиотеки сам которых не хватает.
    Не говоря уже про nodejs где цепочка может быть многоуровневым, поставь npm, через него поставь yarn, через него поставь webpack, ой на этой неделе вышел новый инструмент vite поэтому ставь его.
     
     
  • 3.85, Аноним (87), 15:05, 15/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, с питоном как раз проще всего. Там библиотеки ВСЕ динамические, статической линковки просто не существует в принципе (существует "вендорирование" - аналог включения чужого проекта в своё дерево исходников, за такое надо из профессии с волчьим билетом гнать), поэтому в большинстве случаев достаточно одного git-репозитория проекта, и одного git-репозитория с зависимостью из числа тех, что уже не были установлены раньше. Goвно же имеет ту же модель, что и Cargo, Bazel и npm.
     
     
  • 4.102, Аноним (102), 09:44, 17/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вендорирование возникло из-за требований к повторяемости сборки. А как ты повторишь сборку обычного проекта, если автор leftpad свой проект удалил, заблокировал или вставил постороннюю функциональность.
     
     
  • 5.103, Аноним (105), 13:18, 17/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А я хочу именно НЕ-ПОВТОРЯЕМОСТЬ, когда Я ЛИЧНО контролирую зависимости, а не автор пакета за меня решает, какой блоатварью меня накормить. Кому нужно обеспечить для своего пакета "повторяемость" - могут её легко достичь без вендорирования, просто записав все версии всех зависимостей в requirements.txt, который, к счастью, необязателен. Кому она нужна из пользователей - могут просто поставить всё в виртуальное окружение (всё равно для прода вся эта "повторяемость" абсолютно неприменима и годится только для игр вида "в повторяемой сборке тесты проходят - а мы иного и не обещали, wontfix, notabug").
     
     
  • 6.106, Аноним (-), 13:35, 17/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > А я хочу именно НЕ-ПОВТОРЯЕМОСТЬ, когда Я ЛИЧНО контролирую зависимости, а не автор пакета за меня решает, какой блоатварью меня накормить.

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


     
  • 6.108, Аноним (-), 22:21, 17/12/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ваше мнение очень важно для нас Тот кто пишет код, тот и решает как ему удобн... большой текст свёрнут, показать
     

  • 1.92, Аноним (92), 23:30, 15/12/2024 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +1 +/
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру