LINUX.ORG.RU

Git или perforce или ещё чего

 , ,


0

2

Есть один огромный репозиторий в Гите в котором лежит куча проектов (с, с++, simulink). При этом там адова куча генеренного кода, тулов для генерации, библиотек, драйверов итд. Генеренного код складывается в репозиторий, т.к. не у всех есть инструментарий для его генерации. Это все эмбедерское. Если попилить это все на сабмодули как надо, то глубина вложенности будет 7-10 и сабмодулей будет штук 500. Что пугает и больно в эксплуатации. Альтернатива использовать perfors с воркспейсами и для каждого проекта выбирать только нужные ему папочки. Есть другие варианты?

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

Ну так это и есть «Свистелки и перделки. А в гите их нет.».

Да ба, даже GUI-клиента нормального под Windows/Linux нету забесплатно. GitKraken, SmartGit стоят деньги.

IMHO ядро линукса это простой проект. Там один язык. Там не очень много файлов (но много бранчей). Там не лежат бинарный файлов вроде asset'ов какого-нибудь The Witcher.

Вот почитайте, если есть время:

Our target use case is the Windows repo, which has over 3 million files in the working directory, totalling 270GB of source files. That’s 270GB in the working directory, at the tip of master. To clone this repo, you would have to download a packfile that is about 100GB in size, which would take hours. And once you’ve succeeded in cloning it, local git operations like checkout (3 hours), status (8 minutes), and commit (30 minutes) would still take way too long to run, because all of those commands are linear on the number of files.

(c) https://docs.microsoft.com/en-us/azure/devops/learn/git/gvfs-design-history

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

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

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

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

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

Блин, да это не проблемы сабмодулей или репозитария. Сабмодуль - это всего лишь symbolic-link на стероидах, не более.

В «моем» проекте используется десяток зависимых проектов. Три - в виде сабов, которые активно разрабатываются. Еще парочка, из которых генерится код, они совсем не связаны в гите, они связаны в CI.

Исходники активных проектов-сабов примерно по 200МБ каждый (это столько занимают bare-репы). Собирается всё-всё это около часа, все тесты еще пару часов. Полностью тесты отрабатывают часа 4. И это только один мой продукт на общем коде.

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

Большой проект - это головная боль да. Но при чем тут гит, не нужно переваливать ответственность. Декомпозируй!

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

Тогда полное дерево исходников очень помогает.

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

См. выше Git или perforce или ещё чего (комментарий)

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

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

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

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

Вот как раз perforce помогает иметь один каталог со всем кодом. Ну и отсутствие .git помогает в поиске - нет ложных срабатываний.

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

В перфорсе это был бы один депот с тремя разными workspace. Один включает все три части, второй Go и Lua, третий C++ и Lua. При этом при изменениях в Lua - тригерятся сборки и С++ и Go, а если в Go, только сборка Go.

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

Спасибо за ликбез. Я perforce видел в 2008 году.

То, что вы описали, это действительно круто.

И по моему скромному мнению, как минимум с точки зрения vehicle HMI, гораздо более похоже на феррари, а то что было у нас, на телегу.

Может быть нужно просто сделать накладку perforce над git? Или иначе: сделать perforce, который внизу будет использовать git и все будут счастливы? Или иначе: сделать накладку которай будет реализовать часть того, что умеет perforce, что реализуемо в git.А может что-то такое существует? Как google repo?

В любом случае дорога кажется туда.

Git это тупой трэкер контента (с) Линус. Значит вокруг него должно появиться еще множество кода, чтобы он перестал быть keyboard-unfriendly.

dissident ★★
()
Последнее исправление: dissident (всего исправлений: 1)

Надо было сделать 10-15 реп, в репах только код. И каталог build вне реп, на одном уровне. Вот в build и компилить исходные коды, после компиляций собирать в «артефакты» (бинарные либы) и распространять их уже нужным разрабам. Как распространять - другой вопрос, имхо, гит для распространения бинарников - не очень, но это лучше, чем в зипки паковать, докер же работает по типу git+zip, можно всякие squashfs использовать, докер контейнеры, кстати, тоже неплохая идея.

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

