0. rtnm 567 15.04.14 00:13 Сейчас в теме

Gitter (Хранилище 1С => Git)

Gitter - это конфигурация для автоматизации процесса выгрузки изменений из хранилища 1С в систему версионирования Git.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. nixel 536 23.04.14 19:29 Сейчас в теме
Уж коли пользуетесь гитом, позволю себе задать вопрос.
Реально ли изменить одну и ту же, например, форму двумя разными разработчиками (без использования хранилища) и, используя только выгрузку в файлы, после обычного текстового мерджа загрузить из файла готовую форму с изменениями?
Поясню - данные об объектах/формах/etc выгружаются в XML. Соответственно, когда два разработчика что-то меняют в форме, их измененные формы тоже выгружаются в XML. После push'а мы либо получим валидную XML, которую можем обратно свернуть в форму, либо полную кашу в случае, если 1с выгружает формы "каждый раз по-разному".
Хочу глобально изучить вопрос перевода контроля версий и групповой разработки на git, но как-то постоянно не нахожу на это времени :)
2. rtnm 567 23.04.14 22:26 Сейчас в теме
(1) nixel, Gitter никак не расчитан на использование без хранилища 1С. При использовании Gitter описанной проблемы быть не может.

Отвечая на ваш вопрос могу сказать, что отказ от хранилища в пользу других систем версионирования, таких как git, это достаточно серьезный и сложный шаг. У меня нет такого опыта использования Git. В вашем примере, второй разработчик, который выполняет push, вначале будет обязан выполнить pull, при этом он может получить коллизию при объединении файлов форм, которую сам и должен будет разрешить. При условии что Git ничего не знает о форматах, таких например как xml, то я бы не стал исключать вероятности получения невалидного файла формы после объединения, хотя если посмотреть форматирование xml файла формы, который формирует платформа 1С, то кажется, что эта вероятность сведена к минимуму.
4. pumbaE 611 23.04.14 23:11 Сейчас в теме
(1) nixel, для модулей все без проблем, для всяких внутренних объектов, разработчику в случаи конфликта, необходимо собрать из исходников cf (тот cf который пришел из мастер ветки), объединить его со свое кофнигурацией, при этом объединять подглядывая в diff между ветками, где оставлять свой вариант, где чужой. Конфликты самому решать, для модулей подойдет штатное трехстороннее сравннеи, для форм, ролей как повезет.
После этого разбирает получившийся cf в папку с merge и коммитит.
Evil Beaver; Redokov; +2 Ответить
3. pumbaE 611 23.04.14 23:05 Сейчас в теме
1. Скорость получения версии cf из хранилища, только с toolCD удалось ускориться в несколько раз по сравнению со штатной выгрузкой 1С из хранилища по номеру.
2. на маленьких конфигурациях этого не видно, но на больших, такие как упп, УТ11 вся конфигурация в одной папке, очень не удобно. При выгрузке не поддерживается того дерева, которое есть в том же конфигураторе. Очень долго искать простейшее "Документ.Реализация.... "
3. Толстые формы выгружаются в запаковоном формате, что-бы вести историю и для модулей толстых форм, приходиться еще их дополнительно распаковывать.

p.s.: у меня как-то так организован процесс разработки redmine+git+1C , тоже использую синхронизацию хранилища с git.
5. rtnm 567 24.04.14 00:11 Сейчас в теме
(3) pumbaE,

1. Скорость действительно не очень высокая. На средней конфигурации выгрузка одного изменения происходит порядка 3 минут. Это является проблемой только в начале, когда нужно всю накопившуюся историю выгрузить в репозиторий.
2. Полностью с вами согласен. Я не понимаю почему 1С реализовала выгрузку именно так, и я надеюсь что они это переделают. В принципе, после выгрузки файлов конфигурации в каталог репозитория их можно "перекидать" по каталогам. Мысль о такой доработке для Gitter у меня имеется.
3. Да, такая особенность имеется. С ней я не собирался бороться. Хочется использовать только штатные средства.
9. mikhailv 19 23.10.14 00:04 Сейчас в теме
Спасибо автору за разработку!
Начали с использования git для внешних обработок + Redmine. Понравилось.
Решили перетащить историю хранилища также в git, ибо скорость сравнения версий в хранилище не сопоставима с таковой в git. Также после выгрузки файлов конфигурации в git сравнение ролей и списков предопределенных доступно "из коробки" (xml). Плюс blame. Плюс авто-подкрепление коммитов к задаче в Redmine.

