private repository에서 막 작업하던 중 public으로 전환하려고 보니 중요 정보들이 포함된 것을 확인했고 이를 Spring Cloud Config로 해결하였지만 git commit 이력은 아직 남아 있어 해결책이 필요했다.
이를 로컬로 기존 private repository를 clone 한 뒤 최신 이력만 남겨 public repository로 push하는 방법을 알게되어 실행하였고 수정 사항이 생기면 스크립트만 실행하면 모든 저장소를 최신 버전으로 변경하도록 스크립트를 작성하였다.
하여 아래 스크립트를 공유 한다.
# 배열에 private과 public URL을 한 쌍으로 저장
repos=(
"https://github.com/JHome-Project/api-gateway.git https://github.com/JHome-Public/api-gateway.git"
"https://github.com/JHome-Project/eureka-server.git https://github.com/JHome-Public/eureka-server.git"
"https://github.com/JHome-Project/user-service.git https://github.com/JHome-Public/user-service.git"
)
# 배열에 저장된 각 URL 쌍에 대해 반복
for repo_pair in "${repos[@]}"
do
# URL 쌍을 공백 기준으로 분리
private_repo=$(echo $repo_pair | cut -d ' ' -f 1)
public_repo=$(echo $repo_pair | cut -d ' ' -f 2)
echo "Pushing from $private_repo to $public_repo"
# private repo를 clone 및 작업 디렉토리로 이동
git clone --branch main $private_repo
repo_name=$(basename "$private_repo" .git)
cd $repo_name
# 새로운 브랜치로 최근 커밋내역만 추출
git checkout --orphan new-main
git add .
git commit -m "Updated on $(date '+%Y-%m-%d')"
# public repo로 원격 URL 변경
git remote set-url origin $public_repo
# 푸시 (main 브랜치로)
git push -u origin new-main:main --force
echo "Pushed from $private_repo to $public_repo"
# 작업 후 디렉토리 정리
cd ..
rm -rf $repo_name
done