2d3734f6ed
Co-authored-by: Cursor <cursoragent@cursor.com>
332 lines
14 KiB
Markdown
332 lines
14 KiB
Markdown
# Git Management Tools (`git_man`)
|
||
|
||
**Версия:** 1.2.0
|
||
|
||
Набор скриптов и утилит для управления Git-репозиториями, работы с подмодулями и автоматизации повседневных задач.
|
||
|
||
---
|
||
|
||
## 📦 Содержание
|
||
|
||
- [Описание](#описание)
|
||
- [Скрипты](#скрипты)
|
||
- [setup-1c-repo](#setup-1c-repo--настройка-репозитория-под-1с)
|
||
- [register-submodules.sh](#register-submodulessh)
|
||
- [Установка](#установка)
|
||
- [Использование](#использование)
|
||
- [Требования](#требования)
|
||
- [История версий](#история-версий)
|
||
- [Автор](#автор)
|
||
- [Лицензия](#лицензия)
|
||
|
||
---
|
||
|
||
## 📖 Описание
|
||
|
||
Данный репозиторий содержит вспомогательные скрипты для работы с Git в проектах, где используется множество вложенных репозиториев (монорепозиторий с подмодулями), а также настройка репозиториев под выгрузку конфигуратора 1С.
|
||
|
||
Основные задачи:
|
||
- Автоматическая регистрация вложенных репозиториев как подмодулей
|
||
- Снятие путей из `.gitignore` при регистрации
|
||
- Централизованное управление множеством репозиториев
|
||
- Настройка игнорирования состояния подмодулей в основном репозитории
|
||
- Настройка кодировки, EOL и ignore для проектов 1С (выгрузка конфигуратора)
|
||
- Автоматизация рутинных операций
|
||
|
||
---
|
||
|
||
## 🛠️ Скрипты
|
||
|
||
### `setup-1c-repo` — настройка репозитория под 1С
|
||
|
||
**Описание:**
|
||
Включает локальные настройки Git в **текущей папке** (каталог запуска) под выгрузку конфигурации/расширения из **конфигуратора 1С**: UTF-8 с BOM, CRLF в рабочей копии для файлов выгрузки, корректные пути с кириллицей, длинные пути, `.gitattributes` и `.gitignore`.
|
||
|
||
| Платформа | Скрипт |
|
||
|-----------|--------|
|
||
| **Windows** | `setup-1c-repo.ps1` или `setup-1c-repo.cmd` |
|
||
| **macOS / Linux** | `setup-1c-repo.sh` |
|
||
|
||
**Использование (Windows):**
|
||
```powershell
|
||
.\setup-1c-repo.ps1
|
||
.\setup-1c-repo.ps1 -Force -Renormalize
|
||
.\setup-1c-repo.cmd -Init -DryRun
|
||
```
|
||
|
||
**Использование (macOS / Linux):**
|
||
```bash
|
||
./setup-1c-repo.sh
|
||
./setup-1c-repo.sh --force --renormalize
|
||
./setup-1c-repo.sh --init --dry-run
|
||
```
|
||
|
||
**Опции:**
|
||
|
||
| Опция (sh / ps1) | Описание |
|
||
|------------------|----------|
|
||
| `--help` / `-Help` | Справка |
|
||
| `--version` / `-Version` | Версия скрипта (`1.2.0`) |
|
||
| `--dry-run` / `-DryRun` | Только показать действия |
|
||
| `--force` / `-Force` | Перезаписать `.gitattributes` и `.gitignore` |
|
||
| `--init` / `-Init` | `git init`, если папка ещё не репозиторий |
|
||
| `--renormalize` / `-Renormalize` | `git add --renormalize .` после настройки |
|
||
| `--no-gitignore` / `-NoGitignore` | Не трогать `.gitignore` |
|
||
| `--verbose` / `-Verbose` | Подробный вывод |
|
||
| `--quiet` / `-Quiet` | Только ошибки |
|
||
|
||
**Что применяется локально (`git config --local`):**
|
||
|
||
| Параметр | Значение | Зачем |
|
||
|----------|----------|--------|
|
||
| `core.quotepath` | `false` | Кириллические пути без `\320\…` |
|
||
| `core.longpaths` | `true` | Длинные пути (Windows / глубокие деревья 1С) |
|
||
| `gui.encoding` | `utf-8` | Кодировка GUI |
|
||
| `i18n.commitEncoding` | `utf-8` | Кодировка сообщений коммитов |
|
||
| `core.autocrlf` | `false` | EOL только через `.gitattributes` |
|
||
| `core.safecrlf` | `warn` | Предупреждение о смешанных EOL |
|
||
| `diff.renames` | `false` | Как в рекомендациях 1С:ГитКонвертер |
|
||
| `core.precomposeunicode` | `true` | Только macOS (NFD/NFC для имён файлов) |
|
||
|
||
**`.gitattributes`:** для `*.bsl`, `*.xml`, `*.txt`, `*.html` и др. файлов выгрузки — `text eol=crlf` (рабочая копия как у конфигуратора). Бинарники (`*.cf`, `*.bin`, картинки, …) — `binary`. BOM UTF-8 хранится как часть содержимого файла.
|
||
|
||
**После запуска:**
|
||
```bash
|
||
git add .gitattributes .gitignore
|
||
git commit -m "Настройки Git для выгрузки конфигуратора 1С"
|
||
```
|
||
|
||
---
|
||
|
||
### `register-submodules.sh`
|
||
|
||
**Описание:**
|
||
Автоматически находит все вложенные Git-репозитории в текущей папке и регистрирует их как подмодули в `.gitmodules`. Перед регистрацией снимает путь из `.gitignore` (точные правила или исключение `!/path/`). Уже существующие клоны регистрируются без повторного clone. Поддерживает настройку игнорирования состояния подмодулей.
|
||
|
||
**Использование:**
|
||
```bash
|
||
./register-submodules.sh [ОПЦИИ]
|
||
```
|
||
|
||
**Опции:**
|
||
|
||
| Опция | Описание |
|
||
|-------|----------|
|
||
| `--help`, `-h` | Показать справку |
|
||
| `--version`, `-V` | Показать версию скрипта (`1.0.6`) |
|
||
| `--dry-run` | Только показать, что будет сделано (без изменений) |
|
||
| `--force`, `-f` | Принудительная перерегистрация подмодулей |
|
||
| `--ignore=MODE` | Установить режим игнорирования для ВСЕХ подмодулей |
|
||
| `--ignore-submodule PATH:MODE` | Установить режим для конкретного подмодуля |
|
||
| `--remove-ignore` | Удалить все настройки игнорирования из .gitmodules |
|
||
| `--verbose`, `-v` | Подробный вывод |
|
||
| `--quiet`, `-q` | Минимальный вывод (только ошибки) |
|
||
|
||
**Режимы игнорирования (`MODE`):**
|
||
|
||
| Режим | Описание |
|
||
|-------|----------|
|
||
| `all` | Полностью скрывает изменения в подмодулях (не показывает ничего) |
|
||
| `dirty` | Скрывает только изменения в файлах подмодуля |
|
||
| `untracked` | Скрывает только неотслеживаемые файлы в подмодуле |
|
||
| `none` | Показывает все изменения (поведение по умолчанию) |
|
||
|
||
**Примеры:**
|
||
```bash
|
||
# Базовая регистрация
|
||
./register-submodules.sh
|
||
|
||
# Регистрация с игнорированием всех изменений в подмодулях
|
||
./register-submodules.sh --ignore=all
|
||
|
||
# Регистрация с игнорированием только dirty-изменений
|
||
./register-submodules.sh --ignore=dirty
|
||
|
||
# Установить ignore только для конкретного подмодуля
|
||
./register-submodules.sh --ignore-submodule tools/cam:dirty
|
||
|
||
# Удалить все настройки игнорирования
|
||
./register-submodules.sh --remove-ignore
|
||
|
||
# Просмотр без изменений
|
||
./register-submodules.sh --dry-run --ignore=all
|
||
|
||
# Принудительная перерегистрация с подробным выводом
|
||
./register-submodules.sh --force --verbose
|
||
|
||
# Тихий режим (только ошибки)
|
||
./register-submodules.sh --quiet
|
||
```
|
||
|
||
**После регистрации:**
|
||
```bash
|
||
git add .gitmodules
|
||
git commit -m "Зарегистрированы все подмодули"
|
||
git push
|
||
```
|
||
|
||
**При клонировании репозитория с подмодулями:**
|
||
```bash
|
||
# Вариант 1: сразу с подмодулями
|
||
git clone --recursive https://git.p7net.ru/tools/git_man.git
|
||
|
||
# Вариант 2: после клонирования
|
||
git clone https://git.p7net.ru/tools/git_man.git
|
||
cd git_man
|
||
git submodule update --init --recursive
|
||
```
|
||
|
||
---
|
||
|
||
## 📂 Структура репозитория
|
||
|
||
```
|
||
git_man/
|
||
├── README.md # Этот файл
|
||
├── CHANGELOG.md # История изменений
|
||
├── register-submodules.sh # Регистрация вложенных репозиториев как подмодулей
|
||
├── setup-1c-repo.sh # Настройка репозитория под 1С (macOS / Linux)
|
||
├── setup-1c-repo.ps1 # Настройка репозитория под 1С (Windows PowerShell)
|
||
└── setup-1c-repo.cmd # Обёртка Windows для .ps1
|
||
```
|
||
|
||
---
|
||
|
||
## ⚙️ Установка
|
||
|
||
### Способ 1: Клонирование репозитория
|
||
|
||
```bash
|
||
git clone https://git.p7net.ru/tools/git_man.git
|
||
cd git_man
|
||
```
|
||
|
||
### Способ 2: Добавить в PATH (для глобального доступа)
|
||
|
||
```bash
|
||
# Добавить в ~/.bashrc или ~/.zshrc
|
||
export PATH="$PATH:/путь/к/git_man"
|
||
|
||
# Или создать символическую ссылку
|
||
sudo ln -s /путь/к/git_man/register-submodules.sh /usr/local/bin/register-submodules
|
||
```
|
||
|
||
### Способ 3: Использовать как подмодуль в другом проекте
|
||
|
||
```bash
|
||
git submodule add https://git.p7net.ru/tools/git_man.git tools/git_man
|
||
```
|
||
|
||
---
|
||
|
||
## 📋 Требования
|
||
|
||
- **Git** (версия 1.8.5 или выше; для `--renormalize` рекомендуется 2.16+)
|
||
- **Bash** (4.0+) — для `*.sh` на Linux / macOS / WSL
|
||
- **PowerShell** 5.1+ или 7+ — для `setup-1c-repo.ps1` / `.cmd` на Windows
|
||
|
||
---
|
||
|
||
## 🔧 Особенности работы с подмодулями
|
||
|
||
### Настройка игнорирования в .gitmodules
|
||
|
||
После регистрации подмодулей в файле `.gitmodules` могут появиться секции с настройкой `ignore`:
|
||
|
||
```ini
|
||
[submodule "tools/cam"]
|
||
path = tools/cam
|
||
url = https://git.p7net.ru/tools/cam.git
|
||
ignore = dirty
|
||
```
|
||
|
||
Это позволяет основному репозиторию игнорировать изменения в рабочей директории подмодулей, что особенно полезно при работе с большим количеством вложенных репозиториев.
|
||
|
||
**Важно:** Эта настройка не скрывает сами подмодули, а только их внутреннее состояние. Подмодули всегда остаются частью репозитория.
|
||
|
||
---
|
||
|
||
## 📌 История версий
|
||
|
||
Текущая версия: **1.2.0** (2026-07-27).
|
||
|
||
Кратко по релизам — см. [CHANGELOG.md](./CHANGELOG.md).
|
||
|
||
| Версия | Дата | Суть |
|
||
|--------|------|------|
|
||
| **1.2.0** | 2026-07-27 | `setup-1c-repo` — настройки Git под выгрузку конфигуратора 1С |
|
||
| **1.0.6** | 2026-07-20 | Автоснятие из `.gitignore`, fix macOS, `--version` |
|
||
| **1.1.0** | 2025-07-19 | Настройка `ignore` для подмодулей |
|
||
| **1.0.0** | 2025-07-19 | Первый стабильный релиз |
|
||
|
||
Проверка версии:
|
||
```bash
|
||
./setup-1c-repo.sh --version
|
||
./register-submodules.sh --version
|
||
```
|
||
|
||
---
|
||
|
||
## 👤 Автор
|
||
|
||
**Michael BAG**
|
||
- Email: [mk@p7net.ru](mailto:mk@p7net.ru)
|
||
- Репозиторий: [https://git.p7net.ru/tools/git_man](https://git.p7net.ru/tools/git_man)
|
||
|
||
---
|
||
|
||
## 🤝 Вклад в развитие
|
||
|
||
1. Форкните репозиторий
|
||
2. Создайте ветку для ваших изменений (`git checkout -b feature/amazing-feature`)
|
||
3. Закоммитьте изменения (`git commit -m 'Add amazing feature'`)
|
||
4. Отправьте изменения (`git push origin feature/amazing-feature`)
|
||
5. Создайте Pull Request
|
||
|
||
---
|
||
|
||
## 📄 Лицензия
|
||
|
||
MIT License
|
||
|
||
Copyright (c) 2024-2025 Michael BAG
|
||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
of this software and associated documentation files (the "Software"), to deal
|
||
in the Software without restriction, including without limitation the rights
|
||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
copies of the Software, and to permit persons to whom the Software is
|
||
furnished to do so, subject to the following conditions:
|
||
|
||
The above copyright notice and this permission notice shall be included in all
|
||
copies or substantial portions of the Software.
|
||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
SOFTWARE.
|
||
|
||
---
|
||
|
||
## 📝 Обновление
|
||
|
||
```bash
|
||
git pull origin main
|
||
```
|
||
|
||
Для обновления подмодулей (если используются):
|
||
```bash
|
||
git submodule update --init --recursive
|
||
```
|
||
|
||
---
|
||
|
||
## 📞 Контакты
|
||
|
||
- **Автор:** Michael BAG ([mk@p7net.ru](mailto:mk@p7net.ru))
|
||
- **Репозиторий:** [https://git.p7net.ru/tools/git_man](https://git.p7net.ru/tools/git_man)
|
||
- **Проблемы/Предложения:** [https://git.p7net.ru/tools/git_man/issues](https://git.p7net.ru/tools/git_man/issues)
|