RESTAPI_SERVER/git_update.sh

82 lines
2.5 KiB
Bash

#!/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 "=========================================="