Скрипт выгрузки хранилища в GIT на Python

04.04.19

Разработка - Инструментарий разработчика

Скрипт для выгрузки хранилища 1С в GIT для платформ 8.1, 8.2(не тестировалось), 8.3

Скачать файлы

Наименование Файл Версия Размер
cfg_tools-master.zip
.zip 25,99Kb
7
.zip 25,99Kb 7 Скачать

Решили мы как-то подружить 1С (и себя) с GIT. Основной задачей этой дружбы является анализ истории объектов, быстро найти, "откуда ноги растут" той или иной строчки кода. Есть желание попробовать Git-flow в контексте 1С. Но, на данном этапе, нужно было перегрузить модули различных конфигураций 1С с комментариями из хранилища в GIT.

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

  • Gitter от rtmn, - конфигурация для автоматизации процесса выгрузки изменений из хранилища 1С в систему версионирования Git.
  • gitsync на OneScript от Evil Beaver - представляет собой отдельное (standalone) приложение на 1Script, и предназначено для синхронизации хранилища конфигураций 1С с репозитарием git.
Алгоритмы работы у них схожи  - извлечь версию конфигурации, загрузить в базу, выгрузить в файлы используя платформу. За счет использования платформы тратится много времени.
 

Мы выбрали gitsync, это было субъективное решение, желание поработать с OneScript, более легкое и гибкое решение.

Сначала тестирование проводилось на небольших хранилищах 8.3, все отлично отработало и работает сейчас.

Следующим шагом была выгрузка хранилище на 8.1. Немного подправив скрипты, запустили процесс выгрузки. По примерным расчетам, для переноса данных хранилища в git, потребовалось бы чуть меньше месяца (проекту 8 лет, большая конфигурация, много версий, на 1 commit требовалось около 8 минут). Смирились с производительностью и решили подождать месяц. Но стали возникатоь ошибкой 1с конфигуратора. Не долго разбираясь, решили попробовать написать свой велосипед. Были наработки на C# и python по чтению 1CD и разбору контейнеров(cf)

 

 

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

 

Спасибо

 

 

Плюсы:

  • скорость - 1 commit ~ 0,7 сек, выгрузка всей истории хранилища(4600 версий) заняла примерно 1 час, без выполнения git -commit 22 сек.
  • эстетическая - нет дополнительных окон (конфигуратор, tool_1cd, cmd)

Минусы:

  • "обратно не засунешь" - нет возможности собрать из выгрузки cf или загрузить в базу (но у нас не было такой задачи), 
  • трудно читаемое описание объектов - объекты выгружаются как есть (в скобочном формате "{"), а не в XML (опять же, задача была быстро выгрузить код)

 

Итог: данное решение подходит, если хранилище на 8.1/8.2, если основной целью выгрузки является код.

8.3 умеет выгружать конфигурацию в XML, тут лучше подойдет gitsync на OneScript.

 

Исходники выложены на GitHub и на своем Git-сервере, кто хочет помочь, присоединяйтесь.

 

Требования:

Сценарий использования:

  1. Создаем файл настроек
    [LOG]
    level = ERROR
    file = %%Y-%%m-%%d.log
    [BASE]
    store = Путь к файлу хранилища
    local_repo = Путь к локальному каталогу репозитория
    remote_repo = URL удаленного репозитория
  2. Запускаем для создания репозитория и служебных файлов.
    python rup.py init <файл настроек>
  3. Настраиваем соответствие пользователей и пользователей GIT в файле <Каталог локального репозитория>\authors.cs
  4. Запускаем для выгрузки истории
    python rup.py export <файл настроек>

Актуальная версия и подробный мануал тут и на GitHub 

GIT python Хранилище конфигураций

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122092    670    389    

714

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 15300 руб.

06.10.2023    7281    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3521    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2520 руб.

14.01.2013    177733    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99343    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18106    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28104    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

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

2400 руб.

24.09.2019    23599    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1448 26.01.16 16:53 Сейчас в теме
Еще один в клуб разборщиков конфы на исходники :)

Исходники выложены, кто хочет помочь, присоединяйтесь.

