본문 바로가기

개발환경

SVN File Protocol 사용하기

반응형

C:\>svn --version
svn, 버젼 1.4.6 (r28521)
    Dec 20 2007, 16:33:06에 컴파일 됨

Copyright (C) 2000-2007 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

저장소(repository) 접근 모듈(RA) 목록:

* ra_dav : WebDAV (DeltaV) 프로토콜을 통해 저장소에 접근하는 모듈
  - 'http' 스키마를 처리합니다.
  - 'https' 스키마를 처리합니다.
* ra_svn : svn 네트워크 프로토콜을 사용하여 저장소에 접근하는 모듈
  - 'svn' 스키마를 처리합니다.
* ra_local : 로컬 디스크에 있는 저장소를 접근하기 위한 모듈
  - 'file' 스키마를 처리합니다.

----
저장소 Direcotory 생성
D:\MyRepository\svn>svnadmin create D:\MyRepository\svn

---
저장소에 File 추가
D:\MyRepository\svn\temp>svn import -m "SVN Readme" file:///D:/MyRepository/svn

현재 Directory (D:\MyRepository\svn\temp)에 있는 파일을  file:///D:/MyRepository/svn Repository에 저장한다.

---
CheckOut 하기
D:\test>svn co file:///D:/MyRepository/svn
A    svn\day.txt
체크아웃된 리비전 3.
---
CheckOut된 file 상태보기
D:\test\svn>svn status Day.txt
M      day.txt
---
D:\test\svn>svn diff day.txt
Index: day.txt
===================================================================
--- day.txt     (revision 3)
+++ day.txt     (working copy)
@@ -1,3 +1,5 @@
 monday
 tuestday
-wednesday
\ No newline at end of file
+wednesday
+thursday
+friday
\ No newline at end of file
---
Commit
D:\test\svn>svn commit -m "Add"
전송중         day.txt
파일 데이터 전송중.
커밋된 리비전 4.
---
log 보기
D:\test\svn>svn log Day.txt
------------------------------------------------------------------------
r4 | 2008601 | 2008-03-07 09:59:07 +0900 (금, 07 3 2008) | 1 line

Add
------------------------------------------------------------------------
r3 | 2008601 | 2008-03-07 09:52:46 +0900 (금, 07 3 2008) | 1 line

SVN Readme
------------------------------------------------------------------------
---
Subversion은 Locking 이 없다. 하지만 File 관리가 가능하다.
충돌 상황을 다음과 같이 해결한다.
---
기본 Directory가 아닌 다른 Directory에 CheckOut 합니다.
D:\test>svn co file///d:/myrepository/svn aladdin
---
원래의 svn 폴더에서 file을 수정한다.
D:\test>cd svn

D:\test\svn>notepad day.txt

D:\test\svn>svn commit -m "add saturday"
전송중         day.txt
파일 데이터 전송중.
커밋된 리비전 5.
---
aladdin 폴더의 day.txt의 Revision은 4이고 svn의 현재 revision은 5 입니다.
다른 사용자가 갱신을 한 것이지요.
D:\test\aladdin>svn status --show-updates
       *        4   day.txt
리비전의 상태:      5
---
현재 directory의 day.txt 와 저장소의 day.txt를 비교하도록 하기위해 -rHEAD Option을 사용했습니다.
D:\test\aladdin>svn diff -rHEAD day.txt
Index: day.txt
===================================================================
--- day.txt     (revision 5)
+++ day.txt     (working copy)
@@ -2,5 +2,4 @@
 tuestday
 wednesday
 thursday
-friday
-saturday
\ No newline at end of file
+friday
\ No newline at end of file
aladdin에 있는 File을 수정하지 않았으므로 위와 같은 결과를 얻음
---
Update 한다.
D:\test\aladdin>svn update
U    day.txt
업데이트 된 리비전 5.
---
이제 두사람이 각각 같은 파일을 변경한 경우
---
svn과 aladdin이 가진 day.txt 파일 각자를 변경합니다.
---
먼저 svn을 Commit.
---
D:\test\svn>svn commit -m "Add It's week"
전송중         day.txt
파일 데이터 전송중.
커밋된 리비전 6.

D:\test\svn>cd..

D:\test>cd aladdin
---
alladin을 Commit.
---

D:\test\aladdin>svn commit -m "Add Sunday"
전송중         day.txt
svn: 커밋이 실패하였습니다:
svn: 시간이 오래되었습니다.: 'day.txt' (트랜잭션 '6-1')
---
aladdin은 최신 버전이 맞지 않으므로 실패 하였습니다.
type
---
D:\test\aladdin>svn update
C    day.txt
업데이트 된 리비전 6.

D:\test\aladdin>type day.txt
monday
tuestday
wednesday
thursday
friday
<<<<<<< .mine
saturday
sunday=======
saturday
It's week>>>>>>> .r6
---
svn, aladdin모두의 변경이 적용된 상태가 되었다.
---
Commit을 하려 하나..
D:\test\aladdin>svn commit -m "saturday"
svn: 커밋이 실패하였습니다:
svn: 커밋 멈춤: 'D:\test\aladdin\day.txt' 이(가) 아직 충돌 상태임.

---
충돌 상황을 해제 해야
D:\test\aladdin>svn resolved day.txt
충돌상황 해제됨 'day.txt'

Commit 된다.
D:\test\aladdin>svn commit -m "saturday"
전송중         day.txt
파일 데이터 전송중.
커밋된 리비전 7.

D:\test\aladdin>type day.txt
monday
tuestday
wednesday
thursday
friday
<<<<<<< .mine
saturday
sunday=======
saturday
It's week>>>>>>> .r6
---
verbose Option은 더 자세한 정보를 보여줍니다.
D:\test\svn>svn log --verbose Day.txt
---
Delete
D:\MyRepository\svn>svn delete -m "SVN Delete" file:///D:/MyRepository/svn
---
편집기 설정 set SVN EDITOR=notepad
---

위와 같은 명령으로 Apache와 같은 서버를 쓰지 않고도 Local로 file Protocol을 이용하여 Version 관리를 할 수 있습니다.

그러므로 서버에 SVN을 설치하고 Client는 Terminal로 서버에 접근하여 File을 관리 할 수도 있겠네요.


참조 : Pragmatic Version Control Using Subversion / Mike Mason

반응형

'개발환경' 카테고리의 다른 글

Hudson 설치  (0) 2008.03.12
SVN Command  (0) 2008.03.07
SVN Protocol을 이용한 버전 관리  (0) 2008.03.07
AutomationBuildSystem 구현 계획  (0) 2008.03.06
EclisePlugin Subversive 설치중  (0) 2008.03.05