Как мы управляем версиями (Git+1C)


Набор инструментов для автоматической разборки внешних обработок при помещении в git для управления и контролем версий.

На самом деле, поиск инструментов, которые удовлетворяли бы некоторым базовым требованиям велись уже давно. Но решение всегда ускользало от нас, мы участвовали в большом количестве вебинаров, встреч, обсуждений и дело не сдвигалось с места. После участия в infostart-ивенте к нам на глаза попал очень интересный проект Евгения Сосны (github). 

Суть проекта Евгения заключается в том, что при выполнении команды «git commit» обработкиотчеты автоматически распаковываются и добавляются в репозиторий. Соответственно можно смотреть версии и изменения модулей и множество других полезностей. Вроде все что нужно, но не тут то было. По сути мы сделали свой fork с блекджеком и … 

 

Какие проблемы были решены:

  • Как оказалось нормально распаковываются только обработки для обычного приложения, а у нас вся работа с УФ. Посидев с бубнами и разобравшись с V8Reader — внесли небольшие изменения;
  • Скорость парсинга была не ахти. Решено было написать новую обработку за основу взяли часть кода, оптимизировали, лишнее выкинули по дороге дописали что-то свое;
  • Последней неприятностью было то, что при добавлении файлов распаковки (git commit) они всем скопом заменялись и было сложно сразу понять что же у нас изменилось, хотя по своей сути изменялось 1-2 модуля из 40. Тут на помощь пришла 1С 8.3 с встроенными функциями хеширования. Перед записью файлов модулей мы начали сверять их хеши (по алгоритму SHA-1) и записывали только не совпадающие, а так же удаляли те модули которых уже в обработке нет.

Состав архива:

 

Скриншот куда это нужно положить чтобы оно начало работать:

P.S. Посильную помощь оказывал Андрей Комар, youtube, infostart. Ну и ссылка на наш блог.

Так же отдельное спасибо: Евгению Сосне aka PumbaEO

