Git Diff(Patch) 파일을 활용한 SVN 코드 반영

Dev.Dana·2025년 7월 9일

TIL

목록 보기
6/6

회사에 입사하여 오리엔테이션을 진행하던 중 ODC Team(Offshore Development Center)의 개발 파일(Git)들을 내부망에 있는 SVN 프로젝트에 안정적으로 반영해야하는 상황이 왔다. 현재 상황은 파일들을 말 그대로 "복사 -> 붙여넣기"하고 있었기에 단순하게 엎어치기 한다면 github respository에 있는 결과물들을 SVN 기존 코드에 맞추어 반영하기엔 어려움이 있어보여 방법을 찾아보았다.

git diff로 생성한 패치(Patch) 파일을 활용하는 방식이 있다는 것을 알게 되었고 이를 통해 외부 Git PR의 변경사항을 내부 SVN 프로젝트에 훨씬 안정적이고 체계적으로 적용할 수 있다는 점을 확인할 수 있었다.

아래에서는 이 방법이 왜 필요한지, 어떤 상황에 효과적인지, 그리고 어떻게 사용하는지를 정리해 보았다.


💡 왜 Patch 방식이 필요한가요?

외부 조직에서 개발한 Git 프로젝트의 특정 기능을 내부망 SVN 프로젝트에 반영할 때 단순 파일 복사로는 다음과 같은 문제가 발생할 수 있다.

  • 기존 코드와의 충돌 여부를 사전에 확인할 수 없음
  • 히스토리나 변경 내용을 추적하기 어려움

Patch 파일을 활용하면 Git의 변경 이력을 기준으로 필요한 부분만 정확히 적용할 수 있기 때문에 기존 방식보단 훨씬 효율적이고 안정적일 것으로 예상한다 !!!

적용 절차

1. 외부 Git 프로젝트 클론

git clone <외부 Git 저장소 주소>
cd <저장소 디렉토리>

2. 적용하고자 하는 PR(Pull Request) 가져오기

git fetch origin pull/<PR번호>/head:<로컬 PR 브랜치 이름>

# git fetch origin pull/45/head:pr-45

3. master와 PR의 분기점(공통 조상 커밋) 찾기

git merge-base master <로컬 PR 브랜치 이름>

위 커밋 ID는 PR이 master에서 갈라져 나온 시점. (=변경 범위 기준점)

4. Diff 파일 생성

git diff <커밋 ID> <로컬 PR 브랜치 이름> > <파일명>.patch

# git diff 4a2f78b pr-45 > pr-45.patch

5. 내부망 SVN 프로젝트에 Patch 적용

  1. *.patch 파일을 내부망으로 옮깁니다.
  2. Eclipse 또는 SVN 툴에서 프로젝트 우클릭 → Team → Apply Patch
  3. 충돌 발생 시 수동으로 Resolve 후 저장
  4. 최종 확인 후 SVN 커밋

주의 : Git과 SVN의 디렉토리 구조가 동일해야 패치가 정상 적용된다.


적용 화면 예시

  • 좌측 : 현재 SVN 로컬 코드
  • 우측 : Patch 파일이 적용되어 반영될 변경 코드
    → Git의 Pull Request Diff 화면처럼 직관적으로 확인 가능

Git 환경에서 작업한 외부 기능을 SVN 기반 내부 시스템에 반영하는 것은 번거롭고 오류가 발생하기 쉽다. Patch 기반 적용 방식을 통해 충돌 최소화, 변경 이력 추적을 할 수 있도록 한다.

형상관리를 외부 개발팀과 다르게 진행(Git/Svn) 해야하는 팀이라면 위 방법을 적용해보도록 하는 것을 추천한다.👻

profile
어제의 나보단 나은 오늘의 내가 되기를

0개의 댓글