#!/bin/bash # ============================================================================= # SmartSolTech - Настройка резервного репозитория # ============================================================================= set -e # Цвета для вывода GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' RED='\033[0;31m' NC='\033[0m' log() { echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1" } success() { echo -e "${GREEN}✅ $1${NC}" } warning() { echo -e "${YELLOW}⚠️ $1${NC}" } error() { echo -e "${RED}❌ $1${NC}" } echo "" echo "🔧 SmartSolTech - Настройка backup репозитория" echo "==============================================" echo "" # Проверка что мы в Git репозитории if [ ! -d ".git" ]; then error "Не найден Git репозиторий. Запустите скрипт из корня проекта." exit 1 fi # Показать текущие репозитории log "Текущие удаленные репозитории:" git remote -v echo "" # Функция добавления нового backup репозитория add_backup_repo() { local repo_url="$1" local repo_name="${2:-backup}" log "Добавление backup репозитория..." # Проверяем не существует ли уже такой remote if git remote | grep -q "^${repo_name}$"; then warning "Репозиторий $repo_name уже существует" git remote -v | grep "^${repo_name}" read -p "Заменить? (y/N): " replace_choice if [[ $replace_choice =~ ^[Yy]$ ]]; then git remote remove $repo_name else return 0 fi fi # Добавляем новый remote if git remote add $repo_name "$repo_url"; then success "Backup репозиторий $repo_name добавлен" # Проверяем подключение log "Проверка подключения..." if git ls-remote $repo_name > /dev/null 2>&1; then success "Подключение к $repo_name работает" # Предлагаем сделать первый push read -p "Отправить текущее состояние в backup? (y/N): " push_choice if [[ $push_choice =~ ^[Yy]$ ]]; then git push $repo_name master success "Backup создан в $repo_name" fi else error "Не удалось подключиться к $repo_name" git remote remove $repo_name return 1 fi else error "Не удалось добавить backup репозиторий" return 1 fi } # Обработка параметров case "${1:-}" in --help|-h) echo "Использование:" echo " $0 # Интерактивная настройка" echo " $0 # Добавить backup репозиторий" echo " $0 # Добавить с именем" echo " $0 --remove # Удалить backup репозиторий" echo " $0 --list # Показать все репозитории" echo "" echo "Примеры:" echo " $0 git@github.com:user/backup.git" echo " $0 git@server.com:backup.git mybkp" echo " $0 --remove backup" echo "" exit 0 ;; --list) log "Все удаленные репозитории:" git remote -v exit 0 ;; --remove) if [ -z "$2" ]; then error "Укажите имя репозитория для удаления" exit 1 fi log "Удаление репозитория $2..." if git remote remove "$2"; then success "Репозиторий $2 удален" else error "Не удалось удалить репозиторий $2" fi exit 0 ;; "") # Интерактивный режим echo "💡 Примеры URL репозиториев:" echo " git@github.com:username/repo-backup.git" echo " ssh://git@server.com:2222/user/backup.git" echo " https://github.com/username/repo-backup.git" echo "" read -p "Введите URL backup репозитория: " repo_url if [ -z "$repo_url" ]; then warning "URL не указан, выход" exit 0 fi read -p "Введите имя (backup): " repo_name repo_name="${repo_name:-backup}" add_backup_repo "$repo_url" "$repo_name" ;; *) # URL передан как параметр add_backup_repo "$1" "$2" ;; esac echo "" log "Обновленный список репозиториев:" git remote -v echo "" success "Готово!"