241 lines
9.1 KiB
Markdown
241 lines
9.1 KiB
Markdown
# Git Management Tools (`git_man`)
|
|
|
|
Набор скриптов и утилит для управления Git-репозиториями, работы с подмодулями и автоматизации повседневных задач.
|
|
|
|
---
|
|
|
|
## 📦 Содержание
|
|
|
|
- [Описание](#описание)
|
|
- [Скрипты](#скрипты)
|
|
- [register-submodules.sh](#register-submodulessh)
|
|
- [Установка](#установка)
|
|
- [Использование](#использование)
|
|
- [Требования](#требования)
|
|
- [Автор](#автор)
|
|
- [Лицензия](#лицензия)
|
|
|
|
---
|
|
|
|
## 📖 Описание
|
|
|
|
Данный репозиторий содержит вспомогательные скрипты для работы с Git в проектах, где используется множество вложенных репозиториев (монорепозиторий с подмодулями).
|
|
|
|
Основные задачи:
|
|
- Автоматическая регистрация вложенных репозиториев как подмодулей
|
|
- Централизованное управление множеством репозиториев
|
|
- Настройка игнорирования состояния подмодулей в основном репозитории
|
|
- Автоматизация рутинных операций
|
|
|
|
---
|
|
|
|
## 🛠️ Скрипты
|
|
|
|
### `register-submodules.sh`
|
|
|
|
**Описание:**
|
|
Автоматически находит все вложенные Git-репозитории в текущей папке и регистрирует их как подмодули в `.gitmodules`. Поддерживает настройку игнорирования состояния подмодулей.
|
|
|
|
**Использование:**
|
|
```bash
|
|
./register-submodules.sh [ОПЦИИ]
|
|
```
|
|
|
|
**Опции:**
|
|
|
|
| Опция | Описание |
|
|
|-------|----------|
|
|
| `--help`, `-h` | Показать справку |
|
|
| `--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 # Скрипт регистрации подмодулей
|
|
└── scripts/ # Дополнительные скрипты (планируется)
|
|
```
|
|
|
|
---
|
|
|
|
## ⚙️ Установка
|
|
|
|
### Способ 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 или выше)
|
|
- **Bash** (4.0+)
|
|
- **Unix-подобная ОС** (Linux, macOS) или **WSL** на Windows
|
|
|
|
---
|
|
|
|
## 🔧 Особенности работы с подмодулями
|
|
|
|
### Настройка игнорирования в .gitmodules
|
|
|
|
После регистрации подмодулей в файле `.gitmodules` могут появиться секции с настройкой `ignore`:
|
|
|
|
```ini
|
|
[submodule "tools/cam"]
|
|
path = tools/cam
|
|
url = https://git.p7net.ru/tools/cam.git
|
|
ignore = dirty
|
|
```
|
|
|
|
Это позволяет основному репозиторию игнорировать изменения в рабочей директории подмодулей, что особенно полезно при работе с большим количеством вложенных репозиториев.
|
|
|
|
**Важно:** Эта настройка не скрывает сами подмодули, а только их внутреннее состояние. Подмодули всегда остаются частью репозитория.
|
|
|
|
---
|
|
|
|
## 👤 Автор
|
|
|
|
**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)
|