Коллективная разработка на 1С версии 7.7 и Git
В данной статье я не буду рассматривать работу с системой контроля версий Git, для этого есть специальные ресурсы, например http://git-scm.com/book/ru. Я только расскажу тем, кто привык и любит Git, подружить старую добрую 7-ку и систему контроля версий Git.
Ни для кого не секрет, что при совместной разработке на 7-ке программисты сталкиваются со множеством проблем:
- Диалоги. Если один разработчик работает за компьютером с Windows XP, а другой, например, за компьютером с Windows 7 со включенными темами, то при редактировании модулей документов, обработок и отчетов конфигуратор 1С автоматически сдвигает элементы управления на формах вверх (на 1-2 пикселя) и уменьшает высоту формы.
- Не видно удаленных объектов. Когда новые объекты добавляются в конфигурацию, их легко заметить, но когда они удаляются из конфигурации – для того чтобы это увидеть, приходится не старый файл объединять с новым, а новый объединять со старым и смотреть какие объекты были добавлены.
- Хранение изменений. Мне всегда хотелось иметь список изменений, которые я вношу в конфигурацию, чтобы при необходимости сделать откат или посмотреть «как было». Раньше я хранил всю историю в виде MDшных файлов, но это решение не лишено недостатков: надо где-то еще хранить историю изменений в человеческом виде, лишний объем, трудно сравнивать несколько релизов.
Подготовительный этап
Установочный файл Git для Windows http://msysgit.github.io/
Для удобной работы с Git в среде Windows можно использовать надстройку TortoiseGit. https://code.google.com/p/tortoisegit/
Добавим путь к Git в переменную Path.
Сам файл конфигурации является запакованным, его можно декомпилировать в набор текстовых файлов с помощтю утилиты GComp http://1c.alterplast.ru/gcomp/
Нужная версия для работы с Git – 2.2.16 http://www.1cpp.ru/forumfiles/Attachments/gcomp_bin_2_2_16.zip.
Начало работы и немного bat'ников
Скопируем файл 1Cv7.md в папку с GComp.
Распакуем конфигурацию в папку SRC.
gcomp -d
Переименуем папку в Current и создадим там репозиторий Git.
cd Current
git init
Теперь надо добавить все файлы, которые относятся к конфигурации, в репозиторий (из текущей и вложенных папок)
git add *.mdp
git add *.1s
git add *.frm
git add *.mxl
git add *.ord
git add *.txt
git add *\*.mdp
git add *\*.1s
git add *\*.frm
git add *\*.mxl
git add *\*.ord
git add *\*.txt
Поскольку такие действия надо будет делать при каждом обновлении конфигурации, то лучше эти команды поместить в bat файл addAllFiles.bat в папке Current
После этого делаем Commit. Так у нас появляется история.
Удаляем исходный MDшник.
Далее каждый программист ведет разработку самостоятельно в 1С. Как только изменения готовы к слиянию – обновляем свой локальный репозиторий, а затем делаем Push в общий.
Обновление локального репозитория
Когда изменения готовы – копируем измененный MDшник в папку с GComp.
Декомпилируем.
Удаляем все файлы из папки Current, которые имеют отношение к конфигурации. Чтобы решить проблему с удалением.
Копируем все файлы из папки SRC в папку Current.
Добавляем все файлы из предыдущего пункта.
Делаем commit. Файлы диалогов *.frm, которые мы не трогали, не меняем (делаем revert в TortoiseGit, чтобы вернуть состояние файлов рабочей копии к состоянию последнего коммита). Это решает проблему с диалогами.
В виде bat'ника это будет выглядеть так:
if not exist = "1Cv7.MD" goto doNothing
del /S .\Current\*.mdp
del /S .\Current\*.1s
del /S .\Current\*.frm
del /S .\Current\*.mxl
del /S .\Current\*.ord
del /S .\Current\*.txt
gcomp -d
del /Q 1Cv7.MD
xcopy .\SRC .\Current /E /I /Y
rmdir .\SRC /S /Q
cd Current
addAllFiles.bat
:doNothing
После этого можно делать push в удаленный общий репозиторий.
Сборка конфигурации
Сборка конфигурации делается командой
gcomp.exe -c -D Current