49 Comments

  1. speshuric

    (0) а почему git, а не hg?

    Reply ↓
  2. pbazeliuk

    (1) speshuric, так сложилось исторически, мы используем git в веб-проектах. Mercurial возможно когда-то, а пока git.

    Reply ↓
  3. Evil Beaver

    Я правильно понял, что только отчеты и обработки из состава конфигурации? А все остальное?

    Reply ↓
  4. pbazeliuk

    (3) Evil Beaver, немного не правильно поняли. 95% наработок у нас хранится во внешних обработках и отчетах, согласно статьи http://infostart.ru/public/169131/. Автоматически распаковываются файлы *.epf и *.erf.

    Добавить поддержку *.cf возможно, но пока для конфигурации мы пользуемся хранилищем конфигурации.

    Reply ↓
  5. Evil Beaver

    (4) Ясно, спасибо. Для большого числа внешних обработок, кстати, можете попробовать мой сравниватель обработок. Не сочтите рекламой, просто подумал, что может быть вам полезен в такой схеме.

    Без стартманей можно скачать тут: https://sourceforge.net/projects/v8reader/files/latest/download?source=files

    Reply ↓
  6. pbazeliuk

    (5) Evil Beaver, а мы кстати рассматривали вашу публикацию ранее. Но цели у нас разные, нам нужно хранить версии, а у вас сравнение обработок.

    Reply ↓
  7. Evil Beaver

    (6) версии у вас хранит git. А чем вы сравниваете 2 коммита epf между собой? Я как раз для этого V8Viewer и делал. Нужно видеть историю изменений и сравнивать коммиты. Что изменилось, почему и т.п.

    Или я что-то не так понял…

    Reply ↓
  8. pbazeliuk

    (7) Evil Beaver, разницу сразу показывает git, да и сервис хостинга bitbucket. Пока только модуль объекта, модули форм и макеты СКД. Но в будущем, надеюсь совместными усилиями сообщества, появится возможность все остальное хранить в более понятном виде, а также добавить возможность «патчинга» и обратной сборки в обработкуотчет.

    Reply ↓
  9. Evil Beaver

    (8) в гите, конечно, должны лежать текстовики. Это более правильный подход, нежели с хранением epf и ковырянием в них сторонними утилитами. Наличие текстовиков позволяет выполнять полноценный merge и вообще, пользоваться «родными» средствами git в полной мере. Смущает меня именно «частичность» хранения. Это лежит в гите, а это — не лежит… как-то польза от такого «контроля версий» кажется мне очень небольшой.

    Хранение версий — это все или ничего. Вот есть коммит, он отмечен как «финальная версия 1.01» В любое время дня и ночи он должен быть получен из гита и собран в боевой режим. Этот коммит обязан быть единым и неделимым. Как у вас это обеспечивается?

    Reply ↓
  10. pbazeliuk

    (9) Evil Beaver, лежат текстовые файлы и соответственно бинарный файл обработки рядом. То что Вы написали мы разрабатываем в свободное от работы время и когда оно будет сказать не могу, но когда будет реализовано в полной мере — тогда и можно начинать делать автоматические ночные тесты и сборки.

    Та часть, которая сейчас есть, как раз нам нужна для ускоренного проведения «Code review» и получения последней актуальной версии. Соответственно отпадает нужда в поисках последней версии обработки по базам тестирования и дерганья программистов с вопросом: «А где последняя ли версия?».

    Reply ↓
  11. vano-ekt

    хранилище — наше всё …

    Reply ↓
  12. speshuric

    (2) Я просто спросил, потому что при работе с windows и с текстами 1С, hg оставил гораздо более приятное впечатление. Никаких проблем с кодировками (в комментариях к коммитам), никаких нагромождений типа MINGW32 в дистрибутиве по умолчанию. Bitbucket умеет и hg, и git, поэтому немного удивился, что git. Но если всё остальное в git, то, безусловно, проще с git работать.

    (11) У хоронилища конфигураций достаточно много недостатков. Это самое хоронилище — одно из главных препятствий к CI на 1С.

    Reply ↓
  13. pbazeliuk

    (12) speshuric, с кодировками да проблема еще та. Возможно в конце недели посмотрим в сторону hg.

    Reply ↓
  14. pbazeliuk

    (9) Evil Beaver, вот например, изображение как проводится «Code review».

    Reply ↓
  15. speshuric

    (11) Ну и чтобы не быть голословным. Списочек того, что не устраивает в хоронилище:

    • Хранилище имеет закрытый формат. Если с ним что-то произошло, то очень часто починить нереально.
    • Хранилище не отслеживает релиз платформы, на которой разрабатывается конфигурация. При параллельной разработке в 2 релизах были случаи крэша хранилища. В git/hg даже просто выгруженной конфигурации, этого можно было бы избежать, так как все изменения прозрачно хранятся в файлах.
    • Хранилище очень жадное до трафика. Причем во всех вариантах (и папка и сервер). А сервер еще и тормозной. В git/hg локальная копия всегда под рукой.
    • Хранилище не имеет веток даже в том виде, в котором они были в допотопном SVN. Из-за этого любая разработка скатывается к нескольким независимым хранилищам (как аналогу веток). Но из-за независимости сразу возникает букет проблем (банально даже с заведением разработчиков).
    • Хранилище не позволяет автоматизировать ничего, кроме выплёвывания cf. Нет даже реагирования на события — как CI сервер должен догадаться, что нужно собирать релиз начать? Да, давайте каждые 5 минут формировать полный отчет по хранилищу и смотреть последнюю версию. Только…
    • Отчеты в интерактивном режиме и в пакетном разные. Причем в пакетном нет части настроек. Из-за этого достоверно доверять отчету нельзя.
    • В хранилище нельзя сделать пользователя, который может захватывать объекты, но не может коммитить. В git/hg вообще не нужны захваты и с локальной копией можно хоть камасутрой заниматься.
    • В хранилище нет аналога pull request.

    Блин, надо остановиться, а то я могу этот список еще долго продолжать 🙂

    Reply ↓
  16. Evil Beaver

    (15) speshuric, не надо продолжать, нервов не хватит)

    Reply ↓
  17. speshuric

    (16) Вот еще не хватало на хранилище нервы тратить 🙂 Какое уж есть. Для 1-3 человек даже более-менее удобное решение. А вспоминая групповую разработку на клюшках (в до-GComp эпоху) так вообще конфетка 🙂

    Reply ↓
  18. zqzq

    Del

    Reply ↓
  19. speshuric

    (18) Ну во-первых суть как раз в «может захватывать объекты, но не может коммитить». Один из сценариев (не единственный) — костыльный «pull request».

    Во-вторых, рабочая база не должна быть связана с хранилищем. Моё мнение — рабочая база только на полной поставке.

    Reply ↓
  20. Evil Beaver

    (17) speshuric,

    вспоминая групповую разработку на клюшках (в до-GComp эпоху)

    Интересно, я один не понял, что означает эта фраза? 🙂

    Reply ↓
  21. speshuric

    (20) Сорри. Клюшки — 1С 7.7, GComp — утилита сборки-разборки файла 1cv7.md в набор текстовых файлов.

    Reply ↓
  22. pumbaE

    (1) у hg неприятная особенность работы с не-латинскими наименованиями файлов, на своей машинке вы этого не заметите, но вот только начнете использовать различные машинки linux, win7, winxp, win8 и при обмене сразу станет проблема с наименованиями файлов. А использовать латинские наименования для внешних обработок, еще и для 1С — это моветон.

    (15) каждых 5 минут, мониторим файл базы данных хранилища.

    Отчеты по истории версий смотрю с помощью toolcd.

    Reply ↓
  23. speshuric

    (22) Про имена проверю, мне кажется, я об эту граблю спотыкался, но она решилась просто. Может что-то путаю.

    Где-то год назад я пытался прикрутить 1С к общему CI-серверу — тоже написал проверку раз в 5 минут (только всё-таки по отчетам хранилища, из-за чего было медленно). Но в процесс не решился встраивать — уж слишком всё наколеночно получалось: тесты отдельными хранилищами, конфа отдельным, программисты c# в своём hg-репозитории.

    Reply ↓
  24. pumbaE

    (23) был плагин для hg решающий проблему (но только для имен, но не для папок) http://mercurial.selenic.com/wiki/FixUtf8Extension , но уже и он не совместим с последними версиями.

    У меня для обработок тестов отдельное хранилище git поднято(тесты используются как внешние обработки), в роли CI выступает jenkins, который ночью запускает получение последней версии из хранилища, обновление эталонной базы, сохраняет вывод протокола обновления. После этого запускаются тесты, результат вывода идет в стандартном junit xml формате, что позволяет jenkins распарсить результат, а мне видеть в результате количество новых успешных тестов, количество регрессий в тестах и т.д., деградация времени выполнения тестов ну и в случаи неудачи ответственным за последние изменения отсылаются письма счастья.

    p.s.: уже можно CI использовать в 1С и это очень удобно.

    Reply ↓
  25. BabySG

    В рамках показанного на осеннем семинаре 2013 — ненужная штука, мягко говоря 🙂

    Reply ↓
  26. pumbaE

    (25) BabySG, ага, только на вопрос «когда в продакшин, а не тест?», не можем с уверенностью ответь даже про 8.3.5 .

    Думаю даже с новым конфигуратором вряд-ли, что-то измениться в плане тестирования. В 8.3 запись тестов появилась, а интерпретация результатов нет, не приняты в 1С автоматические тесты.

    Reply ↓
  27. slavik27

    вещь хорошая,

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

    Reply ↓
  28. pumbaE

    (27) slavik27, где?

    Reply ↓
  29. cleaner_it

    (25) BabySG, не следил. Что там было показано? Крутое хранилище наподобие Git?

    Reply ↓
  30. slavik27

    (28) pumbaE, я уже даже публикацию удалил.

    Reply ↓
  31. Makushimo

    Статья написана как окончание некоего долгого разговора с кем-то, кого мы не знаем. И че к чему и зачем — не понятно.

    Reply ↓
  32. mihast

    (31) Скорее не окончание, а продолжение… Посмотрел блог по ссылке выше — думал там начало диалога — отнюдь…

    Так все-таки hg или git — для UTF-8 ?

    Reply ↓
  33. pumbaE

    (32) mihast, git

    Reply ↓
  34. CratosX

    (29) cleaner_it, ещё круче, но дело возможно даже не 2015-го года, а позже…

    Reply ↓
  35. akomar

    (34) Еще круче, заинтриговали:)

    Ответьте только на один вопрос, внешние обработки можно будет хранить или только конфигурацию?

    Reply ↓
  36. pumbaE

    (35) akomar, eclipse со своими блэк джеками и шл…ми.

    Reply ↓
  37. iceflash

    (36) pumbaE, ага, использовать бы ide eclipse под 1ц было бы очень круто. В данном случае проприетарность 1ц только во вред самой платформы. Уже столько лет прошло, ну возьмите вы достойную ide запросто адаптируете под нужные вещи — и вот уже достойная система разработки

    Reply ↓
  38. ekaruk

    Спасибо. Пригодилось.

    Раньше в виде бинарников в Гите хранила, решила попробовать.

    Достаточно читабельно.

    Заработало «из коробки» без никаких модификаций. Только Питон пришлось доставить.

    (37) iceflash, Ну так сделали вроде уже работу 1С с ide eclipse. Еще годик и рядовым программистам дадут поиграться.

    Reply ↓
  39. pbazeliuk

    (38) ekaruk, посоветовал бы вам использовать precommit1c. К сожалению, в V8Commit есть некоторые ошибки (не разбирается управляемая форма в отчете *.erf с СКД).

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

    Reply ↓
  40. ekaruk

    (39) pbazeliuk, precommit1c пробовала раньше.

    Не получилось настроить.

    Вроде все по описанию, последний вариант с ГитХаба

    Может подскажете, что ему не хватает.

    Reply ↓
  41. pumbaE

    (40) есть такая ошибка, нет проверки на первое помещение файла. Для быстрого fix добавьте в параметры «git commit -n » (коммит без вызова хуков) и потом последующие изменения (можно еще раз в модуле пробел добавить) будут проходить нормально.

    p.s. для таких случаев есть регистрация ошибок, если несложно сделаете плиз.

    Reply ↓
  42. ekaruk

    (41) pumbaE, Спасибо, помогло.

    По регистрации, подскажите, где и как.

    Reply ↓
  43. pumbaE
  44. AlexanderKai
    Посидев с бубнами и разобравшись с V8Reader — внесли небольшие изменения;

    Все эти изменения есть в архиве V8Commit.7z ?

    Reply ↓
  45. pbazeliuk

    (44) AlexanderKai, если вам нужен V8Reader, то вам публикация не подходит. Если нужен инструмент лучше взять — precommit1C

    Reply ↓
  46. eugeniezheludkov

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

    ПС кажись понял все примеры приводятся лишь для 8.3 ? там можно .cf обратно собрать в пакетном режиме

    Reply ↓
  47. vbuots

    Не могу исправить ошибку.

    Windows 8.1 x64

    python 3.3

    Git-1.9.5-preview20141217

    Reply ↓
  48. h00k

    (24) pumbaE,

    http://mercurial.selenic.com/wiki/FixUtf8Extension , но уже и он не совместим с последними версиями.

    Собрал версию плагина FixUtf8 работающую с Mercurial 3.8 и перевел описание на русский язык. Результат редварительного тестирования — работает корректно, проверял на ERP 2.1 и своих расширениях/ внешних обработках.

    Reply ↓
  49. pumbaE

    (48) h00k, спасибо. Попробую. К сожалению, ребята с Японии забросили портирование ядра hg https://www.mercurial-scm.org/wiki/WindowsUTF8Plan

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *