82 lines
2.5 KiB
Bash
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 "=========================================="
|