惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
SegmentFault 最新的问题
Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
Cloudbric
Cloudbric
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Security @ Cisco Blogs
月光博客
月光博客
T
Troy Hunt's Blog
H
Help Net Security
Forbes - Security
Forbes - Security
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
L
LINUX DO - 最新话题
Hacker News - Newest:
Hacker News - Newest: "LLM"
GbyAI
GbyAI
S
Schneier on Security
Spread Privacy
Spread Privacy
Attack and Defense Labs
Attack and Defense Labs
Blog — PlanetScale
Blog — PlanetScale
N
News | PayPal Newsroom
F
Fortinet All Blogs
Latest news
Latest news
人人都是产品经理
人人都是产品经理
Recent Announcements
Recent Announcements
博客园_首页
Martin Fowler
Martin Fowler
Stack Overflow Blog
Stack Overflow Blog
雷峰网
雷峰网
O
OpenAI News
I
Intezer
S
Security Affairs
罗磊的独立博客
T
Tailwind CSS Blog
小众软件
小众软件
P
Palo Alto Networks Blog
Help Net Security
Help Net Security
V
Vulnerabilities – Threatpost
博客园 - 【当耐特】
F
Full Disclosure
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 聂微东
博客园 - 司徒正美
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
C
Cisco Blogs
Security Latest
Security Latest

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Командная разработка на 1С через EDT и Git: пошаговая настройка проекта
artem · 2026-05-30 · via Все публикации подряд на Хабре

Средний

7 мин

11K

Хранилище конфигурации — стандартный способ командной разработки в Конфигураторе уже двадцать лет, но у него есть парочка проблем: один разработчик блокирует объект целиком на всё время правки, история изменений непрозрачна, нормального код ревью нет, merge‑конфликты решаются вручную через захват‑отказ.

В статье подготовим окружение, импортируем существующую конфигурацию в EDT‑проект, настроим .gitignore и Git LFS под структуру EDT, организуем веточную модель для команды и разберём решение типичных конфликтов в XML‑метаданных.

Что понадобится

Минимальный набор инструментов выглядит так. Сама среда — 1С:EDT версии 2024.1 или новее (старые версии работают, но в новых заметно лучше скорость индексации и поддержка крупных конфигураций). Git для Windows или Linux — обязательно. Git LFS — для бинарных файлов внутри конфигурации (шаблоны, макеты, драйверы оборудования). Удалённый репозиторий — GitLab, GitHub, Gitea, локальный Gitolite, что угодно с поддержкой LFS.

Опционально — утилита ring, которая ставится вместе с EDT и позволяет работать с проектом из командной строки (миграции, импорт, проверка версий платформы).

Проверить её доступность:

ring --version
ring edt platform-versions

И отдельно — если переход идёт с действующего Хранилища с накопленной за годы историей изменений, имеет смысл рассмотреть 1С:ГитКонвертер. Это официальный инструмент от 1С, который умеет конвертировать историю Хранилища в коммиты Git с сохранением авторства. Конвертация большого репозитория занимает часы, но это разовая работа.

Импорт существующей конфигурации в EDT

Открываем 1С:EDT, переходим в перспективу «1С:Предприятие». Из меню Файл → Импорт → 1С:Предприятие → Конфигурация и расширения из информационной базы. В мастере выбираем подключённую информационную базу, указываем имя проекта (полезно сразу дать осмысленное — crm-production или accounting-dev, а не дефолтное Project), указываем версию платформы и каталог проекта.

Импорт работает не моментально, для типовой ERP это десятки минут, EDT построчно разбирает метаданные и раскладывает их по файловой структуре. Результат — каталог проекта со структурой:

crm-production/
├── .project
├── .settings/
└── src/
    ├── Configuration/
    │   ├── Configuration.mdo
    │   ├── ConfigurationProperties.xml
    │   └── ParentConfigurations/
    ├── Catalogs/
    ├── Documents/
    ├── CommonModules/
    │   └── ОбщегоНазначения/
    │       ├── ОбщегоНазначения.mdo
    │       └── Module.bsl
    └── ...