Ваше решение подошло практически полностью. Что изменили:
  • Убрали папку "Конфигурация", в которую сгружались все файлы. В итоге папки/файлы располагаются сразу в корневой папке репозитория.
  • По мелочи: увеличили размер реквизита "Комментарий"; в коммит вставляется номер версии из хранилища; сделали подмену имени пользователя из хранилища в имя пользователя git.


(3) pumbaE, п.2: решили выделением всего до первой точки в папку (Document, Catalog). Получилась структура, более-менее привычная. И Explorer/GitExtensions перестали тормозить от 10000+ файлов в одном каталоге. Если нужно, python-скрипт могу выслать.

(3) pumbaE, п.3: распаковываем, извлекаем только модуль. Раньше еще "декомпилировали" обычные формы, но поняли, что то, что получается, смотреть тоже не ахти как удобно, да и не все аспекты декомпилируются. Кроме того, на некоторых формах платформа вываливалась в дамп (если интересно, тест для воспроизведения ошибки есть).

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

В качестве обработки-декомпилятора и precommit-скриптов используем помеси Ваших (pumbaE, Infostart, GitHub), и этих наработок: PBazelyuk, Infostart BitBucket, за что Вам, Евгений, и Петру также отдельное спасибо.
10. rtnm 567 23.10.14 11:40 Сейчас в теме
11. pumbaE 611 24.10.14 10:04 Сейчас в теме
(9) mikhailv, я в основном использую вот этот инструментарий https://github.com/xDrivenDevelopment/ .
Для распаковки большого количества форм написали обработку-обертку для обработки-декомпилятора, чтобы 1С запускалась 1 раз, а не столько, сколько форм/обработок нужно распаковать. Работает на порядок быстрее.
если есть возможность, прошу pull-request.
13. artbear 1097 07.11.14 01:27 Сейчас в теме
Присоединюсь к (11) и (12)
Ждем.
12. bambr1975 804 24.10.14 10:56 Сейчас в теме
(9) mikhailv,
на некоторых формах платформа вываливалась в дамп (если интересно, тест для воспроизведения ошибки есть).

Вы последнюю версию V8Reader-а используете? Можете ссылку на форму, которая не декомпилируется прислать в личку?
18. ekaruk 4205 16.11.14 22:14 Сейчас в теме
Интересная разработка.
Спасибо.
Работает вполне корректно.
Пришлось подправить формат номера при получении версии из хранилища. Номер более 1000 передавался как 1 000. Думаю, не хватает еще регламентного задания. Чтобы настроить и больше не трогать.

(9) mikhailv, Тоже увеличила ширину поля комментария и добавила номер версии.
Структуру не трогали. В ней очень удобно ищутся данные поиском по Ctrl+F в Gif Extensions. С папками, возможно, будет хуже.

При стандартной выгрузке не выгружаются в текст обычные формы. В результате при сравнении
diff --git a/Конфигурация/Catalog.Номенклатура.Form.ФормаЭлемента.Form b/Конфигурация/Catalog.Номенклатура.Form.ФормаЭлемента.Form
index 83c2a4c..962f1a1 100644
Binary files a/Конфигурация/Catalog.Номенклатура.Form.ФормаЭлемента.Form and b/Конфигурация/Catalog.Номенклатура.Form.ФормаЭлемента.Form differ

