#!/bin/bash # Git 최신 소스 자동 업데이트 스크립트 # 서버에서 안전하게 최신 소스를 받기 위한 스크립트 # 스크립트 실행 권한 확인 및 부여 if [ ! -x "$0" ]; then echo "실행 권한이 없습니다. 권한을 부여합니다..." chmod +x "$0" echo "✅ 실행 권한이 부여되었습니다." fi echo "==========================================" echo "Git 최신 소스 업데이트 시작" echo "==========================================" # 현재 시간 출력 echo "시작 시간: $(date)" # Git 상태 확인 echo "현재 Git 상태 확인 중..." git status # 현재 브랜치 확인 CURRENT_BRANCH=$(git branch --show-current) echo "현재 브랜치: $CURRENT_BRANCH" # 로컬 변경사항이 있는지 확인 if ! git diff-index --quiet HEAD --; then echo "⚠️ 로컬에 커밋되지 않은 변경사항이 있습니다." echo "변경사항을 stash에 저장합니다..." git stash push -m "Auto-stash before pull at $(date)" echo "✅ 변경사항이 stash에 저장되었습니다." fi # 원격 저장소 정보 업데이트 echo "원격 저장소 정보 업데이트 중..." git fetch --all --prune # 현재 브랜치의 원격 브랜치와 비교 REMOTE_BRANCH="origin/$CURRENT_BRANCH" LOCAL_COMMIT=$(git rev-parse HEAD) REMOTE_COMMIT=$(git rev-parse $REMOTE_BRANCH 2>/dev/null) if [ "$LOCAL_COMMIT" = "$REMOTE_COMMIT" ]; then echo "✅ 이미 최신 버전입니다." else echo "새로운 업데이트가 있습니다. 최신 소스를 받습니다..." # 강제로 최신 소스 받기 (로컬 변경사항 무시) echo "원격 브랜치로 강제 리셋 중..." git reset --hard $REMOTE_BRANCH # 추적되지 않는 파일들 정리 echo "추적되지 않는 파일들 정리 중..." git clean -fd echo "✅ 최신 소스 업데이트 완료!" fi # 최종 상태 확인 echo "==========================================" echo "업데이트 후 Git 상태:" git log --oneline -5 echo "==========================================" # 완료 시간 출력 echo "완료 시간: $(date)" echo "✅ Git 최신 소스 업데이트가 완료되었습니다!" # stash 목록이 있으면 알림 STASH_COUNT=$(git stash list | wc -l) if [ $STASH_COUNT -gt 0 ]; then echo "" echo "📝 참고: stash에 저장된 변경사항이 $STASH_COUNT개 있습니다." echo " 필요시 'git stash pop'으로 복원할 수 있습니다." fi echo "=========================================="