Обновить register-submodules.sh
## 📋 Новые опции в скрипте | Опция | Описание | |-------|----------| | `--ignore=MODE` | Установить режим игнорирования для ВСЕХ подмодулей | | `--ignore-submodule PATH:MODE` | Установить режим для конкретного подмодуля | | `--remove-ignore` | Удалить все настройки игнорирования | ### Режимы игнорирования (`MODE`) | Режим | Что делает | |-------|------------| | `all` | Полностью скрывает изменения в подмодулях (не показывает ничего) | | `dirty` | Скрывает только изменения в файлах подмодуля | | `untracked` | Скрывает только неотслеживаемые файлы в подмодуле | | `none` | Показывает все изменения (поведение по умолчанию) | --- ## 📝 Примеры использования ```bash # 1. Регистрация с игнорированием всех изменений ./register-submodules.sh --ignore=all # 2. Регистрация с игнорированием только dirty-изменений ./register-submodules.sh --ignore=dirty # 3. Установить ignore только для конкретного подмодуля ./register-submodules.sh --ignore-submodule tools/cam:dirty # 4. Удалить все настройки игнорирования ./register-submodules.sh --remove-ignore # 5. Комбинация: регистрация + игнорирование ./register-submodules.sh --ignore=all --verbose # 6. Только обновить ignore для существующих подмодулей ./register-submodules.sh --ignore=dirty --dry-run ``` --- ## 📊 Пример вывода ``` ============================================================ 📦 Регистрация вложенных репозиториев как подмодулей ============================================================ 🔧 Режим игнорирования для ВСЕХ подмодулей: all → полностью скрывает изменения в подмодулях ▶ Поиск вложенных репозиториев... ✅ Найдено 15 вложенных репозиториев ▶ Регистрация подмодулей... ➕ Регистрация: diadoc.ext.rhana URL: https://git.p7net.ru/1c/diadoc.ext.rhana.git ✅ Подмодуль зарегистрирован: diadoc.ext.rhana ✅ Установлен ignore=all для diadoc.ext.rhana ➕ Регистрация: tools/cam URL: https://git.p7net.ru/tools/cam.git ✅ Подмодуль зарегистрирован: tools/cam ✅ Установлен ignore=all для tools/cam ... ============================================================ 📊 Статистика ============================================================ Всего найдено: 15 Зарегистрировано: 12 Пропущено: 2 Без URL: 1 🔧 Режим игнорирования: all Файл .gitmodules обновлён ✅ Подмодули зарегистрированы! Следующие шаги: 1. Проверьте изменения: git status 2. Посмотрите подмодули: git submodule status 3. Закоммитьте изменения: git commit -m "Зарегистрированы все подмодули" 4. Отправьте на сервер: git push ============================================================ ``` --- ## 📄 Структура `.gitmodules` после настройки ```ini [submodule "diadoc.ext.rhana"] path = diadoc.ext.rhana url = https://git.p7net.ru/1c/diadoc.ext.rhana.git ignore = all [submodule "tools/cam"] path = tools/cam url = https://git.p7net.ru/tools/cam.git ignore = all ``` Теперь скрипт полностью управляет подмодулями, включая настройку игнорирования их состояния в основном репозитории! 🚀
This commit is contained in:
+231
-101
@@ -2,18 +2,29 @@
|
|||||||
# ============================================================
|
# ============================================================
|
||||||
# register-submodules.sh - Регистрация всех вложенных репозиториев как подмодулей
|
# register-submodules.sh - Регистрация всех вложенных репозиториев как подмодулей
|
||||||
#
|
#
|
||||||
|
# Автор: Michael BAG <mk@p7net.ru>
|
||||||
|
# Репозиторий: https://git.p7net.ru/tools/git_man
|
||||||
|
#
|
||||||
# Использование:
|
# Использование:
|
||||||
# ./register-submodules.sh [--help] [--dry-run] [--force]
|
# ./register-submodules.sh [--help] [--dry-run] [--force] [--ignore=all|dirty|untracked|none]
|
||||||
#
|
#
|
||||||
# Опции:
|
# Опции:
|
||||||
# --help Показать эту справку
|
# --help, -h Показать эту справку
|
||||||
# --dry-run Только показать, что будет сделано (без изменений)
|
# --dry-run Только показать, что будет сделано (без изменений)
|
||||||
# --force Принудительно перерегистрировать подмодули
|
# --force, -f Принудительно перерегистрировать подмодули
|
||||||
# --verbose Подробный вывод
|
# --ignore=MODE Установить режим игнорирования для всех подмодулей
|
||||||
|
# all - игнорировать всё (не показывать изменения)
|
||||||
|
# dirty - игнорировать только изменения в файлах
|
||||||
|
# untracked - игнорировать только неотслеживаемые файлы
|
||||||
|
# none - показывать все изменения (по умолчанию)
|
||||||
|
# --ignore-submodule PATH Установить игнорирование для конкретного подмодуля
|
||||||
|
# --verbose, -v Подробный вывод
|
||||||
|
# --quiet, -q Минимальный вывод (только ошибки)
|
||||||
#
|
#
|
||||||
# Описание:
|
# Описание:
|
||||||
# Скрипт находит все вложенные репозитории (папки с .git),
|
# Скрипт находит все вложенные репозитории (папки с .git),
|
||||||
# определяет их URL и регистрирует как подмодули в .gitmodules.
|
# определяет их URL и регистрирует как подмодули в .gitmodules.
|
||||||
|
# Также позволяет настроить игнорирование состояния подмодулей.
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|
||||||
set -e # Остановка при ошибке
|
set -e # Остановка при ошибке
|
||||||
@@ -31,43 +42,43 @@ show_help() {
|
|||||||
./register-submodules.sh [ОПЦИИ]
|
./register-submodules.sh [ОПЦИИ]
|
||||||
|
|
||||||
ОПЦИИ:
|
ОПЦИИ:
|
||||||
--help Показать эту справку
|
--help, -h Показать эту справку
|
||||||
--dry-run Только показать, что будет сделано (без изменений)
|
--dry-run Только показать, что будет сделано (без изменений)
|
||||||
--force Принудительно перерегистрировать подмодули
|
--force, -f Принудительно перерегистрировать подмодули
|
||||||
(удаляет существующие и создаёт заново)
|
(удаляет существующие и создаёт заново)
|
||||||
--verbose Подробный вывод (показывает все действия)
|
|
||||||
--quiet Минимальный вывод (только ошибки)
|
|
||||||
|
|
||||||
ОПИСАНИЕ:
|
--ignore=MODE Установить режим игнорирования для ВСЕХ подмодулей
|
||||||
Скрипт находит все вложенные репозитории (папки с .git),
|
all - игнорировать всё (полностью скрыть изменения)
|
||||||
определяет их URL и регистрирует как подмодули в .gitmodules.
|
dirty - игнорировать только изменения в файлах
|
||||||
|
untracked - игнорировать только неотслеживаемые файлы
|
||||||
|
none - показывать все изменения (по умолчанию)
|
||||||
|
|
||||||
Вложенные репозитории — это папки, которые являются
|
--ignore-submodule PATH:MODE Установить режим для конкретного подмодуля
|
||||||
самостоятельными Git-репозиториями внутри основного.
|
Пример: --ignore-submodule tools/cam:dirty
|
||||||
|
|
||||||
|
--remove-ignore Удалить все настройки игнорирования из .gitmodules
|
||||||
|
|
||||||
|
--verbose, -v Подробный вывод
|
||||||
|
--quiet, -q Минимальный вывод (только ошибки)
|
||||||
|
|
||||||
ПРИМЕРЫ:
|
ПРИМЕРЫ:
|
||||||
# Базовая регистрация
|
# Базовая регистрация
|
||||||
./register-submodules.sh
|
./register-submodules.sh
|
||||||
|
|
||||||
# Просмотр того, что будет сделано
|
# Регистрация с игнорированием всех изменений в подмодулях
|
||||||
./register-submodules.sh --dry-run
|
./register-submodules.sh --ignore=all
|
||||||
|
|
||||||
# Принудительная перерегистрация всех подмодулей
|
# Регистрация с игнорированием только dirty-изменений
|
||||||
./register-submodules.sh --force --verbose
|
./register-submodules.sh --ignore=dirty
|
||||||
|
|
||||||
# Тихий режим (только ошибки)
|
# Удалить все настройки игнорирования
|
||||||
./register-submodules.sh --quiet
|
./register-submodules.sh --remove-ignore
|
||||||
|
|
||||||
ПОСЛЕ РЕГИСТРАЦИИ:
|
# Установить ignore только для конкретного подмодуля
|
||||||
1. Проверьте изменения: git status
|
./register-submodules.sh --ignore-submodule tools/cam:dirty
|
||||||
2. Посмотрите подмодули: git submodule status
|
|
||||||
3. Закоммитьте изменения: git commit -m "Зарегистрированы все подмодули"
|
|
||||||
4. Отправьте на сервер: git push
|
|
||||||
|
|
||||||
ПРИ КЛОНИРОВАНИИ РЕПОЗИТОРИЯ:
|
# Просмотр без изменений
|
||||||
git clone --recursive <URL>
|
./register-submodules.sh --dry-run --ignore=all
|
||||||
# Или после клонирования:
|
|
||||||
git submodule update --init --recursive
|
|
||||||
|
|
||||||
============================================================
|
============================================================
|
||||||
EOF
|
EOF
|
||||||
@@ -81,6 +92,9 @@ DRY_RUN=false
|
|||||||
FORCE=false
|
FORCE=false
|
||||||
VERBOSE=false
|
VERBOSE=false
|
||||||
QUIET=false
|
QUIET=false
|
||||||
|
REMOVE_IGNORE=false
|
||||||
|
IGNORE_MODE=""
|
||||||
|
IGNORE_SUBMODULE=""
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# Разбор аргументов командной строки
|
# Разбор аргументов командной строки
|
||||||
@@ -106,6 +120,18 @@ while [[ $# -gt 0 ]]; do
|
|||||||
QUIET=true
|
QUIET=true
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
--remove-ignore)
|
||||||
|
REMOVE_IGNORE=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--ignore=*)
|
||||||
|
IGNORE_MODE="${1#*=}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--ignore-submodule=*)
|
||||||
|
IGNORE_SUBMODULE="${1#*=}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo -e "\033[0;31m❌ Неизвестная опция: $1\033[0m"
|
echo -e "\033[0;31m❌ Неизвестная опция: $1\033[0m"
|
||||||
echo " Используйте --help для справки"
|
echo " Используйте --help для справки"
|
||||||
@@ -118,12 +144,11 @@ done
|
|||||||
# Настройка вывода
|
# Настройка вывода
|
||||||
# ============================================================
|
# ============================================================
|
||||||
if [ "$QUIET" = true ]; then
|
if [ "$QUIET" = true ]; then
|
||||||
# В тихом режиме перенаправляем всё в /dev/null, кроме ошибок
|
exec 3>&1
|
||||||
exec 3>&1 # Сохраняем stdout
|
|
||||||
exec >/dev/null 2>&1
|
exec >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Цвета для вывода (если не тихий режим)
|
# Цвета для вывода
|
||||||
if [ "$QUIET" != true ]; then
|
if [ "$QUIET" != true ]; then
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
GREEN='\033[0;32m'
|
GREEN='\033[0;32m'
|
||||||
@@ -131,7 +156,7 @@ if [ "$QUIET" != true ]; then
|
|||||||
BLUE='\033[0;34m'
|
BLUE='\033[0;34m'
|
||||||
CYAN='\033[0;36m'
|
CYAN='\033[0;36m'
|
||||||
MAGENTA='\033[0;35m'
|
MAGENTA='\033[0;35m'
|
||||||
NC='\033[0m' # No Color
|
NC='\033[0m'
|
||||||
else
|
else
|
||||||
RED=''; GREEN=''; YELLOW=''; BLUE=''; CYAN=''; MAGENTA=''; NC=''
|
RED=''; GREEN=''; YELLOW=''; BLUE=''; CYAN=''; MAGENTA=''; NC=''
|
||||||
fi
|
fi
|
||||||
@@ -176,21 +201,79 @@ log_step() {
|
|||||||
# ============================================================
|
# ============================================================
|
||||||
log_step "Проверка окружения..."
|
log_step "Проверка окружения..."
|
||||||
|
|
||||||
# Проверка, что мы в корне Git-репозитория
|
|
||||||
if [ ! -d ".git" ]; then
|
if [ ! -d ".git" ]; then
|
||||||
log_error "Текущая папка не является Git-репозиторием"
|
log_error "Текущая папка не является Git-репозиторием"
|
||||||
echo " Запустите скрипт из корня основного репозитория" >&2
|
echo " Запустите скрипт из корня основного репозитория" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_success "Текущая папка является Git-репозиторием"
|
|
||||||
|
|
||||||
# Проверка наличия Git
|
|
||||||
if ! command -v git &> /dev/null; then
|
if ! command -v git &> /dev/null; then
|
||||||
log_error "Git не установлен"
|
log_error "Git не установлен"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
log_success "Окружение проверено"
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Функция установки ignore для подмодуля
|
||||||
|
# ============================================================
|
||||||
|
set_submodule_ignore() {
|
||||||
|
local path="$1"
|
||||||
|
local mode="$2"
|
||||||
|
|
||||||
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
echo " [DRY-RUN] git config --file .gitmodules submodule.$path.ignore $mode"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
git config --file .gitmodules "submodule.$path.ignore" "$mode" 2>/dev/null
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Функция удаления ignore для подмодуля
|
||||||
|
# ============================================================
|
||||||
|
remove_submodule_ignore() {
|
||||||
|
local path="$1"
|
||||||
|
|
||||||
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
echo " [DRY-RUN] git config --file .gitmodules --unset submodule.$path.ignore"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
git config --file .gitmodules --unset "submodule.$path.ignore" 2>/dev/null
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Функция регистрации подмодуля
|
||||||
|
# ============================================================
|
||||||
|
register_submodule() {
|
||||||
|
local repo="$1"
|
||||||
|
local url="$2"
|
||||||
|
|
||||||
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
echo " [DRY-RUN] git submodule add $url $repo"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$FORCE" = true ]; then
|
||||||
|
git config --remove-section "submodule.$repo" 2>/dev/null || true
|
||||||
|
git config --file .gitmodules --remove-section "submodule.$repo" 2>/dev/null || true
|
||||||
|
if [ -d "$repo" ] && [ -z "$(ls -A "$repo" 2>/dev/null)" ]; then
|
||||||
|
rm -rf "$repo"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if git config --file .gitmodules --get "submodule.$repo.url" >/dev/null 2>&1; then
|
||||||
|
log_debug "Подмодуль $repo уже зарегистрирован"
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
git submodule add "$url" "$repo" 2>/dev/null
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# Информация о режиме работы
|
# Информация о режиме работы
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -208,32 +291,73 @@ if [ "$QUIET" != true ]; then
|
|||||||
|
|
||||||
if [ "$FORCE" = true ]; then
|
if [ "$FORCE" = true ]; then
|
||||||
echo -e "${YELLOW}⚠️ РЕЖИМ ПРИНУДИТЕЛЬНОЙ ПЕРЕРЕГИСТРАЦИИ (--force)${NC}"
|
echo -e "${YELLOW}⚠️ РЕЖИМ ПРИНУДИТЕЛЬНОЙ ПЕРЕРЕГИСТРАЦИИ (--force)${NC}"
|
||||||
echo " Существующие подмодули будут перезаписаны"
|
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$VERBOSE" = true ]; then
|
if [ -n "$IGNORE_MODE" ]; then
|
||||||
echo -e "${BLUE}🔍 Подробный режим (--verbose)${NC}"
|
echo -e "${CYAN}🔧 Режим игнорирования для ВСЕХ подмодулей: ${MAGENTA}$IGNORE_MODE${NC}"
|
||||||
|
case "$IGNORE_MODE" in
|
||||||
|
all) echo " → полностью скрывает изменения в подмодулях" ;;
|
||||||
|
dirty) echo " → скрывает только изменения в файлах" ;;
|
||||||
|
untracked) echo " → скрывает только неотслеживаемые файлы" ;;
|
||||||
|
none) echo " → показывает все изменения (по умолчанию)" ;;
|
||||||
|
*) log_warning "Неизвестный режим: $IGNORE_MODE. Используйте: all, dirty, untracked, none" ;;
|
||||||
|
esac
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$IGNORE_SUBMODULE" ]; then
|
||||||
|
echo -e "${CYAN}🔧 Режим игнорирования для конкретного подмодуля: ${MAGENTA}$IGNORE_SUBMODULE${NC}"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$REMOVE_IGNORE" = true ]; then
|
||||||
|
echo -e "${YELLOW}🔧 Удаление всех настроек игнорирования из .gitmodules${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# Проверка .gitmodules
|
# Удаление настроек игнорирования (если указано)
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
if [ "$REMOVE_IGNORE" = true ]; then
|
||||||
|
log_step "Удаление настроек игнорирования..."
|
||||||
|
|
||||||
if [ -f ".gitmodules" ]; then
|
if [ -f ".gitmodules" ]; then
|
||||||
if [ "$FORCE" = true ]; then
|
# Найти все секции подмодулей
|
||||||
log_warning "Файл .gitmodules существует — будет перезаписан (--force)"
|
sections=$(git config --file .gitmodules --name-only --get-regexp "submodule\..*\.ignore" 2>/dev/null | cut -d. -f1-2 | sort -u)
|
||||||
if [ "$DRY_RUN" = false ]; then
|
|
||||||
git rm --cached .gitmodules 2>/dev/null || true
|
if [ -n "$sections" ]; then
|
||||||
rm -f .gitmodules
|
for section in $sections; do
|
||||||
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
echo " [DRY-RUN] git config --file .gitmodules --unset $section.ignore"
|
||||||
|
else
|
||||||
|
git config --file .gitmodules --unset "$section.ignore" 2>/dev/null
|
||||||
|
log_success "Удалён ignore для: $section"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
log_info "Нет настроек игнорирования для удаления"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$DRY_RUN" = false ] && [ -s ".gitmodules" ]; then
|
||||||
|
git add .gitmodules 2>/dev/null || true
|
||||||
|
log_success "Изменения добавлены в индекс"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
log_info "Файл .gitmodules уже существует"
|
log_warning "Файл .gitmodules не существует"
|
||||||
log_info "Будет выполнено обновление существующих записей"
|
fi
|
||||||
|
|
||||||
|
if [ "$QUIET" != true ]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}✅ Настройки игнорирования удалены${NC}"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Если только удаление — выходим
|
||||||
|
if [ "$IGNORE_MODE" = "" ] && [ "$IGNORE_SUBMODULE" = "" ] && [ "$FORCE" = false ]; then
|
||||||
|
exit 0
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
log_info "Файл .gitmodules не существует — будет создан"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -241,23 +365,16 @@ fi
|
|||||||
# ============================================================
|
# ============================================================
|
||||||
log_step "Поиск вложенных репозиториев..."
|
log_step "Поиск вложенных репозиториев..."
|
||||||
|
|
||||||
# Временный файл для хранения путей
|
|
||||||
TEMP_FILE=$(mktemp)
|
TEMP_FILE=$(mktemp)
|
||||||
|
|
||||||
# Найти все папки с .git (исключая сам .git)
|
|
||||||
find . -type d -name ".git" -exec dirname {} \; 2>/dev/null | sort > "$TEMP_FILE"
|
find . -type d -name ".git" -exec dirname {} \; 2>/dev/null | sort > "$TEMP_FILE"
|
||||||
|
|
||||||
# Удалить корневой репозиторий из списка
|
|
||||||
sed -i '/^\.$/d' "$TEMP_FILE" 2>/dev/null || true
|
sed -i '/^\.$/d' "$TEMP_FILE" 2>/dev/null || true
|
||||||
|
|
||||||
# Проверка, есть ли что-то найдено
|
|
||||||
if [ ! -s "$TEMP_FILE" ]; then
|
if [ ! -s "$TEMP_FILE" ]; then
|
||||||
log_warning "Вложенные репозитории не найдены"
|
log_warning "Вложенные репозитории не найдены"
|
||||||
rm -f "$TEMP_FILE"
|
rm -f "$TEMP_FILE"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Подсчёт количества
|
|
||||||
TOTAL=$(wc -l < "$TEMP_FILE" | tr -d ' ')
|
TOTAL=$(wc -l < "$TEMP_FILE" | tr -d ' ')
|
||||||
log_success "Найдено $TOTAL вложенных репозиториев"
|
log_success "Найдено $TOTAL вложенных репозиториев"
|
||||||
|
|
||||||
@@ -270,41 +387,6 @@ if [ "$VERBOSE" = true ]; then
|
|||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ============================================================
|
|
||||||
# Функция регистрации подмодуля
|
|
||||||
# ============================================================
|
|
||||||
register_submodule() {
|
|
||||||
local repo="$1"
|
|
||||||
local url="$2"
|
|
||||||
|
|
||||||
if [ "$DRY_RUN" = true ]; then
|
|
||||||
echo " [DRY-RUN] git submodule add $url $repo"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Если принудительная перерегистрация — удаляем существующий
|
|
||||||
if [ "$FORCE" = true ]; then
|
|
||||||
# Удаляем из .git/config
|
|
||||||
git config --remove-section "submodule.$repo" 2>/dev/null || true
|
|
||||||
# Удаляем из .gitmodules
|
|
||||||
git config --file .gitmodules --remove-section "submodule.$repo" 2>/dev/null || true
|
|
||||||
# Удаляем папку подмодуля, если она пуста
|
|
||||||
if [ -d "$repo" ] && [ -z "$(ls -A "$repo" 2>/dev/null)" ]; then
|
|
||||||
rm -rf "$repo"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Проверяем, не зарегистрирован ли уже
|
|
||||||
if git config --file .gitmodules --get "submodule.$repo.url" >/dev/null 2>&1; then
|
|
||||||
log_debug "Подмодуль $repo уже зарегистрирован"
|
|
||||||
return 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Регистрация
|
|
||||||
git submodule add "$url" "$repo" 2>/dev/null
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# Основной цикл регистрации
|
# Основной цикл регистрации
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -316,12 +398,10 @@ ERRORS=0
|
|||||||
NO_URL=0
|
NO_URL=0
|
||||||
|
|
||||||
while read repo; do
|
while read repo; do
|
||||||
# Пропустить пустые строки
|
|
||||||
[ -z "$repo" ] && continue
|
[ -z "$repo" ] && continue
|
||||||
|
|
||||||
log_debug "Обработка: $repo"
|
log_debug "Обработка: $repo"
|
||||||
|
|
||||||
# Получить URL
|
|
||||||
if [ -d "$repo" ]; then
|
if [ -d "$repo" ]; then
|
||||||
cd "$repo" 2>/dev/null
|
cd "$repo" 2>/dev/null
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
@@ -347,7 +427,6 @@ while read repo; do
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Регистрация
|
|
||||||
if [ "$QUIET" != true ]; then
|
if [ "$QUIET" != true ]; then
|
||||||
echo -e "${GREEN}➕ Регистрация:${NC} $repo"
|
echo -e "${GREEN}➕ Регистрация:${NC} $repo"
|
||||||
echo -e " ${CYAN}URL:${NC} $url"
|
echo -e " ${CYAN}URL:${NC} $url"
|
||||||
@@ -360,6 +439,14 @@ while read repo; do
|
|||||||
0)
|
0)
|
||||||
log_success "Подмодуль зарегистрирован: $repo"
|
log_success "Подмодуль зарегистрирован: $repo"
|
||||||
REGISTERED=$((REGISTERED + 1))
|
REGISTERED=$((REGISTERED + 1))
|
||||||
|
|
||||||
|
# Если задан режим игнорирования для всех подмодулей
|
||||||
|
if [ -n "$IGNORE_MODE" ]; then
|
||||||
|
set_submodule_ignore "$repo" "$IGNORE_MODE"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
log_debug "Установлен ignore=$IGNORE_MODE для $repo"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
log_debug "Пропущен (уже зарегистрирован): $repo"
|
log_debug "Пропущен (уже зарегистрирован): $repo"
|
||||||
@@ -375,7 +462,40 @@ while read repo; do
|
|||||||
|
|
||||||
done < "$TEMP_FILE"
|
done < "$TEMP_FILE"
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Настройка игнорирования для конкретного подмодуля
|
||||||
|
# ============================================================
|
||||||
|
if [ -n "$IGNORE_SUBMODULE" ]; then
|
||||||
|
# Формат: path:mode
|
||||||
|
if [[ "$IGNORE_SUBMODULE" =~ ^([^:]+):(.+)$ ]]; then
|
||||||
|
SUBMODULE_PATH="${BASH_REMATCH[1]}"
|
||||||
|
SUBMODULE_MODE="${BASH_REMATCH[2]}"
|
||||||
|
|
||||||
|
log_step "Настройка игнорирования для: $SUBMODULE_PATH (режим: $SUBMODULE_MODE)"
|
||||||
|
|
||||||
|
# Проверить, существует ли такой подмодуль
|
||||||
|
if git config --file .gitmodules --get "submodule.$SUBMODULE_PATH.url" >/dev/null 2>&1; then
|
||||||
|
set_submodule_ignore "$SUBMODULE_PATH" "$SUBMODULE_MODE"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
log_success "Установлен ignore=$SUBMODULE_MODE для $SUBMODULE_PATH"
|
||||||
|
else
|
||||||
|
log_error "Не удалось установить ignore для $SUBMODULE_PATH"
|
||||||
|
ERRORS=$((ERRORS + 1))
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_warning "Подмодуль $SUBMODULE_PATH не найден в .gitmodules"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_error "Неверный формат для --ignore-submodule. Используйте: path:mode"
|
||||||
|
log_error "Пример: --ignore-submodule tools/cam:dirty"
|
||||||
|
ERRORS=$((ERRORS + 1))
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
# Очистка
|
# Очистка
|
||||||
|
# ============================================================
|
||||||
rm -f "$TEMP_FILE"
|
rm -f "$TEMP_FILE"
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -393,13 +513,19 @@ if [ "$QUIET" != true ]; then
|
|||||||
if [ $ERRORS -gt 0 ]; then
|
if [ $ERRORS -gt 0 ]; then
|
||||||
echo -e " ${RED}Ошибок:${NC} $ERRORS"
|
echo -e " ${RED}Ошибок:${NC} $ERRORS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -n "$IGNORE_MODE" ]; then
|
||||||
echo ""
|
echo ""
|
||||||
|
echo -e "${CYAN}🔧 Режим игнорирования:${NC} $IGNORE_MODE"
|
||||||
|
echo " Файл .gitmodules обновлён"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$DRY_RUN" = true ]; then
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
echo ""
|
||||||
echo -e "${YELLOW}⚠️ Это был просмотр (--dry-run). Изменения НЕ применены.${NC}"
|
echo -e "${YELLOW}⚠️ Это был просмотр (--dry-run). Изменения НЕ применены.${NC}"
|
||||||
echo " Уберите --dry-run для выполнения."
|
echo " Уберите --dry-run для выполнения."
|
||||||
echo ""
|
|
||||||
fi
|
fi
|
||||||
|
echo ""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -407,7 +533,7 @@ fi
|
|||||||
# ============================================================
|
# ============================================================
|
||||||
if [ "$DRY_RUN" = false ] && [ $REGISTERED -gt 0 ]; then
|
if [ "$DRY_RUN" = false ] && [ $REGISTERED -gt 0 ]; then
|
||||||
if [ "$QUIET" != true ]; then
|
if [ "$QUIET" != true ]; then
|
||||||
echo -e "${GREEN}✅ Все подмодули зарегистрированы!${NC}"
|
echo -e "${GREEN}✅ Подмодули зарегистрированы!${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${CYAN}Следующие шаги:${NC}"
|
echo -e "${CYAN}Следующие шаги:${NC}"
|
||||||
echo " 1. Проверьте изменения: git status"
|
echo " 1. Проверьте изменения: git status"
|
||||||
@@ -415,13 +541,19 @@ if [ "$DRY_RUN" = false ] && [ $REGISTERED -gt 0 ]; then
|
|||||||
echo " 3. Закоммитьте изменения: git commit -m \"Зарегистрированы все подмодули\""
|
echo " 3. Закоммитьте изменения: git commit -m \"Зарегистрированы все подмодули\""
|
||||||
echo " 4. Отправьте на сервер: git push"
|
echo " 4. Отправьте на сервер: git push"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${YELLOW}⚠️ Внимание:${NC} При первом клонировании выполните:"
|
echo -e "${YELLOW}⚠️ При первом клонировании выполните:${NC}"
|
||||||
echo " git submodule update --init --recursive"
|
echo " git submodule update --init --recursive"
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
elif [ "$DRY_RUN" = false ] && [ $REGISTERED -eq 0 ] && [ $SKIPPED -eq 0 ]; then
|
elif [ "$DRY_RUN" = false ] && [ -n "$IGNORE_MODE" ]; then
|
||||||
if [ "$QUIET" != true ]; then
|
if [ "$QUIET" != true ]; then
|
||||||
echo -e "${YELLOW}⚠️ Не найдено подмодулей для регистрации${NC}"
|
echo -e "${GREEN}✅ Настройки игнорирования обновлены!${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}Следующие шаги:${NC}"
|
||||||
|
echo " 1. Проверьте изменения: git status"
|
||||||
|
echo " 2. Закоммитьте изменения: git commit -m \"Настроен ignore для подмодулей\""
|
||||||
|
echo " 3. Отправьте на сервер: git push"
|
||||||
|
echo ""
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -431,5 +563,3 @@ if [ "$QUIET" != true ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user