Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Организация GIT для небольшой команды разработчиков.

#git


Доброго дня всем!
В Сети много ссылок на настройку GIT, как локально, так и с онлайн-хранилищами. Но
я нигде не нашёл рекомендаций по правильной организации такого хранилища. Итак, имеем
небольшую (3-5 человек) команду разработчиков (на C++/Qt). На компьютерах настроена
переменная окружения (например, prog_root), внутри которой есть:

Папки разработчиков (bill,bob,john), внутри которых каждый разработчик хранит свои
программы (папка разработчика является корневой для проектов Qt Creator).
Папка include, в которой хранятся заголовочные файлы (и .cpp) для совместно используемых
программных модулей. Внутри неё тоже есть папки (common, math, exceptions etc.), в
которых хранятся <библиотеки>, относящиеся к соответствующей предметной области.
Папка lib, в которую складываются сгенерированные статические библиотеки.
Папка build, в которой генерятся исполняемые файлы.
Папка doc, в которой хранится документация
Прочее.

Каждый разработчик пишет как отдельные программы (обменивающиеся информацией по TCP/IP,
через разделяемую память, через перенаправление потоков ввода-вывода или ещё как),
так и библиотеки, используемые другими программистами. Исходники библиотек хранятся
в include и могут включаться в несколько проектов сразу.
В настоящее время обмен свежими версиями происходит так: выпустив важное изменение
и отладив на своей машине, разработчик говорит остальным: "заберите у меня такой-то
файл", те забирают и копируют на свои машины. Иногда, когда отладка возможна только
на специфических данных или оборудовании, доступных только на объекте, разработчик
едет на объект, отлаживается и привозит обратно отлаженную версию, которую раскидывает
себе и предлагает забрать другим разработчикам. Синхронизация версий, например, на
рабочем компе и на ноутбуке (поработать на дому) осуществляется собственными силами,
нецентрализованно. Разработка кросплатформенная, поэтому у некоторых разработчиков
есть копии prog_root под Windows, Linux и QNX.
Соответственно, есть желание настроить GIT для того, чтобы свести "размазанную по
компьютерам разработчиков" актуальную версию в единое хранилище. Что включать в проект
GIT? Если делать по отдельному проекту на программу, библиотеки будут дублироваться,
и при переключении на другой проект можно "засосать" устаревшую версию, выложенную
при  очередном коммите другим разработчиком. Если по проекту GIT на смысловую единицу,
то в одну программу будет входить несколько GIT-проектов. Это правильно? Или надо вообще
объединить всё в единой единице GIT?
Если такая тема где-то уже поднималась, буду рад ссылочке. Если нет - рекомендациям
по организации хранилища.    


Ответы

Ответ 1



Как обычно делают. На каждый проект делается свой проект. Для библиотек - свой. Потом библиотеки подключаются как подмодули к основным проектам. Почему так? Очень часто бывает, что один разработчик пилит библиотеку, а другой использует. И вот разработчик библиотки запилил новый, красивый интерфейс, но сильно не совместимый с старым (это может быть по разному, к примеру, использовалась библиотека не совсем правильно, недокументировано, а в новой версии это прикрыли). Или другой случай, новая библиотека вышла, проекты подтянули для них и через месяц забыли. А потом оказалось, что нужно посмотреть старый-старый код. И что, гадать, какие версии библиотек использовались? Подмодули позволяют коммитить в основной проект версию вложенных проектов и все будет красиво. Более того, разные разработчики могут использовать разные версии (коммиты) библиотеки. В Вашем случае наверное вначале можно сделать просто один подпроект - библиотека, а потом, по мере надобности разделять. Теперь дальше. Для удобной работы с кодом, лучше завести github или bitbucket. Последний хорош тем, что позволяет делать приватные репозитории для небольших групп бесплатно. Если код очень сильно секретный и выложить во внешний мир никак нельзя - поставьте себе личный сервер в офис с установленным gitlab. В интернете гуглиться много готовых инструкций, вот к примеру для ubuntu + gitlab. Что хранить в репозиториях. Тут ответ очень прост. Новый разработчик (или старый, который потерял свой комп) должен установить инструменты (компиляторы, ide, git), потом слить репозиторий и начать работать. Отсюда вывод - в репозитории не нужно хранить всякие *.o, *.bak или другие бинарники, которые и так можно сгенерировать. Если наличие некоторых бинарников жизненно важно для начала работы и они могут быть скомпилированы - просто добавьте батник/bash файл/perl/python файл который все сам соберет. Также многие не рекомендуют включать в репозиторий конфиги среды разработки. Они у каждого свои. Но можно добавить "дефолтные" и обновлять их только по общему согласию.

Комментариев нет:

Отправить комментарий