Там ещё из хорошего, что коммит будет один. А не три.

vromanov ★★
() автор топика

Большое спасибо всем в тренде! Очень полезное получилось обсуждение.

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

Почитал тредик. Перфорс бы решил проблему. Но он за деньги.

vromanov ★★
() автор топика

При этом там адова куча генеренного кода, тулов для генерации, библиотек, драйверов итд.

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

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

SDK пользователи ставят (выкачивают) и все генерится при сборке.

Это все эмбедерское.

Как это меняет суть дела?

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

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

vromanov ★★
() автор топика

не понятно в чем вопрос - гит не справляется с сабмодулями или чем заменить перфорс?

Вы в курсе, что сабмодули это позавчерашний день? Может имеет смысл ответить на вопрос чем заменить сабмодули?

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

Не знаю, этот ли вопрос наиболее интересует автора трэда, но мне например инетересно. Я даже выше привел две ссылки:

Первая поинтереснее выглядит. Вот тут https://www.youtube.com/watch?v=4XpnKHJAok8 Линус убеждает работников Google, что Perforce говно. Обладая даром убеждения, видимо, ему это удалось.

Когда же работники опомнились и осознали, что Git тоже говно, то они написали вокруг него Perforce (решив в частности проблемы сабмодулей).

PS Это конечно только мое мнение.

PPS А чем еще можно заменить сабмодули?

dissident ★★
()
Последнее исправление: dissident (всего исправлений: 2)

Те, советуют (или предполагают, что сойдет) git-subtree, subrepo, perforce, могли бы привести юзкейз, как это все должно работать? В чем будет заключаться преимущество перед submodules? Что такое workspace в perforce, наглядно? Спасибо, очень интересно ознакомиться бы

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

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

  • Library1
    • Version_1
    • Version_2
    • Head
  • Some Componenet
    • Version_1
    • Version_2
    • Head
  • Application
    • Version_3
    • Version_4
    • Version_4.1
    • Version_4.2
    • Head

В ворспейсе прописывается что ты хочешь получить на локалном диске. Простейгий случай - получаешь все что выше. Более сложный случай

  • Library1/Version_1 -> Library1
  • Some_Componenet/Version_2 -> Some_Componenet
  • Application/Head -> Application

Это что-то типа sparse checkout из гита с возможностью переименовывать каталоги. Т.е. тут я просто собираю набор библиотек указывая их версии. надо будет собрать сдругеи версии - меняю воркспейс.

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

А если я поменял что-то в «Library Version_1», «Library Version_2», что влечет за собой изменения в «Some Component Version_2» и «Application Head» то это будет один коммит? Что же случится если я откачусь только в «Application Head» один коммит назад? Все прочее («Library Version_1», «Library Version_2», «Some Component Version_2») автомагически так же откатяться? Т.е. информация о «submodule hash» «зашита» в коммите? Т.е. коммит содержит изменения во могих бранчах/каталогах/сабмодулях (как звал так звал)? Я правильно понял?

Если так, то это чудо расчудесное. За это можно даже простить если оно медленное.

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

Комиты сквозные. т.е. в реальности они накладываются на полный репозиторий. А через через воркспейс они либо видны полностью, либо частично (если они затрагивают и входящие и не входящие в воркспейс файлы), или не видны полностью (если нет файлов входящих в воркспейс). Комиты сплошные с нумерацией на уровне репозитория. Поэтому откат на какой-то комит откатывает весь репозиторий на этот коммит. Но есть возможность из коммита сделать «Undo changes». Будет сделан комит с обратным дифом из изходного комита

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

Сабмодуль - это всего лишь symbolic-link на стероидах

Скорее на бензодиазепинах.

dissident ★★
()
Последнее исправление: dissident (всего исправлений: 1)
8 февраля 2019 г.

Подниму тему. Так пока ничего другого и не придумали. Ищем в SPb человека, который бы этим всем занялся.

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