Каждый модуль — это .bsl файл (обычный текст), каждый объект метаданных — .mdo плюс XML с описанием, формы — отдельные XML‑файлы. С этим уже можно работать в Git нормально: построчный diff, merge, blame, all the good things.

Настройка.gitignore под структуру EDT

Дефолтный .gitignore от EDT минимальный, и его имеет смысл сразу расширить. Базовый набор, который закрывает основные источники мусора в репозитории:

# Eclipse / EDT служебное
.metadata/
.settings/
bin/
*.tmp

# Импорт-экспорт служебные
DumpFilesIndex.txt
ConfigDumpInfo.xml

# Конфигурации поставщиков — не нужны в Git разработчика
src/Configuration/ParentConfigurations.bin
src/Configuration/ParentConfigurations/**

# Локальные базы разработчика
*.1CD
*.CD

# Кэш-файлы платформы
*.dt.bak

Особенно важно исключить ParentConfigurations — это слепки конфигураций поставщиков (БСП, типовые конфигурации), которые приезжают в проект при импорте. Они большие, бинарные, и в Git разработчика им делать нечего: каждый получает их со своей версией поставки через стандартные инструменты 1С.

Файл .gitignore коммитим в корень проекта — он должен попасть в репозиторий и быть одинаковым у всей команды.

Git LFS для бинарных файлов

Конфигурации 1С содержат бинарные файлы (макеты табличных документов, картинки, драйверы оборудования в общих макетах). Хранить их напрямую в Git — плохая идея: каждое изменение бинарного файла увеличивает репозиторий на полный размер новой версии, и через полгода .git директория весит больше самой конфигурации.

Установка Git LFS и настройка отслеживания:

# установка (Windows — скачать с git-lfs.com, Linux — apt/yum)
git lfs install

# в корне проекта
git lfs track "*/Ext/Template.bin"
git lfs track "*/Ext/Module.bin"
git lfs track "*/Picture.png"
git lfs track "src/CommonTemplates/**/Template.bin"

После этого создаётся файл .gitattributes в корне проекта — его тоже коммитим. Все указанные файлы будут храниться в LFS‑хранилище, а в Git‑репозитории останутся только указатели на них.

Удалённый репозиторий должен поддерживать LFS — у GitHub и GitLab это включено по умолчанию, для Gitea и Gitolite нужно явно настроить хранилище.

Подключение к удалённому репозиторию

Базовая настройка Git в EDT делается через Окно → Параметры → Групповая разработка → Git → Конфигурация → Настройки пользователя. Указываются user.name и user.email — те же, что в системе планирования задач, чтобы коммиты корректно атрибутировались автору.

Связывание проекта с удалённым репозиторием через перспективу Git: Окно → Открыть перспективу → Git, потом Клонировать репозиторий или Добавить существующий репозиторий в зависимости от того, есть уже репозиторий или нет.

Первый push крупной конфигурации может занять часы (особенно через корпоративный VPN с медленным каналом) — это нормально, и имеет смысл делать его с локальной машины с быстрым интернетом, а не с прод‑сервера.

Стратегия веток для команды

Минимальная рабочая модель — две долгоживущие ветки и feature‑ветки:

  • main (или master) — то, что выкатывается в продакшен;

  • develop — то, что собирается в следующий релиз;

  • feature/имя-задачи — короткоживущие ветки для конкретных задач.

Цикл такой: разработчик берёт задачу, делает git checkout -b feature/JIRA-1234-разрешение-возвратов из develop, работает, коммитит, открывает merge request обратно в develop. После проверки и code review merge request вливается, ветка удаляется.