Подскажите какое-то простое решение. Либо как распаковать перед соммитом, либо может есть какой-то вариант сравнения чем-то другим (использую kdiff3).
19. pumbaE 611 17.11.14 09:41 Сейчас в теме
(18) ekaruk, вопрос в том, какие различия вы хотите получить.
1. Если только модуль, тогда дополнительно используете v8unpack.exe для форм https://github.com/xDrivenDevelopment/v83unpack/blob/develop/src/oscript/un­pack.os#L1759
2. Если хотите посмотреть различия форм, в виде иерархии, тогда вам необходимо для просмотра различий использовать другие инструменты, например v8reader.epf .
20. ekaruk 4205 17.11.14 22:56 Сейчас в теме
(19) pumbaE, cпасибо.
Покопалась в Вашем ГитХабе. Остановилась на v8Reader.epr + diff-1c-cf.js.
Правда, не разобралась, как подключить произвольную программу сравнения к GitExtensions.
Пришлось параллельно поставить TortoiseGit.
Обработки, формы, конфигурации сравнивает вполне корректно.

upd. Разобралась с GitExtensions.
По аналогии с http://infostart.ru/public/118207/ подключила DiffMerge
21. artbear 1097 18.11.14 17:58 Сейчас в теме
(20) Для подобного у нас используется целый проект v8diff https://github.com/xDrivenDevelopment/v8Diff , его базовая версия описана у Жени в http://infostart.ru/public/118207/
Сам постоянно пользуюсь и для Гита, и для Фара, командной строки.
22. artbear 1097 18.11.14 18:09 Сейчас в теме
(20) Мы сейчас активно юзаем SourceTree (бесплатно, только нужно зарегистрироваться на сайте). Очень удобно.
ЗЫ а у меня и SourceTree установлен, и TortoiseGit :) Но SourceTree намного чаще
23. artbear 1097 18.11.14 18:15 Сейчас в теме
(20) ИМХО kdiff3 помощнее, чем DiffMerge
24. ekaruk 4205 19.11.14 00:03 Сейчас в теме
(23) artbear, kdiff3 мощнее, но я не нашла, как в нем настроить вызов 1С для просмотра форм из GifExtensions.
TortoiseGit как-то меньше понравился.

(21) artbear, Да, видела v8diff на ГитХабе. Собственно, из него и взяла diff-1c-cf.js
Насколько я понимаю, v8diff это и есть v8reader + diff-1c-cf.js + ИР.
Или он чем-то еще отличается? В чем смысл отдельного проекта, зачем ИР для сравнения?
25. artbear 1097 19.11.14 00:38 Сейчас в теме
(24) весь смысл v8diff и есть в связке v8reader + diff.js + ИБ_1С

ИМХО ИР в ИБ не нужен, реально нужен простейший код конфигурации

Я не понимаю, зачем ты юзаешь GifExtensions ? в чем прелесть/преимущество?
ИМХО SourceTree и черепаха и Kdiff3 перекрывают практически все сценарии.

У меня анализ/сравнение используется как для бинарника/epf через v8reader, так и напрямую для текстовых представлений модулей и форм, разобранных через проект precommit1C https://github.com/xDrivenDevelopment/precommit1C

Поясни, что подразумевается под "настроить вызов 1С для просмотра форм из GifExtensions." ?

ЗЫ написал в личку, можно ускорить общение :)
6. russinow 24.04.14 14:15 Сейчас в теме
век живи, век учись
в упор не видел эту выгрузку в файлики пока не наткнулся на статью )))
конечно такая выгрузка имеет кучу нюансов, но путь 1с-овцами выбран правильный, посмотрим к чему он приведет.

в общем спасибо за наводку )
7. mikhailovaew 126 15.05.14 16:58 Сейчас в теме
Начиная с версии 1С 8.3 появилась возможность выгружать конфигурацию в набор файлов

а в 8.2 пункт меню "Конфигурация - Выгрузить файлы конфигурации..." делает не то же самое?
8. rtnm 567 15.05.14 20:44 Сейчас в теме
(7) mikhailovaew, нет, в 8.2 имелась возможность выгрузить только программные модули, справочную информацию и макеты, а в 8.3 в файлы выгружается вся конфигурация
14. Armando 1387 07.11.14 10:47 Сейчас в теме
В соседней теме я как раз про такую штуку говорил http://infostart.ru/public/310640/
А тут как говорится "Все уже украдено до нас")
Кажется я смогу сэкономить себе времени. Спасибо.
15. artbear 1097 08.11.14 00:56 Сейчас в теме
(14) Тут мало автоматизации, много кнопок нужно нажимать.
Выгрузка в Гит должна быть автоматической и фоновой.

