Статья #14

Работа с Git и контроль версий конфигураций 1С

Проблемы версионирования 1С

  • Конфигурации хранятся в бинарном формате
  • Сложность работы с ветками
  • Конфликты при слиянии
  • Непонятные diff'ы
  • Отсутствие best practices

AI-помощники для Git workflow

1. Умные commit messages

"Проанализируй изменения и создай commit message:

git diff --staged

Формат:
<type>(<scope>): <subject>

<body>

<footer>

Примеры типов: feat, fix, docs, refactor"

Результат:

feat(sales): add discount calculation for bulk orders

- Implemented tiered discount system
- Added new field DiscountPercent to Order document
- Updated price calculation in OrderForm module

Closes: #123

2. Автоматический code review в PR

# GitHub Action с AI code reviewer
class GitHubAIReviewer:
    async def review_pr(self, pr_number):
        # Получаем diff
        diff = await self.get_pr_diff(pr_number)

        # AI анализ изменений
        review = await claude.review_code({
            'diff': diff,
            'language': '1c-bsl',
            'standards': '1c-coding-standards.md'
        })

        # Публикуем комментарии
        for issue in review.issues:
            await self.post_comment(
                pr_number,
                issue.file,
                issue.line,
                issue.comment
            )

        # Общий вердикт
        await self.post_review(
            pr_number,
            review.verdict,  # APPROVE / REQUEST_CHANGES
            review.summary
        )

3. Интеллектуальное разрешение конфликтов

"У меня конфликт в файле ОбщийМодуль.bsl:

<<<<<<< HEAD
Функция РассчитатьСумму(Документ)
    Возврат Документ.Сумма * 1.2;
КонецФункции
=======
Функция РассчитатьСумму(Документ, СНалогом = Истина)
    Если СНалогом Тогда
        Возврат Документ.Сумма * 1.2;
    Иначе
        Возврат Документ.Сумма;
    КонецЕсли;
КонецФункции
>>>>>>> feature/tax-optional

Предложи правильное разрешение конфликта."

4. Генерация changelog

"Создай CHANGELOG.md на основе коммитов с 01.01.2025:

git log --since='2025-01-01' --pretty=format:'%h %s'

Сгруппируй по типам изменений:
- Новая функциональность
- Исправления ошибок
- Улучшения производительности
- Рефакторинг
- Документация"

Результат:

# Changelog

## [1.5.0] - 2025-01-15

### Новая функциональность
- Добавлена система скидок для оптовых заказов
- Реализована интеграция с Яндекс.Доставкой

### Исправления ошибок
- Исправлен расчет НДС для возвратов
- Устранена ошибка при печати накладной

### Улучшения производительности
- Оптимизирован запрос остатков товаров (45с → 2с)

5. Branch management assistant

"У меня следующие ветки:

git branch -a

Какие из них можно удалить?
Какие нужно слить в main?
Есть ли устаревшие ветки?"

6. Автоматическое создание feature branches

"Создай новую feature branch для задачи:

'Добавить поддержку множественных складов в документе перемещения'

Создай:
1. Ветку с правильным именем
2. Шаблон коммитов
3. Checklist для PR
4. Draft PR в GitHub"

Выполнит:

git checkout -b feature/multiple-warehouses-transfer

# Создаст файл .git/hooks/prepare-commit-msg
# Создаст PR_TEMPLATE.md
# Создаст draft PR через GitHub API

Git hooks с AI

Pre-commit hook

#!/bin/bash
# .git/hooks/pre-commit

# AI проверка кода перед коммитом
claude code "Проверь staged файлы на:
1. Синтаксические ошибки
2. Соответствие стандартам
3. Незакомиченные TODOs
4. Отладочный код

Если есть критичные проблемы - заблокируй коммит."

Commit-msg hook

#!/bin/bash
# .git/hooks/commit-msg

# AI улучшение commit message
COMMIT_MSG_FILE=$1

claude code "Улучши commit message в $COMMIT_MSG_FILE
согласно Conventional Commits.
Сохрани результат в тот же файл."

Интеграция с 1С:EDT

// VS Code extension для EDT + Git
class EDTGitExtension {
  async smartCommit() {
    // Получаем изменения в конфигурации
    const changes = await this.getConfigurationChanges();

    // AI группирует логически связанные изменения
    const groups = await claude.groupChanges(changes);

    // Предлагаем создать несколько коммитов
    for (const group of groups) {
      const message = await claude.generateCommitMessage(group);

      const confirmed = await vscode.window.showQuickPick(
        ['Commit', 'Skip', 'Edit'],
        { placeHolder: message }
      );

      if (confirmed === 'Commit') {
        await this.gitCommit(group.files, message);
      }
    }
  }
}

Миграция в Git

"У меня конфигурация в файловом хранилище 1С.

Создай план миграции в Git:
1. Экспорт истории изменений
2. Создание начального коммита
3. Восстановление истории (если возможно)
4. Настройка .gitignore
5. Настройка Git LFS для больших файлов
6. Документация workflow для команды"

Результаты

  • Качество commit messages: +80%
  • Время на code review: -50%
  • Конфликты при merge: -60%
  • Прослеживаемость изменений: значительно улучшена

Интересно узнать больше?

Посмотрите другие статьи о том, как AI ускоряет разработку 1С

Перейти к блогу