Ссылка на исходники не работает.
7. team bios 30 26.01.16 17:36 Сейчас в теме
(1) artbear, ссылку поправили, спасибо! И спасибо за интерес!;)
2. artbear 1448 26.01.16 17:03 Сейчас в теме
3. artbear 1448 26.01.16 17:03 Сейчас в теме
Добавьте лицензию к проекту
4. Infactum 315 26.01.16 17:17 Сейчас в теме
В целом проект радует. После беглого взгляда рекомендовал бы следующее:
- Убрать велосипед git_mng.py. Вместо него есть такая великолепная вещь, как GitPython.
- Заимствуя чужой код не нарушать лицензию :) Намекаю на мой проект. Что мешало просто включить его в качестве зависимости?
- После реализации предыдущих пунктов сделать нормальный setup.py и залить все в pip.
artbear; Evil Beaver; +2 Ответить
5. team bios 30 26.01.16 17:27 Сейчас в теме
(4) Infactum, GitPython - чтот не взлетел по-быстрому, так что пришлось сделать костыль, а так да, в дальнейшем планируется работа с гитом через него.
по проекту вашему, из него была взята идея и небольшая часть кода, мы боролись за скорость и наше решение выигрывало.
6. Infactum 315 26.01.16 17:30 Сейчас в теме
(5) заимствование части кода как бы не отменяет требований лицензии :)
А если отложить занудство в сторону, то был бы рад получить более подробное описание относительно того, какие проблемы скорости работы вы встретили и как они были решены. В идеале можно и pull request, но настаивать конечно не могу.
8. team bios 30 26.01.16 17:38 Сейчас в теме
(6) Infactum, хорошо, будем внимательнее:) Чуть позже отпишем по подробностям. Спасибо!
9. team bios 30 26.01.16 17:41 Сейчас в теме
(6) Infactum, по лицензии и возможности pull request позже. мы только после последнего ивента занялись вопросом git и open source:)
23. team bios 30 27.01.16 14:25 Сейчас в теме
(6) Infactum, про проблемы сложно сказать, т.к. проект был написан с нуля с использованием части Вашего кода(разбор описания таблиц и преобразование типов + некоторые идеи) за это вам большое спасибо, уже исправились в части лицензировния:)). В чистом виде Ваше решение у нас не взлетело, решили писать свой велосипед (уже поняли, что это не популярное мероприятие в местных кругах, но интересно же:)). Можно только по итогу сказать - разница в быстродействии - примерно в 2 раза (база ~ 3гб; onec_tools: 06:28.567312; cfg_tools: 03:49.299595). Если есть желание можем попробовать объеденить наши проекты. но это надо обсуждать отдельно.
25. Infactum 315 27.01.16 16:16 Сейчас в теме
(23) опубликуйте код теста, которым вы производительность сравниваете, пожалуйста (например на GIST). Как будет время я обязательно посмотрю, что там с быстродействием.
26. team bios 30 27.01.16 16:26 Сейчас в теме
(25) Infactum, текст кода, была идея сначала, что дело в BLOB, но увы они мало влияют. А так, профйлер покажет что надо улучшать.
29. KAV2 156 14.08.16 07:41 Сейчас в теме
(6) Infactum, А равзе MIT лицензия не предусматривает что проект является общественным достоянием и код можно использовать по своем усмотрению, в том числе использовать код в своих проектах?
30. Infactum 315 14.08.16 10:20 Сейчас в теме
(29) alexkmbk, можно.
У лицензии MIT всего лишь одно условие:
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
22. team bios 30 27.01.16 14:00 Сейчас в теме
(4) Infactum, Добавили лицензию и включили в нее Вас
10. Evil Beaver 8107 26.01.16 18:10 Сейчас в теме
Быструю многопоточную разбиралку CF на базе unpackv8 (С++) делал Сергей Батанов (http://infostart.ru/profile/45491/). Оно как бы хорошо, что вы все наши наработки знаете и пробовали, а все ж теперь есть "еще одна", а не развитие существующих.
12. Infactum 315 26.01.16 18:25 Сейчас в теме
(10) Evil Beaver, Ссылка куда-то не туда ведет.
В защиту Python (да и любой скриптовой реализации разбора) скажу, что не смотря на всю быстроту C++ необходимость самостоятельно сборки или наличия готовых бинарников под все системы несколько напрягает. Python например работает везде куда только не посмотри, и в большинстве случаев стоит "по дефолту". Кстати никто так и не решился сделать адекватное сравнение скорости работы распаковки/запаковки на Python и C++. В моем субъективном тесте Python версия как минимум работает так же по скорости.

(11) Evil Beaver, плюсую. НУ разве что кроме последнего пункта :)
А если надумают выйти на совсем взрослый уровень, то крайне желательно наличие тестов и какого-нибудь CI. Тот же Travis например практически идеальный вариант для гитхаба.
team bios; +1 Ответить
14. Evil Beaver 8107 26.01.16 19:24 Сейчас в теме
(12) Infactum, т.е. с предпоследним пунктом все-таки согласен?
16. team bios 30 26.01.16 20:38 Сейчас в теме
(10) Evil Beaver, Мы не нашли "наработок"(кроме Tool_1cd, но у него нет исходников в свободном доступе) на основании которых можно было бы сделать быструю выгрузку. Используя несколько инструментов(tool_1cd и unpuck, например) мы бы тратили лишнее время на сборку cf а потом разборку, когда, например, в коммите был 1 файл.
11. Evil Beaver 8107 26.01.16 18:18 Сейчас в теме
А, ну и чего не на гитхабе-то?

Предложение-дополнение Infactum:

