· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Subversion Tips

Subversion을 사용할 때 알아두면 유용한 팁. (질문을 올려도 됩니다. 답이 달리게 되면 원 질문자 또는 답변자가 질문과 답변을 정리하여 하나의 팁 항목으로 바꾸도록 합시다.)




1. 클라이언트로만 사용할 때

자신의 컴퓨터에 Subversion 저장소를 만들지 않고 오직 원격 서버에 접근하는 클라이언트만 있으면 되는 경우.


이 경우는 Apache 나 BerkeleyDB 등을 설치할 필요가 없다. 컴파일시 별도의 옵션을 주지 않고
# ./configure --without-berkeley-db
# make
# make install
로 클라이언트 사용이 가능하다..

make install은 root권한이 있어야 겠지만 make만 하면 실행 파일들이 생성되니 바로 사용 가능하다.

{{| raymundo의 경우: 세 대의 리눅스 시스템 중 한 대에는 서버로, 다른 두 대에는 일반 유저 계정에서 클라이언트로만 사용하고자 설치를 시도했다. root 권한으로 berkeley db 와 subversion 을 설치하는 것은 성공. 일반 유저로 설치를 시도한 두 대 중 한 대에서는 make 에서 에러가 났으나, 그 후 make install (./configure 실행시 prefix 를 자신의 홈디렉토리로 맞춤) 한 후 사용하니 일단 실행은 된다. (사용에 문제가 없다는 보장은 못함) 다른 한 대에서는 make 는 문제없이 성공한 상태에서, 소스 디렉토리 안에 생성된 svn 바이너리만 따로 옮겨서 사용을 하려고 했더니 libsvn_client-1.so.0 공유 라이브러리가 없다며 실행이 되지 않았다. 결국 make install 로 홈디렉토리 아래 라이브러리와 맨페이지 등을 전부 설치해 주고 사용하고 있다. (역시 문제가 없다는 보장은 못함) |}}

