-
비어있는 디렉토리를 생성한 후
TortoiseSVN → Create Repository here...
순서로 클릭한다. -
아래와 같은 폴더 구조가 자동으로 생성된다.
create folder structure를 누르면 기본 폴더 구조가 생성된다.
이러면 repository가 생성된 것이다.
-
하지만 아직 아무런 프로젝트가 없으므로 프로젝트를 생성해야한다.
testRepo를 생성한 폴더에서 새롭게 userA라는 폴더를 생성한 후 TortoiseSVN -> import ...
순서로 클릭하면 프로젝트 등록 화면이 나온다.
원격 저장소가 있는 경우 URL에 해당 원격 저장소를 등록하면 되지만 테스트에서는 원격 저장소가 없으므로 로컬에 생성한 testRepo를 활용한다.
URL 경로에 testRepo의 경로를 넣고 OK
를 클릭한다.
-
마찬가지로 비교가 될 userB라는 폴더도 생성한 후 testRepo를 등록한다.
-
userA 와 userB는 둘 다 같은 testRepo를 공유하고 있다.
-
그 후 두 유저에서 모두
SVN checkout
을 수행한다. -
그 후 checkout 된 testRepo에서 작업을 수행한다.
-
userA가 새로운 작업을 수행하였다.
-
그리고 수행한 작업을 repository로 commit한다.
-
SVN에서 새로운 기능 개발을 위해서 브랜치 생성을 위해선 특정한 디렉토리 구조를 따라야한다.
userA가 새로운 기능을 위해 새로운 브랜치를 만들기 위해선
repository 오른쪽 클릭 -> tortoiseSVN -> Branch/tag
를 클릭한다. -
SVN은 프로젝트를 위한 특정한 디렉토리 구조를 따라야한다. 그래서 메인 작업파일들은 trunk에 저장하고, 새로운 기능을 위한 브랜치들은 branches라는 디렉토리에 저장한다.
이를 위해 trunk, branches 디렉토리를 생성한다.
그리고 branches 디렉토리 안에 새로운 branch를 생성한다.
이때 특정한 버전에서 브랜치를 나누고 싶다면 specific revision in repository
를 클릭하고,
trunk에서 새롭게 브랜치를 나눈다면 HEAD revisition in the repository
를 선택한다.
- 새로운 브랜치를 생성한 후 해당 브랜치로 이동하기 위해선
switch
를 클릭한다.
- 새롭게 생성한 브랜치로 switch한다.
- 이후
SVN checkout
을 클릭하면 생성한 브랜치로 새롭게 디렉토리를 생성하게 된다.
- 이제 메인 trunk에 새로운 작업 내용을
merge
한다.
-
URL to merge from
엔 새롭게 생성한 브랜치가 위치한다.show log를 클릭하면 변화된 기록을 확인 할 수 있고 변화된 특정 내용만 골라서 머지 할 수 있다.
-
머지하기 이전에
test
를 통해 머지가 안전하게 정상적으로 이루어질 수 있는지 확인할 수 있다. -
머지된 내용을 repository로 commit한다.
-
머지된 기록들을
tortoiseSVN -> revision graph
에서 확인할 수 있다.
-
userA와 userB가 같은 파일을 다르게 작업하였다.
userA
userB
-
user A가 먼저 commit을 하고 user B가 이후에 commit을 한다.
-
이 경우 user B에게
confit
가 발생한다.confict 부분을 더블클릭한다.
-
어떤 부분에서 충돌이 났는지를 보여주는 화면이 나온다.
-
이 화면에서 내 파일을 사용해서 상대방의 파일을 덮을지, 상대방의 파일을 사용해서 내 파일을 덮을지 결정할 수 있다.
< 상대방의 파일로 내 파일을 덮는 경우 >
< 내 파일로 상대방의 파일을 덮는 경우 >
-
내 파일로 상대방의 파일을 덮었다.
맨 아래에 합쳐진 파일에서 내 파일의 내용으로 덮인 것을 확인 할 수 있다.
그리고
Mark as resolved
를 클릭하여 내용을 확인하고save
한다. -
이제 repository에는 내가 수정한 내용으로 파일이 올라가 있는 상태이다.
-
user A를 update하면 수정한 파일의 내용으로 변한것을 확인할 수 있다.
-
testRepo
라는 저장소가 존재하다가 모종의 이유로 사라졌다고 하자.이런 사실을 모르고 userA가 자신의 변경 사항을 저장소에 반영하려고 하면 저장소에 연결할 수 없다는 문제가 발생한다.
-
우선 새로운 저장소를 생성한다.
anotherRepo
라는 저장소를 새롭게 만든다. -
svn엔 저장소를 이동하는 기능인
relocate
가 존재한다.
-
하지만 기존의 저장소와 새로운 저장소의 uuid가 다르다는 이유로 relocate를 활용할 수가 없다.
-
그래서
anotherRepo -> db -> uuid
파일에서 기존 프로젝트의 uuid와 같도록anotherRepo
의 uuid를 수정한다. -
다시
relocate
를 실행하면 정상적으로 저장소가 이동됐다는 메시지가 나온다. -
이후 파일을 변경하고 commit을 한다.
-
하지만 커밋이 정상적으로 되지 않는다....
-
따라서 수동으로 다른 방법을 사용해야한다.
기존의 저장소에서
export
를 통해 기존의 내용들을 추출한다.
아래와 같은 디렉토리들이 추출된다.
- 추출된 디렉토리들을 새롭게 생성한
anotherRepo
에 넣어주면 저장소를 이동시킬 수 있다.
![9](https://user-images.githubusercontent.com/63279334/126310277-ab09754a-fdb3-4bb0-8897-4fb7f50cfecf.png)
anotherRepo
를 확인해보면 기존의 저장소의 내용을 모두 가져온 것을 볼 수 있다.
![11 (1)](https://user-images.githubusercontent.com/63279334/126310292-c5dae503-9a6d-49d3-8970-763dcbced843.png)
- 하지만 이 경우에도 기존에 작업하던 디렉토리에서 commit은 불가능하다.
- 따라서 새롭게 생성한 저장소로 다시 checkout을 통해 작업 디렉토리를 생성한 후 작업을 이어나가야 한다.
-
azure의 무료계정을 활용해서 remote svn 서버를 생성할 것이다.
우분투 가상머신을 생성해준다.
azure는 가상머신을 만들기만 하면 기타 다른 리소스를 자동으로 생성해주기 때문에 간편하다.
-
svn server는 기본적으로 3690포트를 사용하므로 해당 포트를 열어주어야한다.
가상 머신의 네트워크 탭에서 인바운드 보안규칙을 추가한다.
간편하도록 모든 ip와 포트를 열어주었다.
-
생성한 가상머신의 외부 ip로 접속한 접속한다.
-
이후 root계정으로 변경하고
sudo su
패키지를 업데이트한다.apt-get update
-
그 다음 svn을 설치한다.
apt-get install subversion
-
이후 원하는 디렉토리를 생성하고,
mkdir -p /home/svn/repos
해당 디렉토리에 repository를 생성한다.
svnadmin create /home/svn/repos/test
이후 해당 repository로 이동한다.
cd /home/svn/repos/test
-
이후 익명사용자가 접근할 수 있고, 파일을 작성할 수 있도록 설정을 변경한다.
cd conf
vi svnserve.conf
-
이후 svn을 사용할 수 있는 계정을 설정해준다.
vi passwd
현재 repository를 사용할 수 있는 user와 passwd를 설정한다.
-
서버를 실행한다.
svnserve -d -r /home/svn/repos/
-
서버세팅이 완성되었다.
-
이제 로컬 환경에서 해당 remote repository와의 연결을 수립한다.
svn://<가상머신 외부ip>/<생성한 저장소>