1. Делаете пакет "разбиралки" файлов guid.0 из CF на файлы Справочник.ЧтоТоТам.Форма
2. Оформляете как самостоятельный пакет в pip
3. Делаете пакет вот этого вот синхронизатора
4. Подключаете существующий "читатель" 1CD, как зависимость
5. Опять же создаете пакет в pip
6. Переписываете все это на 1Скрипт :)
8. Выкладываете на гитхаб.
15. awa 2602 26.01.16 20:32 Сейчас в теме
(11)(14) Предпоследний пункт - это пункт 7 ведь?
19. Evil Beaver 8107 27.01.16 10:51 Сейчас в теме
(15) awa, нет, предпоследний - это пункт 6. Просто он две единицы занимает ))
17. team bios 30 26.01.16 20:40 Сейчас в теме
(11) Evil Beaver, У нас была одна задача на этом этапе - быстро перекинуть код. В будущем постараемся развить, спасибо за советы! А разработку оставим на питоне, потому как нравится:). А не на гитхабе, потому что после ивента решили познакомиться с гитом, "покурили" тему и выбрали гитлаб, потому что его можно бесплатно развернуть у себя (у нас есть закрытые проекты, такой режим на гитхабе платный). Вот и расшарили этот проект на своем сервере. Создаем учетку на гитхабе, опубликуем там проект. Спасибо!
theshadowco; +1 Ответить
18. Evil Beaver 8107 27.01.16 09:54 Сейчас в теме
(17) судя по недавним тикетам на gitsync и данной статье, вы с theshadowco - коллеги?

То, что в статье предложено, мне нравится. Я же не с критикой выступаю, а с предложениями. Ну и вообще, я сторонник подхода share the knowledge. Отсюда и желание видеть это в опенсорсе, на сервере, который не будет сегодня-завтра отключен владельцем. Это раз. И хочется видеть это в виде продукта, готового к повторному использованию, с соответствующей документацией и лицензией - это два.
21. team bios 30 27.01.16 12:53 Сейчас в теме
(18) Evil Beaver, нет, не коллеги и не знакомы)
Очень рады предложениям и с радостью их воспринимаем, спасибо! Про гитхаб все поняли, зарегились, опубликовали там проект https://github.com/TeamBIOS/cfg_tools ((3) artbear, лицензию добавили).
Про готовый продукт обсуждали между собой, чтобы все по-человечески доделать и опубликовать, но решили сделать это сейчас и после доработки обновить (для этого и приписали beta). В общем, оно и хорошо получилось, учтем все предложения при развитии проекта.
24. artbear 1448 27.01.16 15:38 Сейчас в теме
(21) Первый форк у меня :)
Лицензию увидел
team bios; +1 Ответить
13. artbear 1448 26.01.16 19:07 Сейчас в теме
Я на всякий случай сделал 2 origin-а, один из них ведет на исходный сайт автора, другой на гитхаб https://github.com/artbear/cfg_tools_python
(0) Как только определитесь с лицензией, поправлю репо на гитхабе.
20. pumbaE 27.01.16 11:20 Сейчас в теме
Добавили бы еще в gitsync частичную выгрузку только изменных модулей - цены б не было. Т.е. если в версии поменялся только модуль или толстая форма, тогда только их выгружаем по правильному пути, а в случаи изменения объектов или упр.форм тогда выгружаем все полностью всю конфигурацию.
JohnyDeath; +1 Ответить
27. Stas26 25.07.16 13:09 Сейчас в теме
Разместил хранилище с помощью гит хранилище на сайте bitbucket.org. Загрузка идет прекрассно. Можно ли каким-то образом сделать загрузку обратно в к конфигурацию 1С (хранилище), но не всю целиком (git clone ...), а выборочно? То есть, на сайте bitbucket.org хранится информация в коммитах. Допустим коммит 1 - Справочник Номенклатура, коммит 2 Справочник - Организация, коммит 3 - Справочник контрагенты. Мне нужно загрузить в конфигурацию 2 (хранилище 2) из этих 3 коммитов только 1, коммит 2, а остальные не загружать, так как например имеются там какие-нибудь ошибки. Можно это сделать? Если да, то как?
28. team bios 30 25.07.16 13:25 Сейчас в теме
(27) Stas26, На данный момент (в нашем инструменте) нет такой возможности.

Можно посмотреть в строну Tool_1cd, умеет ли он, если да то, можно выгрузить средствами гита нужные коммиты, привести имена файлов к нужному виду(для Tool_1cd) и скормить из ему. А может Tool_1cd уже имеет необходимый функционал.
31. Neco 132 18.12.17 14:06 Сейчас в теме
В файле store_reader.py в строке 126 ошибка
Сейчас
if not self.format_83:

должно быть
if self.format_83:
32. team bios 30 09.02.18 11:35 Сейчас в теме
Оставьте свое сообщение