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

0. rtnm rtnm (rtnm) 535 15.04.14 00:13 Сейчас в теме
Gitter - это конфигурация для автоматизации процесса выгрузки изменений из хранилища 1С в систему версионирования Git.

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

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

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

p.s.: у меня как-то так организован процесс разработки redmine+git+1C , тоже использую синхронизацию хранилища с git.
4. Евгений Сосна (pumbaE) 538 23.04.14 23:11 Сейчас в теме
(1) nixel, для модулей все без проблем, для всяких внутренних объектов, разработчику в случаи конфликта, необходимо собрать из исходников cf (тот cf который пришел из мастер ветки), объединить его со свое кофнигурацией, при этом объединять подглядывая в diff между ветками, где оставлять свой вариант, где чужой. Конфликты самому решать, для модулей подойдет штатное трехстороннее сравннеи, для форм, ролей как повезет.
После этого разбирает получившийся cf в папку с merge и коммитит.
Evil Beaver; Redokov; +2 Ответить
5. rtnm rtnm (rtnm) 535 24.04.14 00:11 Сейчас в теме
(3) pumbaE,

1. Скорость действительно не очень высокая. На средней конфигурации выгрузка одного изменения происходит порядка 3 минут. Это является проблемой только в начале, когда нужно всю накопившуюся историю выгрузить в репозиторий.
2. Полностью с вами согласен. Я не понимаю почему 1С реализовала выгрузку именно так, и я надеюсь что они это переделают. В принципе, после выгрузки файлов конфигурации в каталог репозитория их можно "перекидать" по каталогам. Мысль о такой доработке для Gitter у меня имеется.
3. Да, такая особенность имеется. С ней я не собирался бороться. Хочется использовать только штатные средства.
6. Андрей Русинов (russinow) 24.04.14 14:15 Сейчас в теме
век живи, век учись
в упор не видел эту выгрузку в файлики пока не наткнулся на статью )))
конечно такая выгрузка имеет кучу нюансов, но путь 1с-овцами выбран правильный, посмотрим к чему он приведет.

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

а в 8.2 пункт меню "Конфигурация - Выгрузить файлы конфигурации..." делает не то же самое?
8. rtnm rtnm (rtnm) 535 15.05.14 20:44 Сейчас в теме
(7) mikhailovaew, нет, в 8.2 имелась возможность выгрузить только программные модули, справочную информацию и макеты, а в 8.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 rtnm (rtnm) 535 23.10.14 11:40 Сейчас в теме
11. Евгений Сосна (pumbaE) 538 24.10.14 10:04 Сейчас в теме
(9) mikhailv, я в основном использую вот этот инструментарий https://github.com/xDrivenDevelopment/ .
Для распаковки большого количества форм написали обработку-обертку для обработки-декомпилятора, чтобы 1С запускалась 1 раз, а не столько, сколько форм/обработок нужно распаковать. Работает на порядок быстрее.
если есть возможность, прошу pull-request.
12. Андрей Д. (bambr1975) 771 24.10.14 10:56 Сейчас в теме
(9) mikhailv,
на некоторых формах платформа вываливалась в дамп (если интересно, тест для воспроизведения ошибки есть).

Вы последнюю версию V8Reader-а используете? Можете ссылку на форму, которая не декомпилируется прислать в личку?
13. Артур Аюханов (artbear) 868 07.11.14 01:27 Сейчас в теме
Присоединюсь к (11) и (12)
Ждем.
14. Armando Armando (Armando) 1376 07.11.14 10:47 Сейчас в теме
В соседней теме я как раз про такую штуку говорил http://infostart.ru/public/310640/
А тут как говорится "Все уже украдено до нас")
Кажется я смогу сэкономить себе времени. Спасибо.
15. Артур Аюханов (artbear) 868 08.11.14 00:56 Сейчас в теме
(14) Тут мало автоматизации, много кнопок нужно нажимать.
Выгрузка в Гит должна быть автоматической и фоновой.

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

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


Спасибо, посмотрю. Не знал, что это тоже синхронизит. Думал, что только распаковывает.
17. Евгений Сосна (pumbaE) 538 08.11.14 09:05 Сейчас в теме
(16) все течет, все меняется.
18. Евгения Карук (ekaruk) 2903 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) 538 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) 2903 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) 868 18.11.14 17:58 Сейчас в теме
(20) Для подобного у нас используется целый проект v8diff https://github.com/xDrivenDevelopment/v8Diff , его базовая версия описана у Жени в http://infostart.ru/public/118207/
Сам постоянно пользуюсь и для Гита, и для Фара, командной строки.
22. Артур Аюханов (artbear) 868 18.11.14 18:09 Сейчас в теме
(20) Мы сейчас активно юзаем SourceTree (бесплатно, только нужно зарегистрироваться на сайте). Очень удобно.
ЗЫ а у меня и SourceTree установлен, и TortoiseGit :) Но SourceTree намного чаще
23. Артур Аюханов (artbear) 868 18.11.14 18:15 Сейчас в теме
(20) ИМХО kdiff3 помощнее, чем DiffMerge
24. Евгения Карук (ekaruk) 2903 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) 868 19.11.14 00:38 Сейчас в теме
(24) весь смысл v8diff и есть в связке v8reader + diff.js + ИБ_1С

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

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

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

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

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

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

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

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

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

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

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

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

заменил на

ДобавитьВКомандуКлючЗначение(ТекстКоманды, "-v", СтрЗаменить(СокрЛП(НомерВерсии),Символы.НПП,""));
Оставьте свое сообщение