#!/bin/bash # ============================================================ # Глобальная настройка Git (HTTPS + токен, без SSH) # Запуск: bash scripts/setup_git.sh # ============================================================ set -e echo "🔧 Глобальная настройка Git" echo "============================" echo "" if ! command -v git &> /dev/null; then echo "❌ Git не установлен!" echo " macOS: brew install git" echo " Ubuntu: sudo apt install git" exit 1 fi echo "✅ Git: $(git --version)" echo "" # ─── 1. Имя и email ────────────────────────────────────────── DEFAULT_NAME="admin" DEFAULT_EMAIL="admin@e7.by" GIT_NAME="${GIT_NAME:-$DEFAULT_NAME}" GIT_EMAIL="${GIT_EMAIL:-$DEFAULT_EMAIL}" read -p "Имя [$GIT_NAME]: " input_name read -p "Email [$GIT_EMAIL]: " input_email git config --global user.name "${input_name:-$GIT_NAME}" git config --global user.email "${input_email:-$GIT_EMAIL}" echo "✅ user.name = $(git config --global user.name)" echo "✅ user.email = $(git config --global user.email)" echo "" # ─── 2. Базовые настройки ──────────────────────────────────── git config --global init.defaultBranch main git config --global core.autocrlf input git config --global core.safecrlf true git config --global core.longpaths true git config --global core.editor "vi" git config --global core.pager "less -FRX" git config --global color.ui auto git config --global pull.rebase true git config --global rebase.autoStash true git config --global push.default current echo "✅ Базовые настройки (main, rebase, colors, pager)" # ─── 3. Алиасы ─────────────────────────────────────────────── git config --global alias.st "status -sb" git config --global alias.co "checkout" git config --global alias.br "branch" git config --global alias.ci "commit" git config --global alias.cm "commit -m" git config --global alias.ca "commit --amend" git config --global alias.lg "log --oneline --graph --decorate --all" git config --global alias.last "log -1 HEAD --stat" git config --global alias.unstage "restore --staged" git config --global alias.discard "checkout --" git config --global alias.aliases "config --get-regexp ^alias\\." echo "✅ Алиасы: git st, git lg, git ci, git cm, git co, git br, git ca, git last" # ─── 4. Credential helper (хранение токенов) ───────────────── # macOS: токен в Keychain (безопасно, шифруется) # Linux: токен в ~/.git-credentials (файл, без шифрования) if [[ "$OSTYPE" == "darwin"* ]]; then git config --global credential.helper osxkeychain echo "✅ credential.helper = osxkeychain (macOS Keychain)" else git config --global credential.helper store chmod 600 ~/.git-credentials 2>/dev/null || true echo "✅ credential.helper = store (~/.git-credentials, chmod 600)" fi # ─── 5. Настройка токена для git.e7.by ──────────────────────── echo "" echo "🔐 Настройка токена для git.e7.by" echo "--------------------------------------------" echo " git.e7.by работает только через HTTPS + токен." echo " Токен можно создать в: Profile → Settings → Access Tokens" echo "" read -p "Введите токен (или Enter чтобы пропустить): " TOKEN if [ -n "$TOKEN" ]; then # Сохраняем токен через credential helper # Формат: https://username:token@host echo "https://core:${TOKEN}@git.e7.by" | git credential-store store 2>/dev/null || \ echo "https://core:${TOKEN}@git.e7.by" >> ~/.git-credentials 2>/dev/null || true # Для macOS Keychain — через security if [[ "$OSTYPE" == "darwin"* ]]; then # Записываем в Keychain напрямую security add-internet-password -s git.e7.by -a core -w "$TOKEN" -r https 2>/dev/null || true echo "✅ Токен сохранён в macOS Keychain (git.e7.by / core)" else chmod 600 ~/.git-credentials 2>/dev/null || true echo "✅ Токен сохранён в ~/.git-credentials" fi # ВАЖНО: remote URL должен быть БЕЗ токена! # Токен подхватится автоматически из credential helper echo "" echo "📌 Теперь добавляйте remote БЕЗ токена:" echo " git remote add origin https://git.e7.by/sandbox/repo.git" echo " git push -u origin main" echo " (токен подставится автоматически из credential helper)" else echo "⏭️ Токен не введён — пропускаю" echo " Добавьте позже:" echo " echo 'https://core:ТОКЕН@git.e7.by' >> ~/.git-credentials # Linux" echo " security add-internet-password -s git.e7.by -a core -w 'ТОКЕН' -r https # macOS" fi # ─── 6. Если репо уже есть — чистим токен из remote URL ────── echo "" echo "🧹 Проверка текущих remote на наличие токена в URL..." CLEANED=0 for repo_remote in $(git remote 2>/dev/null); do url=$(git remote get-url "$repo_remote" 2>/dev/null || true) if echo "$url" | grep -q "://.*:.*@"; then clean_url=$(echo "$url" | sed 's|://[^@]*@|://|') git remote set-url "$repo_remote" "$clean_url" echo " ✅ $repo_remote: токен удалён из URL" echo " было: $url" echo " стало: $clean_url" CLEANED=1 fi done if [ "$CLEANED" -eq 0 ]; then echo " ✅ Токенов в remote URL не найдено" fi # ─── 7. Финал ──────────────────────────────────────────────── echo "" echo "============================================" echo " ✅ Настройка завершена!" echo "============================================" echo "" echo "📋 Глобальные настройки:" echo "--------------------------------------------" git config --global --list echo "--------------------------------------------" echo "" echo "🧪 Проверка токена:" echo " git ls-remote https://git.e7.by/sandbox/mlflow-practice.git" echo " (если спросит пароль — токен не подхватился)"