Подобная фоновая выгрузка реализована в разных проектах.
Например, у нас в https://github.com/xDrivenDevelopment/v83unpack
16. Armando 1387 08.11.14 01:08 Сейчас в теме
(15)
Выгрузка в Гит должна быть автоматической и фоновой.

Согласен. Мне так и надо.


Спасибо, посмотрю. Не знал, что это тоже синхронизит. Думал, что только распаковывает.
17. pumbaE 611 08.11.14 09:05 Сейчас в теме
(16) все течет, все меняется.
26. Redokov 76 14.01.15 22:00 Сейчас в теме
Спасибо за инструмент. А почему Вы его не выложите на тот же самый гитхаб или битбакет? Тогда все те, кто модифицируют его самостоятельно смогут присылать Вам пул реквесты и Вам будет удобнее отслеживать изменения да и в целом, планировать разработку.
27. rtnm 567 15.01.15 21:46 Сейчас в теме
(26) Redokov, пожалуйста. Ссылку на репозиторий bitbucket я ненавязчиво указывал в пункте про открытость. По поводу pull request - Gitter так не работает, он выгружает только в одном направлении, из хранилища 1С в git репозиторий
28. Elisy 919 21.01.15 06:52 Сейчас в теме
Вы не могли бы дать ссылку на пример выгрузки? Сейчас спрашивают про ваш инструмент в аналогичной статье http://habrahabr.ru/post/248303/
29. rtnm 567 21.01.15 17:51 Сейчас в теме
(28) Elisy, Читал вчера вашу статью, у меня тоже возникало естественное желание раскидать все по папкам, я думаю что разработчики 1С придут к пониманию необходимости этого. В качестве примера можно посмотреть исходники Gitter - https://bitbucket.org/rtnm/gitter/src
30. pumbaE 611 21.01.15 18:39 Сейчас в теме
(29) можете встроить обработку из (14) и у вас тоже будет раскидывать по папкам.
31. rtnm 567 21.01.15 21:27 Сейчас в теме
(30) pumbaE, спасибо, буду иметь в виду
32. cmd_vasec 34 06.05.15 16:41 Сейчас в теме
Добрый день.
У меня возникла ошибка
{ОбщийМодуль.Git.Модуль(81)}: Неизвестная ошибка при совершении комита(git commit -m "Добавить функционал, как в предварительном контакте" --date 2014-09-24T10:11:03)
ВызватьИсключение ИсключениеОшибкаПриВыполненииКоманды(ОписаниеОшибки, ТекстКоманды);

что не так?
33. rtnm 567 06.05.15 22:06 Сейчас в теме
(32) cmd_vasec, проблема в том что ВыполнитьКоманду("Путь/до/репозитория", "git commit -m ""Добавить функционал, как в предварительном контакте"" --date 2014-09-24T10:11:03") возвращает ненулевое значение, а значит есть ошибка. Можно запустить туже самую команду в командной строке (cmd.exe) и всего скорее будет видно более внятное описание проблемы. Так же можно доработать само решение (gitter) - перенаправить вывод программы git из стандартного потока ввода-вывода в файл, тогда можно будет получать более внятное описание проблемы. Еще можно в описании ошибки указывать используемый ПутьДоРепозитория при запуске ВыполнитьКоманду - хуже не будет.
34. cmd_vasec 34 07.05.15 08:56 Сейчас в теме
(33)
Получил:
On branch master
nothing to commit (working directory clean)
Команда проверки состояния сообщит, что коммитить нечего. Это означает, что в репозитории хранится текущее состояние рабочего каталога, и нет никаких изменений, ожидающих записи.

У меня первый коммит прошел, а второй нет.

