서브버전 SVN에서 특정 커밋만 체크아웃하는 방법은?
_____Q1. 전체 프로젝트를 특정 리비전으로 처음부터 체크아웃하려면?
A1.
* 명령:
svn checkout -r [리비전] [리포지토리_URL] [로컬_경로]
* 예시:
svn checkout -r 125 https://svn.example.com/repos/project/trunk myproject
* 설명: 지정한 리비전 시점의 전체 트리(또는 지정한 경로)를 가져옵니다.
Q2. 이미 체크아웃된 작업 복사본을 과거(또는 미래) 리비전으로 되돌리려면?
A2.
* 명령:
svn update -r [리비전] [경로]
* 예시:
cd myproject
svn update -r 125 .
* 설명: 지정한 리비전 시점으로 working copy의 모든 파일·디렉토리를 업데이트합니다.
Q3. 특정 파일이나 디렉토리만 리비전별로 받으려면?
A3.
* 체크아웃:
svn checkout -r [리비전] [리포지토리_URL]/path/to/file_or_dir [로컬_경로]
* 업데이트(이미 받은 복사본에 적용):
svn update -r [리비전] path/to/file_or_dir
* 예시:
svn checkout -r 200 https://svn.example.com/repos/project/trunk/src/main.c main.c
Q4. 단일 커밋(리비전)의 변경사항(patch)만 얻고 싶다면?
A4.
* 명령:
svn diff -c [리비전] [리포지토리_URL] > r[리비전].patch
* 예시:
svn diff -c 250 https://svn.example.com/repos/project/trunk > r250.patch
* 설명: 패치 파일을 만들어 나중에 적용(svn patch)하거나 검토할 수 있습니다.
A5.
* 명령:
svn export -r [리비전] [리포지토리_URL] [로컬_경로]
* 예시:
svn export -r 300 https://svn.example.com/repos/project/trunk project-snapshot-300
* 설명: 빌드용, 배포용 등으로 사용되고 버전 관리 정보(.svn)가 남지 않습니다.
Q6. 스파스(sparse) 체크아웃과 결합해 특정 리비전의 일부만 가져오려면?
A6.
1) 빈 틸(depth empty)으로 루트만 체크아웃:
svn checkout -r [리비전] --depth empty [URL] [로컬_경로]
2) 필요한 서브디렉토리/파일만 depth를 지정해 가져오기:
svn update --depth immediates 디렉토리명
svn update --depth files 디렉토리명/파일명
* 예시:
svn checkout -r 150 --depth empty https://svn.example.com/repos/project/trunk proj
cd proj
svn update --depth immediates src
svn update -r 150 src/main.c
Q7. 특정 리비전을 기준으로 브랜치를 만들고 체크아웃하려면?
A7.
1) 리포지토리 서버에 브랜치 생성:
svn copy -r [리비전] [URL]/trunk [URL]/branches/branch-from-r[리비전] -m "branch from r[리비전]"
2) 새 브랜치 체크아웃:
svn checkout [URL]/branches/branch-from-r[리비전] [로컬_경로]
* 예시:
svn copy -r 400 https://svn.example.com/repos/project/trunk \
https://svn.example.com/repos/project/branches/bugfix-r400 \
-m "Create bugfix branch from r400"
svn checkout https://svn.example.com/repos/project/branches/bugfix-r400 bugfix
Q8. 주의할 점 및 팁
* SVN은 Git처럼 “커밋 단위로 전체 히스토리 분리 체크아웃”을 지원하지 않습니다. 항상 트리(또는 경로) 전체의 스냅샷을 가져옵니다.
* 리비전 이동 후 변경된 파일 상태를 확인하려면 svn status, svn diff 등을 활용하세요.
* 스파스 체크아웃 시 depth 옵션을 적절히 조합하면 디스크·네트워크 비용을 줄일 수 있습니다.
SVN에서는 `checkout` 명령어를 사용하여 특정 커밋(또는 리비전)을 체크아웃할 수 있습니다.
이를 위해서는 리비전 번호를 알아야 합니다.
다음은 단계별 가이드입니다.
1. 리포지토리 URL 확인 : 먼저 체크아웃하고자 하는 SVN 리포지토리의 URL을 확인합니다.
2. 리비전 번호 확인 : 체크아웃하고자 하는 커밋의 리비전 번호를 알아야 합니다.
이는 `svn log` 명령어를 사용하여 리비전 히스토리를 확인하여 알 수 있습니다.
```bash svn log [리포지토리 URL] ```
3. 특정 리비전 체크아웃 : `svn checkout` 명령어에 `-r` 옵션을 사용하여 원하는 리비전 번호를 지정한 후 체크아웃을 수행합니다.
```bash svn checkout -r [리비전 번호] [리포지토리 URL] [체크아웃할 디렉토리명] ``` 예를 들어, 리포지토리 URL이 `http://svn.example.com/myrepo`이고 체크아웃할 리비전이 `1234`라면 다음과 같이 입력합니다.
```bash svn checkout -r 1234 http://svn.example.com/myrepo myproject ```
4. 작업 완료 : 위의 명령을 실행하면 지정한 리비전의 코드가 해당 디렉토리에 체크아웃됩니다.
추가 정보 : - 특정 리비전에서 작업하고 싶은 경우, 이후 작업을 할 때도 `svn update -r [리비전 번호]` 명령어를 사용하여 해당 리비전으로 되돌릴 수 있습니다.
- 체크아웃한 후에는 새로운 커밋이나 다른 리비전으로 업데이트 할 수 있지만, 체크아웃한 리비전으로 되돌아가고 싶다면 해당 리비전 번호를 다시 지정하여 업데이트 해야 합니다.
이러한 절차를 통해 SVN에서 원하는 특정 커밋을 효과적으로 체크아웃할 수 있습니다.
작성자:
최지율 [비회원]
| 작성일자: 1년 전
2025-03-21 15:51:16
조회수: 205 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 205 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.