Files
mlflow-practice/scripts/setup_git.sh
T

149 lines
6.7 KiB
Bash
Executable File

#!/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 " (если спросит пароль — токен не подхватился)"