svnsvn 시작하기

비고

Apache Subversion (SVN) 은 보편적이고 중앙화 된 오픈 소스 버전 제어 시스템입니다. Subversion은 현재 Apache Software Foundation (ASF) 의 프로젝트이며 Apache License, Version 2.0에 따라 사용이 허가되었습니다.

Subversion은 파일 및 디렉토리를 관리 및 제어하고 변경된 내용을 추적하도록 설계되었습니다. 공동 개발 프로젝트를위한 신뢰할 수있는 타임머신관리 도구 역할을합니다. 모든 버전 제어 시스템이 안정적으로 대답해야하는 표준 질문에 쉽게 대답 할 수 있습니다. 예를 들어,

  • 2012 년 12 월 12 일에 프로젝트 / 파일 FOO는 어떻게 생겼습니까?
  • USERNAME 님 또는 2012 년 12 월 20 일에 변경된 사항은 무엇입니까?
  • 마지막 검토 이후 누가 특정 문자열을 수정 했습니까?
  • 그리고 훨씬 더.

버전

번역 새로운 것은 무엇입니까? 출시일
1.9.x 수많은 유용성 및 성능 향상 2015-08-05
1.8.x 향상된 이름 바꾸기 추적, 자동 재 통합, 상속 된 버전 별 속성, 기본 제공 충돌 해결 도구 2013-06-18
1.7.x 작업 복사본 라이브러리의 완전한 재 작성, 향상된 HTTP 프로토콜 사용법 2011-10-11
1.6.x 트리 충돌 식별, 개선 된 대화 형 충돌 해결, repo-relative URL 지원 2009-03-20
1.5.x 병합 및 분기 추적 ( svn:mergeinfo ), 대화 형 파일 충돌 해결, 스파 스 체크 아웃, 개선 된 svn:externals 구문 2008-06-19
1.4.x 저장소 복제를위한 svnsync 도구, 새롭고 향상된 작업 복사본 라이브러리 2006-09-10
1.3.x 서버 측에서 사용자 작업의 고급 로깅, 성능 향상 2005-12-30
1.2.x 잠금 - 수정 - 잠금 해제 모델 (잠금), DAV 자동 버전 관리, FSFS는 새로운 저장소에 기본적으로 사용됩니다 2005-05-21
1.1.x 새로운 저장소 백엔드 (FSFS), 심볼릭 링크 버전 관리 2004-09-29
1.0.x 최초 공개 2004-02-23

Apache Subversion 1.9.x는 현재 완벽하게 지원되는 최신 SVN 릴리스입니다. Subversion 1.8.x는 부분적으로 지원됩니다. Subversion 1.7.x 및 이전 버전은 더 이상 지원되지 않습니다.

설치 및 초기 설정

Subversion을 버전 제어 시스템으로 사용중인 프로젝트에서 공동 작업을 시작하려면 svn 클라이언트를 설치하십시오.

Subversion을 설치하려면 소스 코드 릴리스에서 직접 빌드하거나 운영 체제 용으로 미리 빌드 된 바이너리 패키지를 다운로드하십시오. 다양한 운영 체제 용으로 컴파일 된 Subversion 클라이언트 ( svn )를 얻을 수있는 사이트 목록은 공식 바이너리 패키지 페이지에서 제공 됩니다. 직접 소프트웨어를 컴파일하려는 경우 소스 코드 페이지 에서 소스 코드를 가져옵니다.