Т.о. получается, что первая версия хранилища равна второй, но это не так.

Что делаю не так?
35. rtnm 567 07.05.15 12:03 Сейчас в теме
(34) cmd_vasec, сложно понять где пошел сбой, нужно проанализировать, что именно прошло первым коммитом, посмотреть что именно сейчас находится в рабочем каталоге и какой версии хранилища соответствует, посмотреть на состояние записей справочника ВыгруженаВЛокальныйРепозиторий и в частности на флажок ВыгруженаВЛокальныйРепозиторий, возможно нужно этот флажок сбросить, чтобы еще раз попытаться выгрузить в рабочий каталог проблемную версию хранилища.
Не исключаю, что каким-то образом первым коммитом ушла последняя версия хранилища. Какая версия платформы?
36. cmd_vasec 34 07.05.15 12:30 Сейчас в теме
(35)
Почему то выгрузилось последняя версия хранилища. Версия платформы 8.3.5.1482.

Думаю, что не происходит обновление основной конфигурации конфигурацией из хранилища.

Как я правильно понял, в начале мы обновляем основную конфу конфой из хранилища по номеру, а потом выгружает файлы основной конфигурации.
37. cmd_vasec 34 07.05.15 13:25 Сейчас в теме
(35)
Разобрался. Надо внимательно читать инструкцию. :-)
38. rtnm 567 07.05.15 22:23 Сейчас в теме
(37) cmd_vasec, вот и замечательно :)
39. Artem-B 75 25.03.17 23:03 Сейчас в теме
40. rtnm 567 27.03.17 00:06 Сейчас в теме
41. cmd_vasec 34 30.03.17 11:22 Сейчас в теме
Сегодня столкнулся с ошибкой выгрузки хранилища с номером 1000. Автор так и не исправил это.

В Общем модуле ПакетныйРежим в Процедуре ЗагрузитьКонфигурациюИзХанилища() строку
ДобавитьВКомандуКлючЗначение(ТекстКоманды, "-v", НомерВерсии);

заменил на

ДобавитьВКомандуКлючЗначение(ТекстКоманды, "-v", СтрЗаменить(СокрЛП(НомерВерсии),Символы.НПП,""));
42. nicxxx 200 31.12.17 17:19 Сейчас в теме
(41)
ДобавитьВКомандуКлючЗначение(ТекстКоманды, "-v", СтрЗаменить(СокрЛП(НомерВерсии),Символы.НПП,""));

Если это выполнить с английскими региональным установками, то СтрЗаменить не сработает, т.к. у них разделитель разрядов - запятая.
Надо Формат(НомерВерсии, "ЧГ=")
43. Stepa86 938 31.12.17 18:06 Сейчас в теме
(41) (42) Можно использовать мою версию гиттера https://infostart.ru/public/583152/

А можно взять Гиттер от 1С - ГитКонвертер https://github.com/1C-Company/GitConverter

И там и там нет проблемы с выгрузкой 999+ версий, и там и там есть инкрементальная выгрузка, что появилась в 8.3.10

Но самым популярным проектом для выгрузки хранилище в гит сейчас является гитсинх https://github.com/oscript-library/gitsync
44. milanse 32 22.03.18 09:22 Сейчас в теме
(43) На мой взгляд с конфой работать гораздо нагляднее и удобнее, если она заточена тупо на выгрузку в гит.

Если используешь гитфлоу, то командная строка в виде gitsync рулит.

1С гит конвертер попробовал, тоже работает, но создает мусор в виде транзитных конфигураций в списке баз, ну и я уже как-то привык к gitter-у, допилил под себя, запустил на сервере.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Разработчик 1С
Москва
зарплата от 100 000 руб. до 160 000 руб.
Полный день

Программист 1С
Москва
зарплата от 80 000 руб.
Полный день

Консультант-аналитик 1С
Санкт-Петербург
Полный день

Консультант-аналитик 1С
Москва
зарплата от 120 000 руб. до 120 000 руб.
Полный день

Удаленный ИТ-журналист
Санкт-Петербург
По совместительству