SVNtoGIT 마이그레이션 업무자동화

Reading-Snail·2023년 11월 27일
1

SVN에서 매일 GIT으로 마이그레이션을 해야 했던 업무를 자동화하였습니다.

TortoiseSVN 같은 툴도 있지만, 회사의 보안 등 여러 여건상 복잡한 부분이 있어 사용하지 않았습니다.

git의 -force 옵션을 사용하지 않으면서 git push 할 때 오류를 원천적으로 차단하는 것이 제일 중요하다고 판단하였습니다. 해서 git clone 으로 항상 초기화한 후 svn에서 받아온 데이터로 덮어 씌우는 방식을 택했습니다.

단점은 git svn clone 코드를 사용할 때, 사용하지도 않을 .git을 형성하게 된다는 단점이 있습니다. 이 프로세스로 인해 시간도 좀 더 걸리지만, git bash로 svn을 관리하기 위한 별도의 프로그램을 설치하고 싶지 않아서 사용하게 되었습니다.

만약의 상황을 대비하기 위해 해당 날짜의 백업 폴더로 복사본을 남겨두는 로직도 추가하였습니다.

<SVNtoGit_Auto.sh>

ORGIINAL_DIRECOTRY = $(pwd)
TODAY = $(date+%Y)$(date+%M)$(date+%d)$(date+%H)$(date+%M)

Git_Repository_URL = $(<Git_Repository_URL>)
Git_Branch =  $(<git branch>)
Git_Project = $(<git project>)
SVN_Repository_URL = $(<SVN_Repository_URL>)

Echo Current Directory: $(ORIGINAL_DIRECTORY)
Echo Today Date: $(TODAY)

read -p “Are you sure for auto migrate from svn to git [y/n]? “ -m 1 -r
Echo # (optional) move to a new line

If [[ $REPLY =~ ^[Yy]$ ]]
Then 
	# Git Clone
		git clone ${Git_Repository_URL} ${Git_Branch}
	# SVN to GIT Clone
		git svn clone ${SVN_Repository_URL} -r HEAD
	# SVN FILE -> GIT DIRECTORY
		Ls -A ./${Git_Branch} grep -Ev ‘.git|${Git_Project}|.gitlab-ci.yml’ | xargs -i rm -rf ./master/{}
		Ls -A ./${Git_Branch}/${Git_Project} | grep -Ev ‘<licenseDriectory>’ | xargs -i rm -rf ./${Git_Branch}/${Git_Project}/{}
		Ls -A ./${Git_Project} | grep -E ‘.git’ | xargs -i mkidr -p ./${Git_Branch}/{}
		Ls -A ./${Git_Project} | grep -Ev ‘.git’ | xargs -i cp -rf ./${Git_Project}/{} ./<git branch>/
	# GIT ADD/ COMMIT/ PUSH
		cd ${ORIGIN_DIRECTORY}/master
		Git add .
		Git commit -m ${TODAY}
		Git push <git_Repository_URL> ${Git_Project}
	# REMOVE temp
		Cd ${ORIGIN_DIRECTORY}
		Rm -rf ./${Git_Project}
	# BACKUP
		Mkdir ./backup/${TODAY}
		Mv -t ./backup/${TODAY} ./${Git_Project}

뒤돌아보며..

쉘 스크립트 문법을 처음으로 사용해봤습니다. 띄어쓰기 한 칸도 쉽게 넘어가 주지 않는 쉽지 않는 상대였습니다. 대신 CLI 환경에서 명령어를 사용하여 파일과 폴더를 조작하고, 변수를 불러오고 적용해보는 좋은 경험이었습니다.

profile
책읽는 달팽이 || 공학도에서 개발자로! || 결국 과거의 흐름을 이해했을 때 지금의 것들을 통찰력있게 바라볼 수 있다고 믿습니다.

0개의 댓글