피드로 돌아가기
Build & Release #5: How Apple's rsync Update Nuked My Repo
Dev.toDev.to
DevOps

rsync 바이너리 파편화 해결을 통한 .git 데이터 유실 방지 설계

Build & Release #5: How Apple's rsync Update Nuked My Repo

7onic2026년 5월 18일6intermediate

Context

Private Repo에서 Public Repo로 소스 코드를 동기화하기 위해 rsync 기반 스크립트 운용. macOS 업데이트로 GNU rsync가 openrsync로 대체되며 --filter='P .git' 플래그의 동작 방식이 변경되어 .git 폴더가 삭제되는 장애 발생.

Technical Solution

  • OS 수준의 바이너리 구현 차이로 인한 불확실성을 제거하기 위해 rsync에 대한 의존성 제거
  • 동기화 시작 전 .git 폴더를 /tmp 경로로 물리적으로 분리하여 삭제 가능성 원천 차단
  • rsync 실행 시 --exclude='.git' 설정을 병행하여 2중 방어 체계 구축
  • trap EXIT 구문을 활용하여 스크립트 비정상 종료 시에도 백업된 .git 폴더를 자동 복원하는 메커니즘 구현
  • 동기화 완료 후 git remote -v를 통해 Remote 설정의 무결성을 검증하는 단계 추가

1. OS 업데이트 후 기본 설치된 CLI 도구의 버전 및 구현체(GNU vs BSD) 변경 여부 확인

2. 중요 파일 보호 시 `--exclude` 옵션 외에 물리적 백업 및 복구 프로세스 검토

3. Git Merge 전 `git diff --stat`을 통한 변경 규모 정량적 확인 습관화

4. 자동화 스크립트 내 상태 변경 후 최종 결과물을 검증하는 Assertion 단계 추가

원문 읽기