Для команды до десяти разработчиков такой схемы достаточно. Если команда крупнее или нужна параллельная работа над несколькими релизами одновременно, добавляются release/* и hotfix/* ветки по канону Git Flow.

А еще у каждой ветки своя информационная база. То есть разработчик, переключившись с feature/A на feature/B, должен пересобрать конфигурацию в свою рабочую базу (через «Команды разработчика» → «Загрузить конфигурацию в базу»). EDT поддерживает связывание нескольких баз с одним проектом через «Панель приложений».

Решение конфликтов в XML‑метаданных

Главная боль командной разработки в EDT+Git — конфликты в .mdo‑файлах и XML‑описаниях. Эти файлы автогенерируемые, в них есть порядок элементов, который зависит от того, в каком порядке разработчик добавлял реквизиты и подсистемы. Два разработчика добавили по реквизиту в один справочник — получили конфликт.

Часть конфликтов EDT умеет разрешать автоматически через свой встроенный merge‑tool для XML — он понимает структуру файла и сливает изменения по смыслу. Запускается через стандартный механизм Eclipse: правый клик на конфликтном файле в Git Staging → Merge Tool.

Для случаев, которые автомерж не разрешил, открывается трёхпанельный редактор: ours, theirs, base. В нём конфликт правится вручную, потом файл помечается как разрешённый и коммитится.

Что делать НЕ нужно: лезть руками в XML конфликтного файла через Notepad++ или code, если плохо понимаете структуру метаданных. Один лишний пробел или перепутанный порядок узлов — и конфигурация перестаёт открываться в EDT, потом долго восстанавливаете из git reflog.

Некоторые проблемы

При первом переходе всплывают типичные проблемы.

  1. Длина пути в Windows. Структура проекта EDT глубокая, и при длинных именах объектов на русском суммарная длина пути легко перешагивает лимит в 260 символов. Решение — git config --system core.longpaths true плюс размещение проекта в коротком пути вида C:\edt\crm, а не в Users\Иванов И. И.\Documents\1С Разработка\Проекты\.

  2. Скорость EDT на больших конфигурациях. Типовая ERP с импортом в EDT весит десятки гигабайт, и индексация на холодной машине занимает часы. Это разовая работа, но команду нужно к этому подготовить — первый день после переезда обычно «сидим, ждём индексации».

  3. Кодировка консоли Windows. При работе с Git через командную строку имена файлов на русском часто отображаются как \320\320\324. Решение — git config --global core.quotepath false плюс выставить UTF-8 в реестре консоли Windows.

  4. Хранилище и Git одновременно. На время переходного периода (две‑три недели) часто хочется работать и в Хранилище, и в Git параллельно. Это плохая идея — две системы перетирают изменения друг друга, и история становится непригодной для использования. Лучше выделить твёрдую дату перехода и после неё работать только через Git.

Итого

1С:EDT с Git — это серьёзный шаг вперёд относительно Хранилища: построчный diff, нормальный merge, code review через pull request, прозрачная история изменений, возможность подключать стандартные CI/CD‑инструменты. Цена — несколько дней на настройку, обучение команды и привычка коммитить чаще одного раза в день.

Главное при переходе — не пытаться сделать всё за один спринт. Сначала миграция одной средней конфигурации, отработка процесса на ней, потом постепенный перевод остальных проектов. Команде нужно две‑три недели, чтобы перестать делать «Сохранить изменения в хранилище» рефлекторно и привыкнуть к Git‑флоу.

Если после статьи хочется не просто прочитать про EDT и Git, а нормально встроить их в рабочий процесс 1С‑команды, присмотритесь к курсу «Профессиональная разработка в 1С:EDT + Git».

На курсе показываем, как работать с проектами в EDT, использовать Git в командной разработке, разбираться с ветками, конфликтами, расширениями и постепенно уходить от хаоса в изменениях к понятному процессу.

А начать можно с бесплатного открытого урока:

  • 16 июня в 20:00. «Хаос в расширениях: знакомо? Выход — EDT». Записаться

На уроке поговорим о том, как навести порядок в расширениях, когда путаница в коде и метаданных уже мешает разработке. Преподаватель объяснит, почему расширения можно и нужно объединять в EDT, и покажет, как такой подход помогает сделать работу с 1С‑проектом более управляемой.

Подписывайтесь на канал OTUS в MAX — там выходят анонсы открытых уроков, материалы по разработке и новости курсов.