@echo off rem Brings the main folder up to the branch the work is done on (TASK-062). rem rem sync-main-folder.bat [branch] [folder] rem rem It only ever moves forward (fast-forward). It never discards a change: if files in the main rem folder are in the way, they are put in a stash, and the stash is named on screen. chcp 65001 >nul setlocal EnableExtensions set "BRANCH=claude/app-features-purpose-c45235" set "MAIN=D:\Android\UBGitea" if not "%~1"=="" set "BRANCH=%~1" if not "%~2"=="" set "MAIN=%~2" set "STASHED=" echo. echo 메인 폴더 동기화 echo 폴더 : %MAIN% echo 가져올 작업 : %BRANCH% echo. where git >nul 2>nul if errorlevel 1 ( echo [중단] git 을 찾을 수 없습니다. Git 이 설치되어 있는지 확인해 주세요. goto :fail ) if not exist "%MAIN%\.git" ( echo [중단] %MAIN% 은 Git 저장소가 아닙니다. goto :fail ) git -C "%MAIN%" rev-parse --verify --quiet "%BRANCH%" >nul if errorlevel 1 ( echo [중단] %BRANCH% 브랜치가 없습니다. goto :fail ) rem A change to a tracked file is someone's work in progress. It is not touched. git -C "%MAIN%" diff --quiet if errorlevel 1 goto :dirty git -C "%MAIN%" diff --cached --quiet if errorlevel 1 goto :dirty echo [1/3] 최신 작업으로 이동합니다. git -C "%MAIN%" merge --ff-only "%BRANCH%" >nul 2>nul if not errorlevel 1 goto :merged rem The usual reason: a file that the branch now tracks already lies in the folder, untracked. echo 폴더에 있던 파일이 길을 막고 있어 임시 보관한 뒤 다시 시도합니다. set "STASHED=main-folder-before-sync-%DATE%-%TIME%" git -C "%MAIN%" stash push -u -m "%STASHED%" >nul if errorlevel 1 ( echo [중단] 임시 보관에 실패했습니다. set "STASHED=" goto :fail ) git -C "%MAIN%" merge --ff-only "%BRANCH%" if errorlevel 1 ( echo. echo [중단] 앞으로만 이동하는 방식으로는 합칠 수 없습니다. echo 메인 폴더에 이 작업에 없는 커밋이 있는 경우입니다. 아무것도 바뀌지 않았습니다. goto :fail ) :merged echo [2/3] master 를 같은 위치로 맞춥니다. for /f "delims=" %%b in ('git -C "%MAIN%" branch --show-current') do set "CURRENT=%%b" if /i "%CURRENT%"=="master" ( echo 지금 master 에 있으므로 이미 맞춰졌습니다. ) else ( git -C "%MAIN%" branch -f master "%BRANCH%" >nul 2>nul if errorlevel 1 echo [주의] master 를 옮기지 못했습니다. 다른 폴더에서 master 를 열어 둔 경우입니다. ) echo [3/3] 결과 git -C "%MAIN%" log --oneline -3 echo. if defined STASHED ( echo 임시 보관한 파일이 있습니다: "%STASHED%" echo 최신 버전이 이미 들어 있으므로 보통은 꺼낼 필요가 없습니다. echo 목록 보기: git -C "%MAIN%" stash list echo. ) echo 완료되었습니다. echo. pause exit /b 0 :dirty echo [중단] 메인 폴더에 저장하지 않은 수정이 있습니다. 아무것도 바꾸지 않았습니다. echo 아래 파일을 커밋하거나 되돌린 뒤 다시 실행해 주세요. echo. git -C "%MAIN%" status --short :fail echo. if defined STASHED ( echo 임시 보관한 파일이 있습니다: "%STASHED%" echo 되돌리기: git -C "%MAIN%" stash pop echo. ) pause exit /b 1