Subversion을 사용하면 표준 svn 명령 줄 클라이언트 만 사용하는 것이 아닙니다. 다양한 운영 체제를위한 주목할만한 그래픽 Subversion 클라이언트가 있으며 현재 IDE의 대부분은 SVN과의 강력한 통합을 즉석에서 또는 플러그인을 통해 제공합니다. 그래픽 클라이언트 목록을 보려면 Wikipedia 페이지 ( https://en.wikipedia.org/wiki/Comparison_of_Subversion_clients)를 확인 하십시오 .

클라이언트를 설치 한 직후 svn 명령을 실행하여 클라이언트를 실행할 수 있어야합니다. 다음을보아야합니다.

$ svn
Type 'svn help' for usage.

모든 것이 대부분 준비되었습니다. 이제 원격 중앙 저장소에 연결될 작업 복사본 이라는 로컬 작업 영역을 만들어야 합니다 . 즉, 작업 복사본체크 아웃 할 것입니다. 작업 복사본의 도움으로 버전이있는 데이터로 작업하고 변경 사항을 게시 할 수 있으므로 (SVN에서 커밋 하기) 동일한 프로젝트에서 작업하는 다른 사람들이 자신의 변경 내용을보고 변경 사항으로부터 이익을 얻을 수 있습니다. 나중에 다른 사람이 저장소에서 변경 한 내용을 가져 오려면 작업 복사본을 업데이트하십시오 . 이러한 기본 작업은 다른 예제에서 다룹니다.

작업 복사본 체크 아웃

프로젝트의 데이터를 수정하려면 버전이있는 프로젝트의 로컬 복사본을 얻어야합니다. 명령 줄 svn 클라이언트 또는 좋아하는 SVN 클라이언트 (예 : TortoiseSVN)를 사용하십시오. 프로젝트의 로컬 복사본은 Subversion에서 작업 복사본 이라고하며 svn checkout <URL> 명령을 실행하여 가져옵니다. 여기서 <URL> 은 저장소 URL입니다. 예

$ svn checkout https://svn.example.com/svn/MyRepo/MyProject/trunk

또는 로컬 복사본을 체크 아웃하기 위해 svn co <URL> 을 약자로 사용할 수 있습니다.

결과적으로, MyRepo 저장소에 상주하는 MyProject라는 프로젝트 /trunk 의 작업 복사본을 얻을 수 있습니다. 작업 사본은 명령을 내 보낸 디렉토리와 관련하여 컴퓨터의 trunk 디렉토리에 있습니다.

작업 복사본에 다른 이름을 지정하려면 명령 끝에 매개 변수로 추가 할 수 있습니다. 예

$ svn checkout https://svn.example.com/svn/MyRepo/MyProject/trunk MyProjectSource

그러면 MyProjectSource 라는 작업 복사본이 만들어집니다.

트렁크를 체크 아웃하는 대신, 브랜치, 프라이빗 쉘브 또는 태그 (저장소에 이미 있다고 가정)를 체크 아웃 할 수 있습니다. 당신은 귀하의 컴퓨터에 로컬 작업 복사본을 무제한으로 가질 수 있습니다.

MyRepo 전체 저장소의 작업 복사본을 얻을 수도 있습니다. 그러나 그렇게하는 것은 삼가해야합니다. 일반적으로 말하자면 작업 카피를 즉시 다른 개발 브랜치 / 태그 / 다른 것으로 전환 할 수 있으므로 작업을위한 전체 저장소의 작업 복사본이 필요하지 않습니다 . 더욱이, Subversion 저장소는 여러 개의 (un) 관련 프로젝트를 포함 할 수 있으며 모든 프로젝트에 대해 하나의 작업 카피가 아닌 각각의 전용 작업 복사본을 갖는 것이 좋습니다.

버전이있는 데이터 내보내기 (보통 다운로드)

버전이있는 프로젝트의 데이터를 가져오고 싶지만 Subversion에서 제공하는 버전 제어 기능이 필요하지 않은 경우 svn export <URL> 명령을 실행할 수 있습니다. 다음은 그 예입니다.

$ svn export https://svn.example.com/svn/MyRepo/MyProject/trunk

결과적으로 프로젝트의 데이터 내보내기를 얻을 수 있지만 작업 복사본과는 달리 svn 명령을 실행할 수는 없습니다. 내보내기는 단순히 데이터를 다운로드하는 것입니다.

나중에 다운로드 한 데이터를 완전한 기능을 갖춘 작업 복사본으로 변환하려면 내보내기를 실행 한 디렉토리에 svn checkout <URL> 을 실행하십시오.

작업 복사본 업데이트 중

너는 그 프로젝트에서 일하는 유일한 사람이 아니지, 그렇지? 이는 동료가 프로젝트의 데이터를 수정하고 있음을 의미합니다. 최신 상태를 유지하고 다른 사람이 저지른 수정 사항을 가져 오려면 작업 복사본에서 svn update 명령을 실행해야합니다. 결과적으로 작업 복사본이 저장소와 동기화되고 동료가 변경 한 내용을 다운로드하게됩니다.

svn update 약자는 svn up 입니다.

변경을 커밋하기 전에 svn update 를 실행하는 것은 규칙입니다.

로컬 작업 복사본을 변경

작업 카피 (WC) 는 중앙 Subversion 저장소와 상호 작용할 때 사용하는 로컬 및 개인 작업 공간 입니다. 작업 사본을 사용하여 프로젝트의 내용을 수정하고 다른 사람이 저지른 변경 사항을 가져옵니다.

작업 카피는 프로젝트의 데이터와 외형을 포함하고 있으며 로컬 파일 시스템의 일반 디렉토리와 같이 작동하지만 한 가지 중요한 차이점이 있습니다. 작업 카피는 파일과 디렉토리의 상태와 변경 사항을 추적합니다. 작업 카피는 루트에 숨겨진 .svn 메타 데이터 디렉토리에 의해 추가 된 버전 제어 기능을 가진 일반 디렉토리로 생각할 수 있습니다.

대부분의 경우 작업 복사본의 내용을 수정하여 프로젝트의 데이터를 수정하려고합니다. 수정 사항에 만족하고 철저하게 검토 한 즉시 중앙 리포지토리에 게시 할 준비가되었습니다.

작업 복사본 내에서 프로젝트의 데이터로 모든 작업을 수행 할 수 있지만 복사, 이동, 이름 바꾸기 및 삭제와 관련된 작업은 해당 svn 명령을 사용하여 수행해야합니다.

  • 기존 파일 수정 . 자주 사용하는 텍스트 프로세서, 그래픽 편집기, 오디오 편집 소프트웨어, IDE 등을 사용하여 파일을 수정하십시오. 디스크에 변경 사항을 저장하면 Subversion에서 자동으로 인식합니다.

  • 새 파일 추가 중 . 새 파일을 작업 카피에 넣으면 (자), Subversion는 그 파일을 버젼 없음으로 인식합니다. svn add 명령을 실행하지 않으면 새 파일 추적을 자동으로 시작하지 않습니다.

    svn add foo.cs
    
  • 파일 및 디렉토리 이동 . svn move 명령을 사용하여 파일 및 디렉토리 svn move :

    svn move foo.cs bar.cs
    
  • 파일 및 디렉토리 이름 바꾸기 . svn rename 명령을 사용하여 파일 및 디렉토리 svn rename :

    svn rename foo.cs bar.cs
    

    참고 : svn rename 명령은 svn move 명령의 별칭입니다.

  • 파일 및 디렉토리 복사 . svn copy 명령을 사용하여 파일 및 디렉토리 svn copy :

    svn copy foo.cs bar.cs
    
  • 파일 및 디렉토리 삭제 . svn delete 명령을 사용하여 파일 및 디렉토리 svn delete :

    svn delete foo.cs
    
  • 작업 복사본의 파일 및 디렉토리 상태 확인 . svn status (또는 간단히 svn st ) 명령을 사용하여 변경 사항을 검토하십시오.

    svn status
    

    중요 : 변경 사항을 적용하기 전에 항상 변경 사항을 검토하십시오. 이렇게하면 불필요하거나 관련성없는 변경 사항을 피하는 데 도움이됩니다.

  • 되돌리기 변경 . svn revert 명령을 사용하여 변경 사항 되돌리기 :

    svn revert foo.c
    
  • 모든 변경 되돌리기 : 저장소의 루트에서 :

    svn revert -R .
    

    중요 : 취소 된 커밋되지 않은 변경 사항은 영구적으로 손실됩니다. 되 돌린 변경 사항은 복구 할 수 없습니다. 주의해서 svn revert 를 사용하십시오! 변경 사항은 유지하면서 되돌리려면 패치에 저장하십시오. 패치를 작성하고 적용하는 방법의 예를 참조하십시오.

저장소에 대한 로컬 변경 사항 커밋

작업 복사본에서 변경 한 내용을 게시하려면 svn commit 명령을 실행하십시오.

중요 : 커밋하기 전에 변경 사항을 검토하십시오! svn statussvn diff 를 사용하여 변경 사항을 검토하십시오. 또한 커밋을 수행하기 전에 올바른 경로에 있는지 확인하십시오. 여러 디렉토리에서 많은 파일을 갱신 한 경우 적절한 레벨에 있어야 모든 파일을 사용자 위치 아래에 포함시킬 수 있습니다.

다음은 commit 명령의 예입니다.

svn commit -m "My Descriptive Log Message"

또는 svn cisvn commit 의 줄임말입니다.

-m (--message) 옵션에 유의하십시오. 좋은 커밋 메시지는 다른 사람들이 커밋이 이루어진 이유를 이해하는 데 도움이됩니다. 또한 서버 측에서는 비어 있지 않은 메시지 를 적용하고 각 커밋 메시지가 버그 추적 시스템에있는 기존 티켓을 언급하도록 할 수 있습니다.

특정 버전의 작업 복사본 체크 아웃

버전 5394를 사용하려면 다음을 사용하십시오.

svn co --revision r5394 https://svn.example.com/svn/MyRepo/MyProject/trunk

또는 더 짧은 버전 :

svn co -r 5394 https://svn.example.com/svn/MyRepo/MyProject/trunk

또는 고정 된 개정판을 사용하여 :

svn co https://svn.example.com/svn/MyRepo/MyProject/trunk@5394

이미 체크 아웃 한 경우 update 명령을 사용하여 다음을 수행하여 특정 버전으로를 이동할 수 있습니다.

svn up -rXXX

암호로 보호 된 저장소 사용

Subversion 저장소는 특정 내용이나 명령이 특정 사용자 만 액세스 할 수 있도록 구성 할 수 있습니다. 이 제한된 콘텐츠에 액세스하려면 사용자 이름과 비밀번호를 지정해야합니다.

사용자 이름과 암호는 명령의 일부로 직접 지정할 수 있습니다.

$ svn checkout https://svn.example.com/MyRepo/trunk --username JoeUser --password topsecret

안타깝게도 암호를 사용하면 콘솔에 암호가 일반 텍스트로 표시됩니다. 이 보안 문제를 방지하려면 사용자 이름은 지정하고 암호는 지정하지 마십시오. 이렇게하면 암호를 입력하지 않고도 암호를 입력 할 수있는 암호 프롬프트가 나타납니다.

$ svn checkout https://svn.example.com/MyRepo/trunk --username JoeUser
Password for 'JoeUser':

인증 정보를 전혀 제공하지 않으면 Subversion이 사용자 이름과 비밀번호를 묻습니다.

$ svn checkout https://svn.example.com/MyRepo/trunk
Username:  JoeUser
Password for 'JoeUser':

첫 번째 방법은 덜 안전하지만 자동화 된 스크립트에서는 스크립트의 유형에 따라 대화식 프롬프트에 정보를 제공하기가 어렵 기 때문에이 스크립트는 자동화 된 스크립트에서 자주 볼 수 있습니다.

참고 : 작업 사본에서만 작동하는 명령 (예 : revert 또는 status )에는 암호가 필요하지 않으며 저장소 서버와의 통신이 필요한 명령 만 필요합니다.

패치 생성 및 적용

패치는 두 개의 리비전 사이 또는 로컬 리포지토리와 리포지토리가 가리키는 마지막 리비전 사이의 차이점을 보여주는 파일입니다.

피어 리뷰 또는 나중에 적용하기 위해 커밋되지 않은 로컬 변경 패치를 공유하거나 저장하려면 다음을 수행하십시오.

svn diff > new-feature.patch

두 개의 개정판 사이의 차이점에서 패치를 얻으려면 다음을 수행하십시오.

svn diff -r NEWER_REVISION:OLDER_REVISION > feature.patch

패치를 적용하려면 다음을 실행하십시오.

svn patch new-feature.patch

패치를 성공적으로 적용하려면 패치가 만들어진 경로와 동일한 경로에서 명령을 실행해야합니다.

로그 검토

svn log 를 실행하면 커밋 메시지가 모두 표시되므로 특정 버전 만 검토 할 수 있습니다.

  • n 최근 개정판보기 :

    svn log -n

  • 특정 버전보기 :

    svn log -c rXXX

  • 영향을받는 경로보기 :

    svn log -v -c rXXX

파일 되돌리기 또는 롤백

파일을 최신의 업데이트 된 svn 버전으로 복원하려면, 즉 로컬 변경 사항을 실행 취소하려면 revert 를 사용할 수 있습니다.

svn revert file

파일을 이전 버전 (버전 XXX)으로 복원하려면 update 사용하십시오.

svn update -r XXX file

경고 : 두 경우 모두 덮어 쓰기 때문에 파일에서 로컬 변경 사항을 잃게됩니다.


파일의 이전 버전 만 보려면 cat 사용하십시오.

svn cat -r XXX file

그리고 로컬 버전의 파일과의 차이점을 보려면 :

svn diff -r XXX file