{{| hunkim raymundo님 일반유저로 설치시 무슨 에러가 나는지? 궁금합니다.

raymundo make 했을때 아래와 같이 되었습니다. configure 에서는 별 불평을 하지 않았던 것 같은데...
------ making all in apr
make[1]: 들어감 `/home/gypark/temp/subversion-0.34.0/apr' 디렉토리
(중략)
make[1]: 나감 `/home/gypark/temp/subversion-0.34.0/apr' 디렉토리
------ completed all in apr
------ making all in apr-util
make[1]: 들어감 `/home/gypark/temp/subversion-0.34.0/apr-util' 디렉토리
(중략)
make[1]: 나감 `/home/gypark/temp/subversion-0.34.0/apr-util' 디렉토리
------ completed all in apr-util
------ making all in neon
make[1]: 들어감 `/home/gypark/temp/subversion-0.34.0/neon' 디렉토리
cd src && make
make[2]: 들어감 `/home/gypark/temp/subversion-0.34.0/neon/src' 디렉토리
make[2]: Nothing to be done for `all'.
make[2]: 나감 `/home/gypark/temp/subversion-0.34.0/neon/src' 디렉토리

  Compilation complete. Run 'make install' (as root?) to install neon.

make[1]: 나감 `/home/gypark/temp/subversion-0.34.0/neon' 디렉토리
------ completed all in neon
/bin/sh /home/gypark/temp/subversion-0.34.0/libtool --silent --mode=compile gcc -DLINUX=2 -D_REENTRANT -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE  -g -
O2  -g -O2 -pthread  -DNEON_ZLIB  -I/usr/local/apache2/include -I./subversion/include -I. -I/home/gypark/temp/subversion-0.34.0/neon/src -I/home/gypark/local//include/neon -
I/home/gypark/temp/subversion-0.34.0/apr/include   -I/home/gypark/temp/subversion-0.34.0/apr-util/include  -o subversion/mod_dav_svn/liveprops.lo -
c /home/gypark/temp/subversion-0.34.0/subversion/mod_dav_svn/liveprops.c
/home/gypark/temp/subversion-0.34.0/subversion/mod_dav_svn/liveprops.c: In function `dav_svn_insert_prop':
/home/gypark/temp/subversion-0.34.0/subversion/mod_dav_svn/liveprops.c:260: error: parse error before "APR_UINT64_T_FMT"
/home/gypark/temp/subversion-0.34.0/subversion/mod_dav_svn/liveprops.c:458: error: `APR_MD5_DIGESTSIZE' undeclared (first use in this function)
/home/gypark/temp/subversion-0.34.0/subversion/mod_dav_svn/liveprops.c:458: error: (Each undeclared identifier is reported only once
/home/gypark/temp/subversion-0.34.0/subversion/mod_dav_svn/liveprops.c:458: error: for each function it appears in.)
make: *** [subversion/mod_dav_svn/liveprops.lo] 오류 1


|}}

2. SubversionCVS의 저장소

(DeleteMe 방준영님의 답변을 바탕으로 정리했습니다. 잘못된 부분이 있으면 지적이나 직접 수정 바랍니다. 잘못된 부분이 없는 게 확실하다면 이 줄을 지워주세요~)

CVS에서는 저장소의 root 가 있고 (예: /home/CVS) import 를 하면 특정한 프로젝트(예: "sample")의 디렉토리 (예: /home/CVS/sample) 가 생성이 되었습니다. checkout 을 할 때도 저장소의 root 와 프로젝트 이름을 인자로 주면 되었습니다. 저장소에 관한 각종 설정은 저장소 root 아래 CVSROOT 디렉토리 아래 저장되었습니다. 따라서 저장소 내의 모든 프로젝트에 동일하게 적용되었습니다.
저장소 root 만들기
# cvs -d /home/CVS init
  (root가 /home/CVS 를 생성함. /home/CVS/CVSROOT 디렉토리가 자동으로 생성됨)

프로젝트 저장공간 만들기
$ export CVSROOT=/home/CVS
$ cvs import sample vendor release
  (/home/CVS/sample 디렉토리가 생성되고, 현재 디렉토리의 내용이 저장소에 보관됨)

프로젝트 작업 공간 만들기
$ cvs checkout sample
  (현재 디렉토리에 sample 디렉토리를 만들고 저장소의 내용을 가져옴)
그런데 위와 같이 했을 때, 여러 개의 프로젝트 디렉토리들이 하나의 콘트롤 디렉토리 (/home/CVS/CVSROOT) 의 적용을 받기 때문에 여러 가지 문제점이 발생할 수 있습니다. 따라서 완전히 별개의 프로젝트들은 아예 저장소ROOT 자체를 따로 만들어서 사용한다고 합니다. 즉 cvs init 을 각각의 프로젝트 디렉토리마다 따로 해 주는 겁니다.


Subversion에서는 저장소의 root 가 있고, 그 아래 프로젝트의 디렉토리가 있고, 다시 그 아래 trunk, branch, tags 디렉토리가 있습니다. (그나마도 OS 의 화일시스템에서 보이는 디렉토리가 아니라 DB 에서 개념적으로 인식합니다. 그냥 ls 명령으로는 보이지 않는군요)
저장소 root 만들기
# mkdir /home/SVN/
  (root 가 /home/SVN 을 생성함. 그저 단순한 mkdir)
# chmod 1777 /home/SVN
  (일반 유저가 프로젝트를 import 하기 위해서는 write 퍼미션을 주어야 함. 퍼미션이 없으면 아래의 명령이 실행 불가)

프로젝트 저장공간 만들기
$ svnadmin create sample
  (/home/SVN/sample 디렉토리와 그 아래 여러 콘트롤 정보가 들어있는 디렉토리들이 생성됨)
$ svn mkdir file:///home/SVN/sample/trunk
$ svn import testwiki file:///home/SVN/sample/trunk
  (/home/SVN/sample 아래 데이타베이스에 trunk 디렉토리가 생성됨 - ls 명령으로 보이는 것이 아님)

프로젝트 작업공간 만들기
$ svn checkout file:///home/SVN/sample/trunk sample
  (현재 디렉토리에 sample 디렉토리를 만들고 저장소의 내용을 가져옴)
프로젝트마다 별도로 svnadmin create를 하기 때문에 콘트롤 정보도 별도로 유지됩니다. (/home/SVN/ 디렉토리 자체에는 콘트롤을 위한 별도의 화일이 생성되지 않습니다)


3. svn+ssh:// 프로토콜에서 매번 암호를 넣는 게 귀찮습니다


서버의 ~/.ssh 디렉토리에 공개키 파일(id_rsa.pub 또는 identity.pub)을 authorized_keys란 이름으로 복사해 두면 됩니다. --방준영

다음과 같은 상황을 가정하자.

  • 서버 : 192.168.0.1, 계정 hong
  • 클라이언트 : 192.168.0.5, 계정 gildong

클라이언트 쪽에서
gildong$ ssh-keygen -t rsa1
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/gildong/.ssh/identity):  <-- 그냥 엔터
Enter passphrase (empty for no passphrase):                          <-- 그냥 엔터
Enter same passphrase again:                                         <-- 그냥 엔터
Your identification has been saved in /home/gildong/.ssh/identity.
Your public key has been saved in /home/gildong/.ssh/identity.pub.
The key fingerprint is:
85:6e:e6:fa:53:bc:10:ad:57:98:04:c5:37:1c:40:1a gildong@192.168.0.1
이러면 ~gildong/.ssh/identity.pub 화일이 생긴다. 이것을 서버의 ~hong/.ssh/authorized_keys 화일에 append 해 준다.

또, 클라이언트 쪽에서 ~gildong/.ssh/config 화일에
Host 192.168.0.1
Protocol 1
을 추가해 준다.

이것은 svn 뿐 아니라 ssh 를 사용하는 모든 경우에 적용된다. 간단하게는 ssh hong@192.168.0.1 을 하여 암호 없이 로그인 되는지를 확인하면 된다.

만일 다음과 같은 에러가 난다면
Bad owner or permissions on ~gildong/.ssh/config
이것은 생성된 ~gildong/.ssh/config 권한을 다음과 같이 수정하여 주면 된다
gildong$ chmod 600 ~gildong/.ssh/config

만일 다음과 같은 에러가 난다면
$ ssh hong@192.168.0.1
Protocol major versions differ: 1 vs. 2
이것은 서버 쪽에서 SSH Protocol version 1 을 지원하지 않는 경우이다. 이 때는 서버 쪽에서 별도의 세팅을 해 주어야 한다. 먼저 서버의 /etc/ssh/sshd_config 를 다음과 같이 수정한다.
...
Protocol 2,1           <-- "2" 를 "2,1"로 변경
...
HostKey /etc/ssh/ssh_host_key    <-- 이 줄이 없다면 추가
...
/etc/ssh/ssh_host_key 화일이 존재하는지 확인하고, 없다면 클라이언트에서와 마찬가지로 서버의 호스트 키를 생성한다.
# ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key
이제 sshd 를 재시작한다.
# /etc/init.d/ssh restart
Restarting OpenBSD Secure Shell server: sshd.


4. 저장소 Backup/Export/Import

Subversion 은 관리자툴, svnadmin을 통해 저장소 dump와 load를 지원합니다. 마치 데이타베이스에서 테이블과 데이타들을 Dump하는것 처럼, 저장소 자료를 dump해서 백업을 받거나 다른 저장소로 옮길 수 있습니다.

  • svnadmin dump repository-location > dump.file:
ucsc$ svnadmin dump java > java.dump
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.

ucsc$ cat java.dump

SVN-fs-dump-format-version: 2

UUID: de97bdac-b8cd-0310-9476-eec04c096339

Revision-number: 0
Prop-content-length: 56
Content-length: 56
...
...

Dump 파일을 load하기 위해서는 svnadmin load 명령을 사용하면 됩니다. 이때 load할 파일을 표준입력(stdin)에서 받기때문에 다이렉션을 이용하는게 좋습니다.

  • svnadmin load repository-location < file-to-load :

ucsc$ svnadmin load sung < java.dump 

<<< Started new transaction, based on original revision 1
     * adding path : trunk ... done.

------- Committed revision 1 >>>

<<< Started new transaction, based on original revision 2
     * adding path : trunk/aa.c ... done.

------- Committed revision 2 >>>

<<< Started new transaction, based on original revision 3
     * editing path : trunk/aa.c ... done.

------- Committed revision 3 >>>


백업은 dump파일을 잘 보관하면 되겠죠?

4.1. Subversion이 버전업 하면서 저장소의 DB Scheme가 바뀌는 경우

http://subversion.tigris.org/project_status.html 에 살펴 보시면 릴리즈된 버전들 중에서 빨간색으로 표시된 것들이 있습니다. 이것들은 버전업을 하면서 DB의 scheme가 바뀌어 그전의 저장소를 그대로 사용할 수 없는 경우 입니다. 이런경우 저장소 dump와 load로 백업한 뒤에 복구해주어야 합니다.

Subversion을 업그레이드 하기 전에 반드시 저장소를 tar 같은 도구로 압축한 뒤에 백업 합니다.

각각의 저장소를 svnadmin dump를 이용해서(위의 예제 참조) dump 합니다. 반드시 업그레이드 전의 버전으로 dump 합니다.

Subversion을 컴파일 해서 업그레이드 한 뒤에 새 버전의 svnadmin으로 svnadmin load로 dump파일에서 저장소를 복구 합니다.

2003년 12월 3일에 릴리즈된 0.34.0버전으로 업그레이드 할 경우 저장소를 업그레이드 해 주어야 합니다.

처음부터 0.34.0 버전을 사용할 경우 저장소 업그레이드는 하지 않아도 됩니다.

Subversion의 소스 디렉토리 안의 notes/repos_upgrade_HOWTO에 나와 있습니다.



5. 바이너리 파일 관리

Subversion에서는 소스코드(텍스트)뿐만 아니고 바이너리 파일도 관리가 가능 합니다.

컴파일된 실행파일을 관리할 때도 매우 유용합니다.

예로 HWP, PDF, MS Word 파일 같은 것을 넣어 놓고 문서가 수정 될 때마다 Commit을 합니다.

그리고 예전 버전의 문서가 필요할때는 그 revision을 Checkout, Export를 하면 됩니다.

각각의 revision의 그때 그상황의 파일을 바로 가져 올 수 있습니다.

특히 잘못 수정해서 덮어쓰기 해버린 파일을 복구하기가 매우 쉽습니다.

물론 바이너리 파일이니 Diff로 비교하는 것은 의미가 없겠죠.


6. GUI 클라이언트 추천

Q. DocbookSgml/Subversion-HOWTO에는 TortoiseSVNRapidSVN 이 있는데, 어느 게 더 좋다고 생각하세요? 전자는 윈도우 탐색기에 통합된 인터페이스가 맘에 들고, 후자는 리눅스와 윈도우 둘 다에서 쓸 수 있는 점이 괜찮은 것 같긴 한데... (비교란 게 무의미할 지 모르지만, 이왕이면 앞서가는(?) 사람들을 따라하는게 편할 것 같아서.. ^^) --raymundo

A. 윈도우 프로그래밍을 많이 하신다면 TortoiseSVN이 무지 편리합니다. 저같은 경우는 요즘 거의 TortoiseSVN을 사용하고 있습니다. TortoiseSVN이 좋은점은 Subversion을 설치 하지 않아도 혼자 로컬에서 사용한다면 바로 저장소를 만들어줍니다. 리눅스에서 프로그래밍을 할 때는 그냥 Subversion의 기본 클라이언트인 svn을 사용 하고 있습니다. RapidSVN은 아직 사용해 보지 않아서 잘 모르겠군요. (저는 X윈도를 잘 쓰지 않아서..)--pyrasis

7. GUI 클라이언트 - TortoiseSVN

7.1. diff 출력


별도의 세팅을 하지 않은 상태에서는 매번 diff 를 실행하면 외장 diff 프로그램의 경로를 묻는다. 이 때 취소를 하면 기본적으로는 윈도우즈의 notepad.exe 가 실행되면서 unified diff 출력이 나온다. 이 방법은, 매번 취소를 한 번 해줘야 되는 것이 불편하고 (AnswerMe 경로 지정 창이 뜨지 않게 하는 방법을 아시는 분?) 소스 화일이 unix 화일 포맷일 경우는 줄바꿈이 제대로 되지 않는다.

setting 에 들어가서 Main->Diff viewer 를 따로 지정해 주면 unified diff 출력이 여기서 지정한 에디터에 나오게 된다. ViEditor 등을 사용하면 색상 지원이 되므로 편하다.

setting 에서 Main->External diff 지정하면 지정한 프로그램을 실행하여 diff 출력을 생성한다. "지정한프로그램 기존화일 수정한화일" 을 커맨드라인에서 실행하는 형식으로 보인다. 따라서 해당 프로그램이 커맨드라인 인자를 받을 수 있어야 한다. 그런데 이 경우, GNU diff 같은 프로그램을 사용하면 diff 출력이 도스창에 출력되고 출력이 끝나자마자 창이 사라져 버린다. 따라서 GUI를 제공하는 diff 프로그램을 찾아야 한다. (External diff 에 GNU diff 를, Diff viewer 에 gvim 을 지정해 보았으나 실패하였다. diff 와 viewer 를 호출하는 정확한 방법을 알아야 할 듯)

External diff 로 사용할 만한 것 : {{| pyrasis: 저는 TortoiseSVN에서 AcroEdit(www.acrosoft.pe.kr)를 설치하면 나오는 AcroDiff를 사용합니다. TortoiseSVN에서는 커맨드라인용 Diff는 사용할 수 없고 윈도용 GUI Diff는 사용이 가능 합니다. (Ultra Edit도 Diff가 됩니다.) |}}

{{| raymundo: 윈도우즈에서 ViEditor 를 사용한다면 gvim + GNU diff 조합을 추천. (사실은 해 본 게 이것밖에 없음)
  • diff.exe 가 있는 경로를 PATH 환경변수에 추가한다.
  • vimdiff.bat 배치화일을 만들어 그 내용을 gvim -d %1 %2 라 한다. (gvim.exe 의 전체 경로를 batch 화일에 적어주던가, gvim.exe 의 경로를 PATH 에 추가하던가 한다)
  • TortoiseSVN 의 External diff 를 vimdiff.bat 를 선택해 준다. (여기서 바로 gvim.exe -d 라고 지정해 줄 수 있다면 굳이 위의 배치화일을 만들 필요가 없을 텐데, 실제 해 보면 제대로 되지 않는다)
위와 같이 하면, svn diff 를 하면 gvim -d 기존화일 현재화일이 실행되고, gvim 은 다시 내부적으로 diff 기존화일 현재화일 > diff출력을 실행하여 그 결과를 다음 그림과 같이 보여준다


위 그림을 보면 수정, 추가, 삭제된 부분이 서로 다른 색상으로 표시되고, 양쪽이 동일한 부분은 ViEditor 의 folding 기능 (vim 6.* 대 버전부터 지원) 을 사용하여 접혀 있는 것을 볼 수 있다. 기본 출력인 unified diff 보다는 훨씬 보기 좋다. |}}

7.2. ssh 프로토콜에서 username 지정

Q. svn+ssh 프로토콜을 사용해서 checkout 을 하려 합니다. 저장소에 URL 을 넣는 곳에 "svn+ssh://서버.도메인.네임/저장소/경로/ 를 지정했더니만 "@서버.도메인.네임"의 암호를 넣으라고 합니다. username 이 없으니 아무리 암호를 넣어도 안 됩니다. "svn+ssh://username@서버.도메인.네임.. 과 같이 지정해 줘도 안 됩니다. 일단 찾아낸 해결책은 settign 의 Network->SSH Client 의 값인 "C:\Program Files\TortoiseSVN\TortoisePlink.exe" 뒤에 "-l username" 옵션을 주는 것인데, 이 경우 둘 이상의 SVN 서버에 연결해서 작업을 한다면 (그리고 두 서버에 접속할 때 쓰는 아이디가 서로 다르다면) 매번 저 세팅값을 바꿔가며 사용해야 한다는 건데... 도저히 말이 안 되는 것 같네요. 각 저장소에 대한 username 을 어떻게 따로 지정할 수 있을까요? --raymundo

A. TortoiseSVN에서는 Putty의 세션을 그대로 사용할수 있습니다. Putty에서 세션을 생성하시고 저장소 경로를 "svn+ssh://session_name/path" 와 같이 지정해주시면 됩니다. -- owlet

7.3. 기타

Q. TortoiseSVN 홈페이지에서 보니 아직 Subversion 0.34 를 지원하는 버전이 나오지 않았네요. 그러면 0.34 를 사용하는 repository 에 접근하면 안 되는 걸까요? 메일링 리스트에 [http]관련 문답이 있습니다만, 무슨 말인지 모르겠습니다.

A. Subversion 0.34.0은 자체 DB Scheme만 바뀐것이지 접근하는 프로토콜은 바뀌지 않은것 같습니다. 저는 0.34.0을 설치해놓고 TortoiseSVN은 0.22.1를 사용하고 있는데 아무 문제가 없습니다. --pyrasis

Q. GUI 클라이언트 - TortoiseSVN 에 관한 내용을 TortoiseSVN으로 옮기는 것이 어떤가요. 관심이 있는 사람이 실제로 이부분을 찾기가 어려운데요. --lotus

8. 다른 사용자의 access 제어

Q. A 라는 유저가 sample 이라는 프로젝트를 import 했다고 할 때, B 라는 사용자가 update, commit 등을 할 수 있게 허용하고자 합니다. 여러 가지 상황이 있을텐데,
  • B 는 svn+ssh 로 A 의 아이디와 암호를 사용하여 commit 한다 - 로컬, 리모트 두 곳에서 사용 가능하고 별다른 설정이 필요가 없을 텐데, 이것은 A 와 B 가 동일한 사람일 때 정도나 가능하겠죠. log 에도 항상 A 가 commit 한 것으로 나오니 구분하기도 어렵겠습니다.
  • A 와 B 가 동일 시스템에 있는 서로 다른 사용자이다 - 이 때 B 가 file: 프로토콜을 사용해서 checkout 하는 것은 permission denied 에러를 내면서 실패하는군요. A 가 sample 의 저장소에서 chmod -R o+w * 을 하여 db 를 비롯한 모든 화일에 읽기 권한을 열었더니 checkout, update, commit 이 전부 가능하게 되었습니다. 그리고 (직접 해 보지는 않았으나) 이 경우는 B 가 svn+ssh: 프로토콜을 사용하여 자신의 아이디로 로그인하여 commit 하는 것도 가능할 것으로 생각됩니다. 하지만 화일의 퍼미션을 직접 변경해서 권한을 준다는 것이 꺼림칙하고, B 의 경우 update 만 가능하고 commit 은 불가능하게 하고 싶을 때는 어떻게 해야 될 지 모르겠습니다.
  • B 는 svn: 프로토콜을 사용한다 - 이 방법은 화일 퍼미션을 변경하지 않고, 원하는 대로 B 의 권한 (update 만 허용할 지, commit 도 허용할 지) 을 조절할 수 있다는 장점이 있는데, 생각할 수 있는 단점은
    • svnserve 를 별도로 띄워야 한다
    • 서버와 동일 머신에 있더라도 file: 프로토콜 대신 svn: 을 써야 한다. (얼마나 더 느린지는 모르겠습니다만)
    • 다른 사람은 읽기만, B 를 비롯한 일부 사용자에게는 commit 까지 허용하고 싶다면 B 를 비롯한 commiter 들에 대해 일일이 별도의 아이디와 암호를 만들어 주어야 한다. (commiter 들을 위한 전용 아이디/암호를 하나만 만들 수 있겠지만, 이 경우 누가 commit 을 했는지 log 에 나오지 않겠죠)
  • B 를 비롯한 일부사용자에게는 commit 허용, 또다른 일부의 사람들에게는 읽기만 허용, 나머지 사람들에게는 읽기조차 거부하도록 설정하려면 - 어떻게 해야 될까요?
    • precommit hook을 이용하면 됩니다.


9. commit 메시지에 한글을 쓸 수가 없나요?

Q. svn commit 을 하면 에디터가 떠서 메시지를 남길 수 있게 되어 있는데, 여기에 한글로 입력하고 에디터를 종료하면 다음과 같은 에러가 납니다. {{| subversion/libsvn_client/commit.c:733: (apr_err=22) svn: Invalid argument svn: Commit failed (details follow): subversion/libsvn_subr/utf.c:170: (apr_err=22) svn: failure during string recoding subversion/clients/cmdline/util.c:357: (apr_err=22) svn: Your commit message was left in a temporary file: subversion/clients/cmdline/util.c:358: (apr_err=22) svn: '/etc/svn-commit.tmp' |}} 영문으로만 넣을 경우에는 정상적으로 커밋이 되었습니다. 메시지에 한글을 지원하지 않나요? --raymundo

A. 저역시 pyrasis님의 글을 보고 흥미를 느껴 이제 막 사용하기 시작한 사용자인데요...저의 경우는 TortoiseSVN을 사용하고 있는데, 커맨드라인 상에서는 저도 같은 문제입니다만, TortoiseSVN을 사용하니까, 제가 올린 한글 log기록이 화면에 그대로 나오더군요?! 아시겠지만,Tortoise에서는 Log기록을 자체 제공하는 UI의 textedit윈도우에서 합니다. 단점은 서버측에서 svnlook log /path/to/repos/ 하면 세상에(-_-;) 로그기록이 암호화(?)되어서 나온다는 겁니다. 이 문제는 어떻게 해결할 수 있을지 모르겠습니다. 소스를 받기는 했는데.. 아직 제 VC에서 컴파일을 못해서요. -_-; Gygnus도 설치하였는데. 아직 익숙치 않아서 소스에 한번 손을 대보고 싶어도(사실 문자열형 관련된 부분만 손 보면 될텐데. Windows XP에서는 %APPDATA%환경변수의 값에 한글이 들어가 있는 경우, 즉, C:\Documents and setting\아무개\Application Data 일케 되어 있는 경우에는 svn 커맨드라인 프롬프트가 아예 먹질 않더군요. 이거때매 GUI클라이언트를 쓴다는. -_-;.) 이걸 어캐 해결할 수 있을지 모르겠습니다

A. 위 질문을 올리고 어느 순간, "일반 유저에서는 한글 메시지가 잘 되는데 root 에서는 안 되더라"는 것을 발견하고는, 쉘 환경변수 LANG 에 ko_KR.eucKR 값을 넣은 후 해 보니 잘 되는군요. --raymundo

10. 심볼릭 링크

Q. import 를 하고 다시 checkout 을 해서 봤더니만 원래 임포트한 디렉토리 안에 있던 심볼릭링크들이 죄다 정규 화일(자신이 링크하고 있던)로 바뀌었습니다. 별 수 없이 이런 화일들을 제거하고 심볼릭 링크를 수작업으로 만들어줬더니 svn status 명령을 할 때마다 ? 표시가 나와서 불편합니다. (일일이 ignore 시킬 수도 없고..) 심볼릭 링크를 링크 자체로 임포트하는 방법이 없을까요? -- raymundo 2003-12-16 01:02:50

A. KLDP BBS 의 방준영님의 답변 : 1.0 이후에서 지원할 계획이라 합니다(1.0에서는 안됨).

11. 파일 하나만 가지고오는 방법은 없는지요?

Q. 제 같은 경우는 소스 보다는 문서 위주의 버전을 관리하는 경우가 많습니다. 그러다 보니 필요에 따라서는 문서 하나만을 가지고 가는 분들도 생기기도 하고 외부에 나가 있을 경우 전부를 가지고 오기 보다는 하나의 파일만을 꺼내와야 하는 경우가 많이 생기는데요. 디렉토리는 가능하던데 혹시 파일단위로 가지고 올수 있는 방법은 없을 까요?

A. TortoiseSVN 에서 Repo-Browser 를 사용하면 원하는 파일만 선택해서 저장 할 수 있습니다. svn 커멘드 라인 명령은 잘 모르겠네요. :)

  • 파일만 Checkout 할 수는 없습니다. Attempted to create entry in non-directory parent 에러가 나며 디렉토리가 있어야 .svn 등의 컨트롤 파일들을 저장할 수도 있겠죠? TortoiseSVN으로 하나의 파일을 복사할 수 있지만 이 복사된 파일을 수정후 다시 Commit할 수 있는지 궁금합니다. - 김성훈

    • ftp 사용하듯 incoming 디렉토리 하나 만들어 import 하시고 원래 작업하시는 곳에서 파일을 옮기고 삭제 하시는것이... :|

  • SubVersion FAQ 에 동일한 질답이 있습니다. export를 이용해 버전관리가 되지 않는 단일파일은 추출가능하다고 읽었습니다. - 신동호

12. FreeBSD 5.3 이상에서 포트로 설치할 경우

svnserve 할때 TCP6로만 포트가 열리더군요. 그래서 아래와 같이 하니까 잘 되었습니다.
$svnserve -d -r /svn --listen-host=0.0.0.0

13. 파일의 대소문자 바꾸기


''' Q. commit 이후 아이콘이 바로 변경되지 않는 이유는 ?'''





sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-09-07 14:32:17
Processing time 0.0213 sec