<VirtualHost *>
ServerAdmin xblueb@gmail.com
ServerName trac.blueb.net
ServerAlias trac.blueb.net
DocumentRoot /var/lib/trac/
<Location />
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /var/lib/trac
PythonOption TracUriRoot ""
AuthType Basic
AuthName "Trac"
AuthUserFile /var/lib/trac/.htpasswd
#AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>
<Location /trac.cgi>
SetEnv TRAC_ENV "/var/lib/trac"
# SetEnv TRAC_ENV_PARENT_DIR "/var/lib/trac"
</Location>
<Directory /var/lib/trac/>
Options FollowSymLinks MultiViews
AllowOverride FileInfo
Order allow,deny
allow from all
</Directory>
<Location /dev> #set up Trac handling
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
#PythonOption TracEnvParentDir /var/lib/trac // 주석처리 후 아래 라인을 추가
PythonOption TracEnv /var/lib/trac/dev
PythonOption TracUriRoot /dev
SetEnv PYTHON_EGG_CACHE /tmp/trac-eggs
</Location>
<Location /svn/dev>
DAV svn
SVNPath /var/lib/svn/dev
AddDefaultCharset utf-8
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /var/lib/trac/.htpasswd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
ErrorLog /var/log/apache2/trac.blueb.net.error.log
CustomLog /var/log/apache2/trac.blueb.net.access.log combined
</VirtualHost>
'웹프로그래밍™/Trac, SVN, Eclipse'에 해당되는 글 17건
- Trac VirtuaHost Apache 설정 2008/05/09
- Trac Command List 2008/01/18
- Trac에 추가설치된 plugin 반영 2008/01/15
- TortoiseSVN 2008/01/08
- Eclipse PHP Development Tools = PDT Project 2008/01/08
- Eclipse 설치에 필요한 플러그인 2008/01/08
- Trac XmlRpc plugin 설치 방법 2008/01/06
- Bug Tracking System에서 알아두어야 할 용어 2008/01/04
- Trac AccountManagerPlugin 설치 및 설정 2008/01/04
- 우분투 Trac webadmin 설치 및 Trac login 설정법 2008/01/03
- 우분투 Trac Project 추가 방법 2008/01/03
- TRAC 프로젝트 생성 및 [슈퍼]유저 등록 2006/08/18
- Subversion 사용법 2006/08/18
- [KLDP] Trac 설치 가이드 2006/08/18
- Trac 설치 2006/05/30
Trac VirtuaHost Apache 설정
Trac Command List
Usage: trac-admin </path/to/projenv> [command [subcommand] [option ...]]
Invoking trac-admin without command starts interactive mode.
about
-- Shows information about trac-admin
help
-- Show documentation
initenv
-- Create and initialize a new environment interactively
initenv <projectname> <db> <repostype> <repospath> <templatepath>
-- Create and initialize a new environment from arguments
hotcopy <backupdir>
-- Make a hot backup copy of an environment
resync
-- Re-synchronize trac with the repository
-- Subversion 저장소를 다시 연결 설정한다.
resync <rev>
-- Re-synchronize only the given <rev>
-- Subversion 저장소를 변경한다.
upgrade
-- Upgrade database to current version
wiki list
-- List wiki pages
wiki remove <name>
-- Remove wiki page
wiki export <page> [file]
-- Export wiki page to file or stdout
wiki import <page> [file]
-- Import wiki page from file or stdin
wiki dump <directory>
-- Export all wiki pages to files named by title
wiki load <directory>
-- Import all wiki pages from directory
wiki upgrade
-- Upgrade default wiki pages to current version
permission list [user]
-- List permission rules
permission add <user> <action> [action] [...]
-- Add a new permission rule
permission remove <user> <action> [action] [...]
-- Remove permission rule
component list
-- Show available components
component add <name> <owner>
-- Add a new component
component rename <name> <newname>
-- Rename a component
component remove <name>
-- Remove/uninstall component
component chown <name> <owner>
-- Change component ownership
ticket remove <number>
-- Remove ticket
ticket_type list
-- Show possible ticket types
ticket_type add <value>
-- Add a ticket type
ticket_type change <value> <newvalue>
-- Change a ticket type
ticket_type remove <value>
-- Remove a ticket type
ticket_type order <value> up|down
-- Move a ticket type up or down in the list
priority list
-- Show possible ticket priorities
priority add <value>
-- Add a priority value option
priority change <value> <newvalue>
-- Change a priority value
priority remove <value>
-- Remove priority value
priority order <value> up|down
-- Move a priority value up or down in the list
severity list
-- Show possible ticket severities
severity add <value>
-- Add a severity value option
severity change <value> <newvalue>
-- Change a severity value
severity remove <value>
-- Remove severity value
severity order <value> up|down
-- Move a severity value up or down in the list
version list
-- Show versions
version add <name> [time]
-- Add version
version rename <name> <newname>
-- Rename version
version time <name> <time>
-- Set version date (Format: "YYYY-MM-DD" or "now")
version remove <name>
-- Remove version
milestone list
-- Show milestones
milestone add <name> [due]
-- Add milestone
milestone rename <name> <newname>
-- Rename milestone
milestone due <name> <due>
-- Set milestone due date (Format: "YYYY-MM-DD" or "now")
milestone completed <name> <completed>
-- Set milestone completed date (Format: "YYYY-MM-DD" or "now")
milestone remove <name>
-- Remove milestone
Trac에 추가설치된 plugin 반영
아래와 같이 upgrade 명령어을 실행해야 한다.
# trac-admin /var/lib/trac/[project] upgrade
TortoiseSVN
TortoiseSVN 1.4.7
http://tortoisesvn.tigris.org/
Features of TortoiseSVN/Subversion
- Easy to use
- all commands are available directly from the windows explorer.
- 모든 명령은 widows explorer 에서 쉽게 사용할수 있다
- only commands that make sense for the selected file/folder are shown. You won't see any commands that you can't use in your situation.
- See the status of your files directly in the Windows explorer
- descriptive dialogs, constantly improved due to user feedback
- allows moving files by right-dragging them in the windows explorer
- All Subversion protocols are supported
- http://
- https://
- svn://
- svn+ssh://
- file:///
- svn+XXX://
- Powerful commit dialog
- integrated spell checker for log messages
- auto completion of paths and keywords of the modified files
- text formatting with special chars
- The big picture
- Can create a graph of all revisions/commits. You can then easily see where you created a tag/branch or modified a file/folder
- Graphs of commit statistics of the project
- Easy comparing of two branches or tags
- Per project settings
- minimum log message length to avoid accidentally committing with an empty log message
- language to use for the spell checker
- Integration with issue tracking systems
TortoiseSVN provides a flexible mechanism to integrate any web based bug tracking system.
- A separate input box to enter the issue number assigned to the commit, or coloring of the issue number directly in the log message itself
- When showing all log messages, an extra column is added with the issue number. You can immediately see to which issue the commit belongs to.
- Issue numbers are converted into links which open the webbrowser directly on the corresponding issue
- Optional warning if a commit isn't assigned to an issue number
- Helpful Tools
- TortoiseMerge
- Shows changes you made to your files
- Helps resolving conflicts
- Can apply patchfiles you got from users without commit access to your repository
- TortoiseBlame: to show blames of files. Shows also log messages for each line in a file.
- TortoiseIDiff: to see the changes you made to your image files
- SubWCRev: to include the revision numbers/dates/... into your source files
- TortoiseMerge
- Available in many languages
- TortoiseSVN is stable
- Before every release, we create one or more 'release candidates' for adventurous people to test first.
- During development cycles, many people test intermediate builds. These are built every night automatically and made available to all our users. This helps finding bugs very early so they won't even get into an official release.
- A big user community helps out with testing each build before we release it.
- A custom crash report tool is included in every TortoiseSVN release which helps us fix the bugs much faster, even if you can't remember exactly what you did to trigger it.
- Support
- Extensive and descriptive documentation is available in several formats and languages
- A big list of frequently asked questions and problems with all the answers is also available
- For your specific problems, we have a mailing list where many users can help you. Usually you get an answer for your problem within a few hours.
Eclipse PHP Development Tools = PDT Project
http://www.eclipse.org/pdt/
PHPeclipse 를 조금 써보다가 구문강조가 맘에 안들어 PDT로 바꿔보니 PHPeclipse 보다는 좀 나은듯..
하지면 역시 editplus보다는 못하다는
물론 사용자가 직접 변경도 가능하지만 이상하게 내 PC에 설치된 eclipse는 뭔가 이상하다..
패널에서 설정 항목들이 모두 보이지 않는다.. ㅠ.ㅠ
그리고 또 프로젝트 생성 패널에서도 역시나...
뭐가 문제인지 64bit 라서 그런간가?? ㅠ.ㅠ
Eclipse 설치에 필요한 플러그인
http://www.eclipse.org/downloads/
[JDK]
http://java.sun.com/javase/downloads/index.jsp
[Eclipse Plug-in List]
[AnyEditTools]
http://andrei.gmxhome.de/eclipse/
[Subversive] - Subversion 관리 툴
http://www.polarion.org/projects/subversive/download/update-site/
[PHPeclipse] - PHP coding 툴
http://phpeclipse.sourceforge.net/update/releases
[RSE] - Remote System 툴 (원격 FTP)
http://www.eclipse.org/downloads/download.php?file=/dsdp/tm/downloads/drops/R-2.0.2-200711131300/RSE-SDK-2.0.2.zip
[Mylyn]
http://download.eclipse.org/tools/mylyn/update/e3.3
[Aptana] - Javascript coding 툴
http://update.aptana.com/install/3.2/
Trac XmlRpc plugin 설치 방법
XmlRpc plugin
root@devserver:~# easy_install http://trac-hacks.org/svn/xmlrpcplugin/0.10/trac.ini 파일에 아래 코드 추가
Downloading http://trac-hacks.org/svn/xmlrpcplugin/0.10/
Doing subversion checkout from http://trac-hacks.org/svn/xmlrpcplugin/0.10/ to /tmp/easy_install-qmqCpp/0.10
Processing 0.10
Running setup.py -q bdist_egg --dist-dir /tmp/easy_install-qmqCpp/0.10/egg-dist-tmp-uUDNXR
Adding TracXMLRPC 0.1 to easy-install.pth file
Installed /usr/lib/python2.5/site-packages/TracXMLRPC-0.1-py2.5.egg
Processing dependencies for TracXMLRPC==0.1
Finished processing dependencies for TracXMLRPC==0.1
root@devserver:~#
[components]
tracrpc.* = enabled
> 파일 다운로드 받아 직접 설치시 방법
[root@]# unzip xmlrpcplugin.zip[root@]# cd xmlrpcplugin/0.10/
[root@0.10]# python setup.py bdist_egg
[root@0.10]# cd dist/
[root@dist]# easy_install TracXMLRPC-0.1-py2.5.eggProcessing TracXMLRPC-0.1-py2.5.egg
Removing /usr/lib/python2.5/site-packages/TracXMLRPC-0.1-py2.5.egg
Copying TracXMLRPC-0.1-py2.5.egg to /usr/lib/python2.5/site-packages
TracXMLRPC 0.1 is already the active version in easy-install.pthInstalled /usr/lib/python2.5/site-packages/TracXMLRPC-0.1-py2.5.egg
Processing dependencies for TracXMLRPC==0.1
Finished processing dependencies for TracXMLRPC==0.1
Bug Tracking System에서 알아두어야 할 용어
출처 : http://blog.naver.com/eddykim72?Redirect=Log&logNo=40040460022
버그 관리의 중요성
팀 단위로 개발을 할 경우 서로가 서로의 버그를 발견하는 경우가 있는데, 많은 경우 구두로 이러한 과정이 이루어진다. 간단하면서도 심각한 버그라면 발견시 바로 해결하기도 하지만, 많은 버그들이 뒤로 미루거나 다른일과 겹치거나 하면서 잊혀져 버진다. 그 결과 버그가 계속적으로 누적되고, 발생했던 버그가 또 다시 발생하고 이 버그가 해결했던 버그인지 아닌지도 헷갈리고 해결해야 되는건지 아닌건지도 헷갈리는 최악의 상황에 도달하게 된다. 때에 따라서는 소모적인 책임공방도 벌어지게 된다.
메일로 발견된 버그를 보고하면 그나마 좀 낳긴 하지만 임시방편일 뿐이라는 건 사용해본 사람은 안다.
결국 프로젝트는 이런저런 자잘한 버그들 때문에 문제가 계속되고 어찌어찌해서 급하게 출시를 하더라도 완성도가 떨어지는 제품을 고객에게 내놓게 된다.
버그 관리
버그를 관리하고 감시하기 위해서는 버그에 대해서 심각도와 우선순위등을 할당하게 된다. 그래서 아래의 용어에 대해서 명확히 이해를 하고 있어야 버그관리가 제대로 이루어질 수 있을 것이다.
버그 심각도 (Severity)
Blocker :개발 혹은 테스트 작업을 진행할 수 없게 만듦
Critical : 프로그램이 깨지거나, 데이터 손상 및 메무리 누수가 발생함
Major : 기능상 중요한 결정이 발견됨
Normal : 일반적인 문제로 반드시 고쳐야할 버그
Minor : 기능상 그리 중요하지 않은 결점 혹은 쉽게 해결할 수 있는 문제
Trivial : 오탈자, 텟스트 정렬 문제와 같은 외형적인 문제
Enhancement : 기능 및 성능 개선 관련 사항
버그 처리 우선순위 (Priority)
즉시 (P1) : Prevents work from getting done, causes data loss, or BFI("Bad First Impression") 가장 먼저 처리해야함
긴급 (P2) : Workaround required to get stuff done.
보통 (P3) : Like P2, but rarely encountered in normal usage.
낮음 (P4) : Developer concern only, API stability ro cleanliness issue.
없음 (P5) : Nice to fix, but in a pinch we could live with it. 가장 나중에 처리해도 됨
버그 상태 정보
UNCONFIRMED (승인되지 않음)
: 최근에 테이터베이스에 등록된 버그로, 아무도 이 버그에 대해서 확인을 해보지 않았다. 즉 아직 버그인지 아닌지도
검증이 되지 않은 상태다. 등록된 버그를 Confirm할 수 있는 사용자는 이 버그를 승인할 수 있으며, NEW(새로운 버그)로 하거나
해결될 경우 RESOLVED등의 상태로 변경이 가능하다.
NEW (신규 버그)
: 이 버그는 최근에 버그를 할당받은 담당자에 의해서 버그로 인정되었으며, 이에 대한 처리가 이루어져야 한다.
이 상태의 버그는 수락(accept)될 수 있으며, 필요한 경우 다른 사람에게 전달될 수(ASSIGNED)있다.
만약 다음 단계로 더 이상 진행이 안된다면 계속 NEW상태로 남아 있을 것이고, 문제가 해결된다면 RESOLVED 상태로
전이될 수 있을 것이다.
ASSIGNED ( 할당됨 )
: 이 버그는 아직 해결되지 않았지만, 버그를 처리할수 있는 적합한 사람에게 할당되어져 있음을 의미한다.
REOPENED (다시 오픈됨)
: 이전에 해결(CLOSED)되었던 버그라고 하더라도 다시 재현될 수 있고, 혹은 담당자가 봤을 때 버그처리가 명확하게 되어있지
않음을 인지할 수도 있을 것이다. 이 경우 REOPENED 상태가 될수 있을 것이다. 이 상태의 버그들은 ASSIGNED
혹은 RESOLVED 상태로 전이될 수 있다.
RESOLVED (처리됨)
: 처리가 되었으며, 품질보증(QA) 담당자의 검증을 기다린다. 이 상태의 버그들은 REOPENED, VERIFIED 상태로
혹은 CLOSED 상태로 전이될 수 있다.
VERIFIED (검증됨)
: QA 담당자가 버그와 처리결과를 보고 적절하게 처리가 완료되었는지를 검증하게 된다.
CLOSED (닫힘)
: 버그가 완전히 사라졌다고 간주되는 상태다. 그러나 불행히도 다시 살아나는 경우가 발생할 수 있는데,
이때는 REOPENED 상태가 되어야 한다.

버그 처리 결과
버그에 어떤 일이 발생했는지 나타낸다.
FIXED (해결됨)
: 테스트가 완료되었으며 버그 트리에 해결되었다고 표시된다.
INVALID (버그아님)
: 기술된 문제는 버그가 아니었음.
WONTFIX (해결불가)
: 기술된 문제는 해결될 수 없는 버그이다.
LATER (나중에)
: 기술된 문제는 본 제품에서는 수정될 수 없다. 차후 제품에 수정이 가능할 수 있다.
REMIND (기억할 것)
: 기술된 문제는 본 제품의 현재 버전에서는 수정할 수 없는 버그이지만, 앞으로 계속 영향을 끼칠 것으로 예상된다.
DUPLICATE (중복됨)
: 기술된 문제는 기존의 버그와 중복되었다.(혹은 유사 버그가 이미 존재함) 버그를 중복되었다고 표시하기 위해서는
기존의 버그 번호를 필요로 한다.
WORKSFORME (파악할 수 없음)
: 버그를 재현해 보려고 많은 노력을 기울였지만 실패했으며, 생성된 코드를 분석해봐도 왜 보고된 문제가 발생했는지를 파악할 수
없는 상태이다. 이 문제를 해결하기 위해서는 추가적인 정보가 필요하고, 그럴경우 이 버그는 다시 할당될 수 있다. 혹은 문제를
파악할 수 있을 만한 다른 개발자에게 할당할 수 있을 것이다.
출처 : http://blog.naver.com/eddykim72?Redirect=Log&logNo=40040460022
Trac AccountManagerPlugin 설치 및 설정
AccountManagerPlugin은 사용자 관리를 지원해 주는 Trac 프러그인 이다.
설치 방법
# easy_install http://trac-hacks.org/svn/accountmanagerplugin/0.10
Downloading http://trac-hacks.org/svn/accountmanagerplugin/0.10
Doing subversion checkout from http://trac-hacks.org/svn/accountmanagerplugin/0.10 to /tmp/easy_install-ywwLB6/0.10
Processing 0.10
Running setup.py -q bdist_egg --dist-dir /tmp/easy_install-ywwLB6/0.10/egg-dist-tmp-WZOCHQ
Adding TracAccountManager 0.1.3dev-r2548 to easy-install.pth file
Installed /usr/lib/python2.5/site-packages/TracAccountManager-0.1.3dev_r2548-py2.5.egg
Processing dependencies for TracAccountManager==0.1.3dev-r2548
Finished processing dependencies for TracAccountManager==0.1.3dev-r2548
#
설치 후 Trac Project 페이지 접근이 에러 메시지가 나오는 경에는 apache host conf 파일에
SetEnv PYTHON_EGG_CACHE /tmp/trac-eggs 내용을 추가 한다.
<Location /project> #set up Trac handling
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
#PythonOption TracEnvParentDir /var/lib/trac
PythonOption TracEnv /var/lib/trac/project
PythonOption TracUriRoot /project
SetEnv PYTHON_EGG_CACHE /tmp/trac-eggs
</Location>
Trac 페이지에서 My Account(계정관리) 와 Register(사용자 등록) 사용하기 위에서는 trac.ini 파일에 아래 내용을 추가 한다.
[components]
webadmin.* = enabled
tracrpc.* = enabled
trac.web.auth.loginmodule = disabled
acct_mgr.web_ui.AccountModule = enabled
acct_mgr.web_ui.RegistrationModule = enabled
acct_mgr.admin.AccountManagerAdminPage = enabled
acct_mgr.htfile.HtPasswdStore = enabled
[account-manager]
; configure the plugin to store passwords in the htpasswd format:
password_format = htpasswd
; with Trac 0.10 use this instead:
password_store = HtPasswdStore
; the file where user accounts are stored
; the webserver will need write permissions to this file
; and its parent folder
password_file = /var/lib/trac/kreonetws/.htpasswd
AccountManagerPlugin 메뉴얼
우분투 Trac webadmin 설치 및 Trac login 설정법
# apt-get install python-setuptools
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
python-setuptools
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 211kB of archives.
After unpacking 786kB of additional disk space will be used.
Get:1 http://kr.archive.ubuntu.com gutsy/main python-setuptools 0.6c6-1 [211kB]
Fetched 211kB in 4s (51.3kB/s)
Selecting previously deselected package python-setuptools.
(Reading database ... 20915 files and directories currently installed.)
Unpacking python-setuptools (from .../python-setuptools_0.6c6-1_all.deb) ...
Setting up python-setuptools (0.6c6-1) ...
# easy_install http://svn.edgewall.com/repos/trac/sandbox/webadmin
Downloading http://svn.edgewall.com/repos/trac/sandbox/webadmin
Doing subversion checkout from http://svn.edgewall.com/repos/trac/sandbox/webadmin to /tmp/easy_install-h02BWw/webadmin
Processing webadmin
Running setup.py -q bdist_egg --dist-dir /tmp/easy_install-h02BWw/webadmin/egg-dist-tmp-W4IWxz
zip_safe flag not set; analyzing archive contents...
webadmin.plugin: module references __file__
TracWebAdmin 0.1.2dev-r5911 is already the active version in easy-install.pth
Installed /usr/lib/python2.5/site-packages/TracWebAdmin-0.1.2dev_r5911-py2.5.egg
Processing dependencies for TracWebAdmin==0.1.2dev-r5911
Finished processing dependencies for TracWebAdmin==0.1.2dev-r5911
#
Trac 로그인 설정
# htpasswd -c /var/lib/trac/TracProjectName/.htpasswd adminApache host conf 파일에 아래 내용 추가 (Multiple projects)
New password:
Re-type new password:
Adding password for user admin
#
<LocationMatch "/TracProjectName/[^/]+/login">Single project 시에는 아래것으로
AuthType Basic
AuthName "Trac"
AuthUserFile /var/lib/trac/TracProjectName/.htpasswd
Require valid-user
</LocationMatch>
<Location "/TracProjectName/login">
AuthType Basic
AuthName "Trac"
AuthUserFile /var/lib/trac/TracProjectName/.htpasswd
Require valid-user
</Location>
우분투 Trac Project 추가 방법
SVN 저장소 설정
#mkdir /var/lib/svn
#mkdir /var/lib/svn/YourProjectNameHere
#mkdir /tmp/YourProjectNameHere
#mkdir /tmp/YourProjectNameHere/branches
#mkdir /tmp/YourProjectNameHere/tags
#mkdir /tmp/YourProjectNameHere/trunk
#svnadmin create /var/lib/svn/YourProjectNameHere
#svn import /tmp/YourProjectNameHere file:///var/lib/svn/YourProjectNameHere -m "initial import"
#rm -rf /tmp/YourProjectNameHere
#chown -R www-data /var/lib/svn/YourProjectNameHere
아파치 환경 설정에 다음 내용 추가
Multiple Projects 관리시 Url의 중복사용을 방지 하기 위해 아래의 소스중에
PythonOption TracEnvParentDir /var/lib/trac 부분을 주석처리 후 대신에
PythonOption TracEnv /var/lib/trac/YourProjectNameHere 추가 해준다.
이렇게 되면 프로젝트 명 뒤에 또 다시 프로그램 명을 입력하지 않아도 되게 된다.
ex>
TracEnvParentDir 사용시 http://localhost/project/project 를 입력해야지만 trac 에 접근
TracEnv 사용시 http://localhost/project 만 입력하면 trac 에 접근
<Location /YourProjectNameHere> #set up Trac handling
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
#PythonOption TracEnvParentDir /var/lib/trac // 주석처리 후 아래 라인을 추가
PythonOption TracEnv /var/lib/trac/YourProjectNameHere
PythonOption TracUriRoot /YourProjectNameHere
#authentication scheme
# AuthType Basic
# AuthName "Descriptive Title Here"
# AuthUserFile /var/lib/trac/YourProjectNameHere/.htpasswd
# Require valid-user
</Location>
<Location /svn/YourProjectNameHere>
DAV svn
SVNPath /var/lib/svn/YourProjectNameHere
AuthType Basic
AuthName "myproject subversion repository"
AuthUserFile /etc/subversion/passwd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
<Location "/YourProjectNameHere/login">
AuthType Basic
AuthName "Trac"
AuthUserFile /var/lib/trac/YourProjectNameHere/.htpasswd
Require valid-user
</Location>
#apache2 -k restart
#mkdir /var/lib/trac/YourProjectNameHere
프로젝트 추가
#trac-admin /var/lib/trac/YourProjectNameHere initenv
프로젝트 웹접근 권한설정
# chown -R www-data /var/lib/trac/YourProjectNameHere
프로젝트 관리자 admin 아이디 생성
#htpasswd -c /var/lib/trac/YourProjectNameHere/.htpasswd admin
New password:
Re-type new password:
Adding password for user admin
#
프로젝트 관리자 admin 아이디 권한 부여
#trac-admin /var/lib/trac/YourProjectNameHere permission add admin TRAC_ADMIN
webadmin 플러그인 사용기능 추가
trac.ini 파일 하단에 아래 components 두줄을 추가 한다.
# vi /var/lib/trac/YourProjectNameHere/conf/trac.ini
[components]
webadmin.* = enabled
아파치 재시작
#apache2 -k restart
TRAC 프로젝트 생성 및 [슈퍼]유저 등록
#/usr/local/trac/trac-admin [설치할경로/trac]
Trac[...]>initenv
Project Name [My Project]>Blog <-프로젝트 이름
Database connection string[sqlite:db/trac.db]>[엔터] <- SQlite db 사용 확인
Path to repository[...]>[경로/svn-repos] <- Subversion 저장소 위치
svnadmin create --fs-type=fsfs [경로/svn-repos] 로 생성한다.
Templates directory[.../trac/tremplates]>[엔터] <- 기본템플릿으로 사용함
.
.
.
Congratulations!
메시지가 나오면 설치 성공
=================================================================================
#/usr/local/trac/bin/trac-admin [프로젝트생성경로/trac]
Trac [프로젝트생성경로/trac]> permission add [user id] TRAC_ADMIN //슈퍼유저 추가
# /usr/local/apache2/bin/htpasswd -c .htpasswd [super id] //htpasswd 파일 생성 및 사용자 추가
# /usr/local/apache2/bin/htpasswd .htpasswd [user id] //일반사용자 추가
Subversion 사용법
1 소프트웨어 버전 관리의 이해 #
Subversion은 소프트웨어 버전 관리 시스템입니다. 이전에 CVS같은 역사가 깊은 소프트웨어 버전 관리 시스템을 사용해 본 경험이 있다면 쉽게 진행 할 수 있을 것입니다. 이 장에서는 소프트웨어 버전 관리 시스템을 처음 접하는 분들을 위해 자주 나오는 용어들과 개념을 정리 하였습니다.1.1 버전 관리 시스템의 필요성 #
과연 소프트웨어를 만드는데 버전관리가 왜 필요할까요? 버전 관리가 필요하게 된 이유는 공동 작업 때문입니다. 한사람이 큰 프로젝트를 진행 하는 것이 아니기 때문에 버전 관리 시스템이 필요 하게 되었습니다.- 개발 버전과 릴리즈 버전을 섞이지 않고 쉽게 관리 할 수 있습니다.
- 소스를 잘 못 수정 했더라도 기록이 남고 되돌리기가 쉽습니다.(많은 파일의 경우 유용)
- 수정, 추가, 삭제 등의 기록이 모두 남고 변경 사항을 추적하기 쉽습니다.
- 개발자들이 따로 따로 백업을 하지 않아도 됩니다.
1.2 버전 관리 시스템의 종류 #
현재 나와 있는 소프트웨어 버전 관리 시스템은 여러 종류가 있습니다. 각각 장단점이 있습니다.- CVS (Concurrent Version System) : 가장 널리 사용되며 역사가 깊은 버전 관리 시스템입니다. http://www.cvshome.org
![[]](http://www.pyrasis.com/imgs/moni/external.png)
- Subversion : CVS의 단점을 개선하고 CVS를 대체할 목적으로 개발 되었습니다. 이 문서에서 설명할 버전 관리 시스템입니다. http://subversion.tigris.org
![[]](http://www.pyrasis.com/imgs/moni/external.png)
- Visual Sourcesafe : Microsoft에서 만든 버전 관리 시스템입니다. CVS와는 버전 관리 관점에서 조금의 차이점이 있습니다. 윈도우 기반 소프트웨어의 버전 관리를 할 때 자주 사용됩니다. http://msdn.microsoft.com/ssafe/
![[]](http://www.pyrasis.com/imgs/moni/external.png)
- Clear Case : Rational이라는 회사에서 만든 버전 관리 시스템입니다. 지금은 IBM에 합병되었습니다. 상용 소프트웨어입니다. http://www-306.ibm.com/software/rational
![[]](http://www.pyrasis.com/imgs/moni/external.png)
- BitKeeper : 리눅스 커널이 BitKeeper를 이용해서 개발 하고 있습니다. 상용 소프트웨어입니다. http://www.bitkeeper.com
![[]](http://www.pyrasis.com/imgs/moni/external.png)
1.3 버전 관리 시스템의 용어들 #
소프트웨어 버전 관리 시스템에서 사용되는 용어들을 알아보도록 하겠습니다.1.4 저장소의 디렉토리 배치 #
저장소에 바로 소스를 넣어 프로젝트를 진행 할 수 있습니다. 그렇지만 버전 관리 시스템에서 권장하는 디렉토리 배치 방법이 있습니다.-- http://svn.samplerepository.org/svn/sample +--+---+- branches | +--+- dav-mirror | | |--- src | | |--- doc | | +--- Makefile | | | +--- svn-push | +--- svnserve-thread-pools | +---+- tags | +--- 0.10 | +--+- 0.10.1 | | |--- src | | |--- doc | | +--- Makefile | | | +--- 0.20 | +--- 0.30 | +--- 0.50 | +--- 1.01 | +---+- trunk |--- src |--- doc +--- Makefile
2 Subversion #
Subversion은 CVS를 대체하기 위해 개발되고 있습니다. Subversion은 소스 코드는 물론 바이너리 파일 등의 여러가지 형식의 파일을 관리 할 수 있습니다.2.1 CVS와 비교한 Subversion의 장점들 #
- 커밋 단위가 파일이 아니라 체인지셋이라는 점입니다. CVS에서라면 여러 개의 파일을 한꺼번에 커밋하더라도 각각의 파일마다. 리비전이 따로 붙습니다. 반면 Subversion에서는 파일별 리비전이 없고 한번 커밋할 때마다 변경 사항별로 리비전이 하나씩 증가합니다.
- CVS에 비해 엄청나게 빠른 업데이트/브랜칭/태깅 시간.
- CVS와 거의 동일한 사용법. CVS 사용자라면 누구나 어려움 없이 금방 배울 수 있습니다.
- 파일 이름변경, 이동, 디렉토리 버전 관리도 지원.
- 원자적(atomic) 커밋. CVS에서는 여러 파일을 커밋하다가 어느 한 파일에서 커밋이 실패했을 경우 앞의 파일만 커밋이 적용되고 뒤의 파일들은 그대로 남아있게 됩니다. Subversion은 여러개의 파일을 커밋하더라도 커밋이 실패하면 모두 이전 상태로 되돌아 갑니다.
- 양방향 데이터 전송으로 네트워크 소통량(트래픽) 최소화.
- 트리별, 파일별 접근 제어 리스트. 저장소 쓰기 접근을 가진 개발자라도 아무 소스나 수정하지 못하게 조절할 수 있습니다.
- 저장소/프로젝트별 환경 설정 가능
- 확장성을 염두에 둔 구조, 깔끔한 소스
2.2 설치 준비 작업 #
이 장에서는 리눅스, 유닉스 등의 POSIX 호환 운영체제에서 소스를 컴파일하고 설치하는 방법을 다루고 있습니다.2.3 사용 할 각각의 파일들 구하기 #
- Subversion 소스파일 http://subversion.tigris.org
subversion-1.2.X.tar.gz
Subversion은 최신 버전을 받습니다.
- Apache2 http://httpd.apache.org
httpd-2.0.XX.tar.gz
Apache 2 도 최신 버전을 받습니다. 1.3버전은 연동이 불가능 합니다.
- Berkeley DB http://www.sleepycat.com/download/index.shtml
db-4.3.28.NC.tar.gz
Berkeley DB는 버전을 꼭 4.3.28을 사용하여야 합니다.
- OpenSSL http://www.openssl.org/source
openssl-0.9.7c.tar.gz
OpenSSL은 LASTEST라고 된 것을 받습니다.
3.1 OpenSSL 컴파일과 설치 #
# tar vxzf openssl-0.9.7c.tar.gz# cd openssl-0.97copenssl-0.97c# ./configopenssl-0.97c# makeopenssl-0.97c# make install
3.2 Berkeley DB 컴파일과 설치 #
# tar vxzf db-4.3.28.NC.tar.gz# cd db-4.3.28.NCdb-4.3.28.NC# cd build_unixdb-4.3.28.NC/build_unix# ../dist/configuredb-4.3.28.NC/build_unix# makedb-4.3.28.NC/build_unix# make installdb-4.3.28.NC/build_unix# echo "/usr/local/BerkeleyDB.4.3/lib" >> /etc/ld.so.confdb-4.3.28.NC/build_unix# ldconfig
3.3 Apache 컴파일과 설치 #
Apache는 설치해도 되고 안 해도 됩니다. 웹으로 저장소를 공개한다거나. http:// 프로토콜을 이용해서 subversion을 이용하고 싶다면 설치하도록 합니다.# tar vxzf httpd-2.0.54.tar.gzhttpd-2.0.54# ./configure --prefix=/usr/local/apache2 --enable-suexec \ --enable-so --with-suexec-caller=bin \ --enable-ssl --with-ssl=/usr/local/ssl --enable-cache \ --enable-ext-filter --with-z=/usr/include --enable-dav \ --with-dbm=db4 --with-berkeley-db=/usr/local/BerkeleyDB.4.2httpd-2.0.54# makehttpd-2.0.54# make install
3.4 Subversion 컴파일과 설치 #
데비안의 경우 zlib1g-dev, libxml2-dev, libexpat1-dev의 패키지가 필요합니다. 다른 배포판의 경우도 거의 같은 이름으로된 패키지가 있을 것입니다. 이 패키지들은 라이브러리와 헤더 파일을 포함하고 있는 것들입니다.# tar vxzf subversion-1.2.1.tar.gz# cd subversion-1.2.1subversion-1.2.1# ./configure --with-zlib --with-ssl=/usr/local/ssl \ --with-apr=/usr/local/apache2 \ --with-apr-util=/usr/local/apache2 \ --with-apxs=/usr/local/apache2/bin/apxs \ --with-dbm=db4 --with-berkeley-db=/usr/local/BerkeleyDB.4.3subversion-1.2.1# makesubversion-1.2.1# make install
# tar vxzf subversion-1.2.1.tar.gz# cd subversion-1.2.1subversion-1.2.1# ./configure --with-zlib --with-ssl=/usr/local/ssl \ --with-dbm=db4 --with-berkeley-db=/usr/local/BerkeleyDB.4.3subversion-1.2.1# makesubversion-1.2.1# make install
4 세부 설정 #
4.1 저장소 만들기 #
소스를 저장할 공간을 만들어야 합니다. 저장소(Repository)는 프로젝트 마다 하나씩 있어야 합니다. 저장소 안에 프로젝트의 소스가 다 들어가게 되며 다른 프로젝트를 진행한다면 그 프로젝트를 위한 저장소를 하나 더 만들어 주어야 합니다. /home/svn안에 저장소를 만들도록 하겠습니다. 앞으로 저장소를 추가 할 때에는 /home/svn 아래에 추가하면 됩니다. 꼭 /home/svn에 하지 않아도 되며 다른 곳에 해도 됩니다.# mkdir /home/svn# cd /home/svn//home/svn# svnadmin create --fs-type bdb sample
# mkdir /home/svn# cd /home/svn//home/svn# svnadmin create --fs-type fsfs sample
4.1.1 공동 작업을 위한 저장소 그룹 설정 #
svn+ssh://로 작업을 하려면 시스템 계정을 만들어야 합니다. 대부분 계정을 만들고 그룹을 하나로 묶는데. 이럴 경우 그룹에 소속된 사용자들에게도 저장소 쓰기 권한을 주어야 합니다. 그래서 저장소의 그룹 권한을 조정해주어야 합니다. 그룹 쓰기 권한을 주지 않으면 저장소를 만든 계정만 저장소에 접근이 가능하고. 그룹에 속해 있더라도 다른 사용자는 저장소에 접근 할 수 없게 됩니다.# chmod -R g+w sample
# cd /home/svn/home/svn# chown -R nobody.nogroup sample
LoadModule dav_module modules/mod_dav.soLoadModule dav_svn_module modules/mod_dav_svn.so
<Location /svn/sample> DAV svn SVNPath /home/svn/sample</Location>이렇게 설정을 하고 웹 브라우저에서 http://(Subversion과 Apache를 설치한 IP주소 또는 도메인)/svn/sample 로 접속을 합니다.
Revision 0: /--------------------------------------------------------------------------------Powered by Subversion version 1.0.0.위와 같이 설정하면 누구든지(Anonymous) 웹 브라우저로 저장소를 볼 수 있고 Subversion 클라이언트를 이용해서 소스를 체크아웃, 익스포트, 커밋을 할 수 있습니다.
4.2.1 Apache에서 ID로 사용자 인증 #
이제 ID를 통해 인증된 사용자만 소스를 체크아웃하고 커밋 할 수 있도록 설정 하겠습니다.아파치에 사용할 패스워드 파일을 만듭니다. "# htpasswd -c 패스워드파일명 사용자ID"
# cd /usr/local/apache/conf/usr/local/apache/conf# ../bin/htpasswd -c passwd sampleuserNew password:Re-type new password:"# htpasswd -c"는 패스워드 파일을 처음 만들 때의 옵션이고 사용자를 추가하고 싶을 때에는 "# htpasswd 패스워드파일명 사용자ID" 로 해주면 됩니다.
<Location /svn/sample> DAV svn SVNPath /home/svn/sample AuthType Basic AuthName "pyrasis's Repository" AuthUserFile /usr/local/apache2/conf/passwd Require valid-user</Location>4줄이 추가 되었습니다. AuthType Basic은 Apache 기본 패스워드 인증입니다. AuthName은 패스워드가 걸린 웹페이지에 뜨는 로그인창에 나올 문장입니다. AuthUserFile은 방금 전 만들었던 아파치 패스워드 파일입니다. 절대경로로 적어주어야 합니다. Require valid-user는 인증된 사용자만 볼 수 있게 한다는 것입니다.
<Location /svn/sample> DAV svn SVNPath /home/svn/sample AuthType Basic AuthName "pyrasis's Repository" AuthUserFile /usr/local/apache2/conf/passwd <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept></Location>이렇게 하면 저장소를 보거나 체크아웃을 할 때는 ID와 패스워드를 묻지 않고 커밋이나 디렉토리. 파일복사 등의 저장소를 변경하는 작업을 할 때에는 ID와 패스워드를 물어보게 됩니다.4.3 svnserve를 사용한 서버 #
Subversion의 고유 프로토콜인 svn://을 이용할 수 있는 svnserve를 사용해서 서버 설정을 해보겠습니다. 이것을 사용하면 Apache를 사용한 것보다 체크아웃, 커밋 속도가 더 빠릅니다.# svnserve -d -r /home/svn/
4.3.1 svnserve에서 ID로 사용자 인증 #
Subversion 0.33.0버전 이후부터 svnserve로 ID로 사용자 인증이 가능하게 되었습니다. 그 이전 버전에서 svnadmin으로 저장소를 만들면 저장소 디렉토리 아래에 conf 디렉토리가 생기지 않지만 0.33.0 버전이후에 svnadmin으로 저장소를 만들었다면 저장소 디렉토리 아래에 conf 디렉토리가 자동으로 생성됩니다. 이전 버전에서 먼저 저장소를 만들어 두었다면 저장소 디렉토리 /home/svn/sample 아래 conf 디렉토리를 만들어 줍니다. (/home/svn/sample/conf)### This file controls the configuration of the svnserve daemon, if you### use it to allow access to this repository. (If you only allow### access through http: and/or file: URLs, then this file is### irrelevant.)### Visit http://subversion.tigris.org/ for more information.[general]### These options control access to the repository for unauthenticated### and authenticated users. Valid values are "write", "read",### and "none". The sample settings below are the defaults.anon-access = noneauth-access = write### The password-db option controls the location of the password### database file. Unless you specify a path starting with a /,### the file's location is relative to the conf directory.### The format of the password database is similar to this file.### It contains one section labelled [users]. The name and### password for each user follow, one account per line. The### format is### USERNAME = PASSWORD### Please note that both the user name and password are case### sensitive. There is no default for the password file.password-db = passwd### This option specifies the authentication realm of the repository.### If two repositories have the same authentication realm, they should### have the same password database, and vice versa. The default realm### is repository's uuid.realm = pyrasis's Repository
[users]sampleuser = 02030104
4.4 SSH + svnserve 서버 #
SSH2 데몬으로 svnserve을 터널링 하여 작동시킵니다. 이렇게 되면 svn+ssh:// 프로토콜을 사용하게 되며 사용자 인증은 시스템 계정으로 인증을 합니다. 구동시키는 방법은 따로 있지 않으며 SSH데몬만 떠 있으면 됩니다.[tunnels]ssh = ssh -l sampleuser
# svn checkout svn+ssh://(Subversion 서버의 IP주소 또는 도메인)/home/svn/sample sample
5 실제로 사용하기 #
간단한 예제 프로그램을 통해서 Subversion의 사용법을 알아보도록 하겠습니다. 커맨드 라인 클라이언트을 통해 알아보겠습니다. X 윈도우, MS 윈도우용 GUI 클라이언트 프로그램에 대해서는 뒤에 설명하도록 하겠습니다.SVN_EDITOR=/usr/bin/vimexport SVN_EDITOR
apache를 연동한 경우
# svn mkdir http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/trunksvnserve만 실행한 경우
# svn mkdir svn://(Subversion서버 IP또는 도메인)/sample/trunk위처럼 입력을 하면 vim이 실행되면서 아래와 같이 나올 것입니다. :q!로 빠져 나갑니다.
--This line, and those below, will be ignored--A http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/trunk
Log message unchanged or not specifieda)bort, c)ontinue, e)dit
Committed revision 1.
# svn list http://(Subversion 서버의 IP주소 또는 도메인)/svn/samplebranches/tags/trunk/
5.3 Import #
맨 처음 프로젝트를 시작할 때 저장소에 소스들을 넣어야 합니다. 이럴 때 하는 것이 import 작업입니다. sampledir 이라는 디렉토리를 만든 뒤에 그 아래 다음과 같은 간단한 소스를 작성해 보십시오.# mkdir sampledir# cd sampledirsampledir# vim sample.c
#include <stdio.h>int main(){ printf("Sample Program Version 0.1\n"); return 0;}sampledir# cd ..# svn import sampledir http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/trunkimport도 위에서 디렉토리를 만들었을 때 처럼 vim이 실행되게 됩니다. import되는 파일들이 표시됩니다. :q!로 닫고 c를 입력하면 import 되게 됩니다.
# svn list http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/trunksample.c
5.4 Checkout #
이제 부터 Subversion을 이용해서 프로그램 소스를 관리 할 수 있습니다. checkout을 해서 어디서든 소스를 받아 볼 수 있습니다. 방금 import를 하기위해 만들었던 sampledir은 지워도 됩니다.# svn checkout http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/trunk sampleA sample/sample.cChecked out revision 4.
5.5 Update #
체크아웃 해서 받은 소스를 저장소의 최근 내용으로 업데이트 하는 명령입니다. 체크아웃 해서 받은 소스의 revision보다 저장소의 revision이 높으면 업데이트 하게 됩니다. 업데이트를 하게 되면 전부 다 받아오는 것이 아니라 변경 된 것들만 받아옵니다. 소스를 수정하기 전에 언제나 update 명령으로 소스를 가장 최신 revision으로 맞추고 작업을 해야 합니다.sample# svn update
#include <stdio.h>int main(){ printf("Sample Program Version 0.2\n"); printf("Hello Subversion\n"); return 0;}sample# svn commitSending sample.cTransmitting file data .Committed revision 5.
sample# svn log------------------------------------------------------------------------r4 | (no author) | 2003-11-23 14:40:05 +0900 (Sun, 23 Nov 2003) | 1 line------------------------------------------------------------------------r1 | (no author) | 2003-11-23 14:39:00 +0900 (Sun, 23 Nov 2003) | 1 line-----------------------------------------------------------------------
sample# svn log --revision 5:19 # revision 5부터 9까지의 로그를 출력합니다.sample# svn log -r 19:5 # revision 19부터 5까지 역으로 출력합니다.sample# svn log -r 8 # revision 8의 로그를 출력합니다.하나의 파일이나 디렉토리 로그를 볼 수도 있습니다.
sample# svn log sample.csample# svn log http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/trunk/sample.c-v 옵션은 더 자세한 정보를 얻을 수 있습니다. 아래 M은 Modify(수정)의 표시 입니다. 소스 파일을 수정하고 커밋 했기 때문입니다.
sample# svn log -r 5 -v------------------------------------------------------------------------r5 | (no author) | 2003-11-23 14:42:34 +0900 (Sun, 23 Nov 2003) | 1 lineChanged paths: M /trunk/sample.c------------------------------------------------------------------------
sample# svn log -v------------------------------------------------------------------------r4 | (no author) | 2003-11-23 14:40:05 +0900 (Sun, 23 Nov 2003) | 1 lineChanged paths: A /trunk/sample.c------------------------------------------------------------------------r1 | (no author) | 2003-11-23 14:39:00 +0900 (Sun, 23 Nov 2003) | 1 lineChanged paths: A /trunk------------------------------------------------------------------------
5.8 Diff #
diff 명령을 사용하면 예전 소스 파일과 지금의 소스 파일을 비교해 볼 수 있습니다. 위에서 나온 로그와 같이 우리는 revision 4(r4)에서 sample.c를 import 했습니다. 그리고 revision 5에서 소스를 수정하고 커밋 했습니다.sample# svn diff --revision 4 sample.cIndex: sample.c===================================================================--- sample.c (revision 4)+++ sample.c (working copy)@@ -2,7 +2,8 @@ int main() {- printf("Sample Program Version 0.1\n");+ printf("Sample Program Version 0.2\n");+ printf("Hello Subversion\n"); return 0; }revision 4와 5를 비교 하고 싶으면 --revision 4:5 (-r 4:5)로 하면 됩니다. --revision 8:10 도 가능합니다.sample# svn diff --revision 4:5 sample.cIndex: sample.c===================================================================--- sample.c (revision 4)+++ sample.c (revision 5)@@ -2,7 +2,8 @@ int main() {- printf("Sample Program Version 0.1\n");+ printf("Sample Program Version 0.2\n");+ printf("Hello Subversion\n"); return 0; }5.9 Blame #
Blame은 한 소스파일을 대상으로 각 리비전 대해서 어떤 행을 누가 수정했는지 알아보기 위한 명령입니다.리비전, 커밋한 사용자의 ID, 소스 순서입니다.
sample# svn blame sample.c 4 sampleuser #include <stdio.h> 4 sampleuser 4 sampleuser int main() 4 sampleuser { 5 sampleuser printf("Sample Program Version 0.2\n"); 5 sampleuser printf("Hello Subversion\n"); 4 sampleuser 4 sampleuser return 0; 4 sampleuser } 4 sampleuser여기서는 커밋한 사용자가 한명 밖에 없으므로 전부 똑같이 나옵니다. 4 sampleuser #include <stdio.h> 4 sampleuser 4 sampleuser int main() 4 sampleuser { 7 epifanes printf("Sample Program Version 0.3\n"); 6 pyrasis printf("Hello Subversion\n"); 4 sampleuser 4 sampleuser return 0; 4 sampleuser } 4 sampleusersample# svn blame -r 4 sample.c
5.10 lock #
svn lock 명령으로 파일을 잠글 수 있습니다.sample# svn lock hello.csvn lock 명령으로 파일을 잠그었을 경우 왜 잠그었는지 로그를 기록할 수 있습니다.
파일을 잠그었을 경우 파일을 잠근 사용자만 수정을 해서 커밋을 할 수 있고 다른 사용자는 수정을 할 수 없습니다. 파일의 잠금을 해제할 경우에는 svn unlock 명령을 사용하면 됩니다.
파일 잠금기능은 여러명이 개발을 하고 있을 경우 한 파일에서 작업이 너무 많아 모두 끝내지 못하고 중간 중간에 커밋만 해놓았을 경우 다른 사람이 그 파일을 수정해버리면 하던 작업이 엉망이 되어 버립니다. 그래서 파일을 잠그어 작업이 끝날때 까지 한 사람만 커밋을 할 수 있도록 하는 것입니다. 작업이 끝나면 파일 잠금을 해제 하면 됩니다.
5.11 Add #
svn add 명령으로 새 파일을 추가할 수 있습니다.sample# svn add hello.cA hello.csvn add로 파일을 추가한 뒤에는 svn commit으로 커밋을 해주어야 완전히 파일이 저장소에 추가됩니다.
sample# svn commit물론 커밋 로그도 입력해야 됩니다.
5.12 Export #
체크아웃은 Subversion이 버전관리를 할 수 있도록 각종 파일이 소스 폴더 안에 함께 생깁니다. 이것과는 달리 Export는 순수하게 프로그램의 소스만 가져올 수 있습니다. 만들어진 소스를 압축하여 릴리즈 할 때 사용합니다.sample# svn export http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample2/trunk sample--revision (-r)으로 revision을 지정하면 지정한 revision의 소스를 받아옵니다. 지정하지 않으면 가장 최근의 revision의 것을 가져옵니다.
5.13 Branch와 Tag #
CVS에서의 Branch와 Tag는 Branch와 Tag를 위한 명령이 있습니다. CVS에서 Branch와 Tag를 하게 되면 저장소의 파일에는 Branch 또는 Tag 되었다는 표시가 함께 붙게 됩니다. 체크아웃 할 때에도 Branch와 Tag의 소스를 받아오려면 Branch, Tag를 지정하는 옵션을 주어야 했습니다.5.13.1 Branch #
Branch를 해야 할 경우는 앞서 설명 했듯이 프로젝트중 작은 분류로 나누어 개발 하거나 소스를 따로 분리하여 실험적인 코드 를 작성할 경우 등 입니다.svn checkout http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample samplesample# svn copy trunk branches/sample-branchsample# svn commit원격에서 URL로 copy를 하면 commit도 같이 이루어집니다. 체크아웃 받은 소스에서는 update를 해주어야 합니다.
# svn copy http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/trunk \http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/branches/sample-branchBranch된 소스를 받기 위해서는 branches/sample-branch를 체크아웃 하면 됩니다. trunk와 branche는 따로 revision을 가지지 않습니다. Subversion의 revision은 저장소 전체의 revision입니다.
# svn checkout \ http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/branches/sample-branch \ sample-branch
5.13.1.1 Merge #
위와 같이 우리는 trunk를 sample-branch로 Branch 했습니다. sample-branch를 수정하다가 trunk에도 반영하고 싶다면. merge 명령을 사용하면 됩니다. 하나하나 소스 코드를 옮겨서 입력하지 않아도 됩니다. 다만 merge 한 뒤에는 꼭 사람이 확인을 해 봐야겠죠.# svn checkout \ http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/branches/sample-branch \ sample-branch
#include <stdio.h>int main(){ printf("Sample Program Version 0.2\n"); printf("Hello Subversion\n"); printf("Hello World\n"); return 0;}이제 sample의 trunk를 체크아웃 합니다.# svn checkout http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/trunk sampletrunk의 sample.c는 아래와 같습니다.
#include <stdio.h>int main(){ printf("Sample Program Version 0.2\n"); printf("Hello Subversion\n"); return 0;}이제 sample-branch의 수정된 것을 trunk에 merge 해 보겠습니다. "svn merge -r N:N 저장소주소 체크아웃된디렉토리" 형식 입니다. 아래는 저장소 주소 하나만 입력되어 있습니다. 이렇게 되면 지금 체크아웃한 소스와 merge를 하게 됩니다. merge할 revision 번호를 주의해 주십시오. 6:7은 r 6과 r 7의 차이점을 뜻합니다. sample-branch의 r 6과 r 7의 차이점을 지금의 체크아웃된 trunk에 적용하라는 것 입니다.sample# svn merge -r 6:7 \ http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/branches/sample-branchU sample.csample# svn commitsample# svn update이제 sample.c를 열어보면 아래와 같이 sample-branch에서 수정한 것이 merge가 되어 있습니다.
#include <stdio.h>int main(){ printf("Sample Program Version 0.2\n"); printf("Hello Subversion\n"); printf("Hello World\n"); return 0;}# svn merge -r 6:7 sample.c
# svn merge http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample2/trunk \ http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample2/branches/sample-branch
5.13.2 Tag #
Tag는 만든 프로그램을 웹 사이트 등에 공개할 때 사용합니다. Tag도 Subversion에서는 Branch와 마찬가지로 디렉토리 복사(copy)와 같습니다. tags 디렉토리 안에는 일반적으로 릴리즈(발표)하는 버전별 디렉토리를 만들어 사용합니다.# svn checkout http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample samplesample# svn copy trunk tags/0.1sample# svn commit
# svn copy http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/trunk \ http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/tags/0.1
# svn export http://(Subversion 서버의 IP주소 또는 도메인)/svn/sample/tags/0.1 sample-0.1
5.14 Revert #
소스를 수정하면서 merge를 하다 보면 분명히 잘못 했을 경우가 생깁니다. 이럴 때 하는 것이 revert입니다. revert는 단어 뜻 그대로 되돌리는 명령입니다. 커밋을 하기 전에만 되돌릴 수 있습니다. 커밋 하기전의 체크아웃 받은 소스를 되돌리는 명령입니다. 원격 저장소의 것은 되돌릴 수 없습니다.sample# svn revert sample.c
5.15 백업 및 복구 #
저장소는 가장 중요한 공간이기 때문에 백업은 필수입니다. 저장소 디렉토리를 그대로 보관할 수도 있지만 백업과 복구 명령을 사용하는것이 편리합니다.Windows, 리눅스, BSD 등 운영체제에 관계없이 백업 및 복구가 가능합니다. Windows에서 백업한것을 리눅스에서 사용할 수도 있고 BSD에서 백업한 것을 Windows에서 사용할 수도 있습니다.
저장소의 서버를 옮길때에는 저장소 디렉토리를 옮기는 것이 아니라 저장소 백업을 한뒤 그 백업파일을 이용하여 새 서버에서 복구를 하는 방식으로 옮겨야합니다.
5.15.1 Dump #
sample 저장소를 백업합니다. 표준 입출력을 통해서 저장소의 내용을 파일로 생성합니다. svnadmin dump 명령을 사용하며 이 명령은 저장소 디렉토리 바깥에서 사용해야 합니다.repos# lssamplerepos# svnadmin dump sample > sample.dump
5.15.2 Load #
저장소 백업 파일을 이용해서 저장소를 복구합니다. svnadmin load 명령을 사용합니다.빈 저장소를 생성한 뒤 백업 파일을 이용해서 복구를 합니다.
repos# svnadmin create samplerepos# lssample sample.dumprepos# svnadmin load sample < sample.dump
6 Microsoft Windows에서 사용하기 #
Microsoft Windows에서도 Subversion을 사용할 수 있습니다. 소스를 컴파일하지 않고 설치 파일을 통해 간단하게 설치해서 사용할 수 있습니다. Windows에서도 리눅스, 유닉스와 똑같은 기능을 사용할 수 있습니다.6.3 사용하기 #
지금 설치한것들은 Subversion 커맨드 라인 클라이언트와 저장소를 네트워크에서도 사용할 수 있도록 하는 서버 프로그램 들입니다. 커맨드라인 사용법은 리눅스, 유닉스와 똑같습니다. 다만 Windows에서는 명령 프롬프트(cmd.exe)에서 사용합니다.C:\Documents and Settings\Administrator>cd c:\repos버클리 DB를 이용한 저장소
C:\repos>svnadmin create --fs-type bdb sample파일시스템을 이용한 저장소
C:\repos>svnadmin create --fs-type fsfs sample
C:\temp>svn checkout file:///C:/repos/sample
C:\>svnserve -d -r C:\repos
7 운영체제별 전용 패키지 #
리눅스 배포판별(Redhat, Debian, SuSE) 전용 바이너리 패키지, FreeBSD 포트 컬렉션, NetBSD pkgsrc, Mac OS X 패키지 등 편리하게 설치할 수 있도록 운영체제별 전용 패키지가 제공되고 있습니다. 이것들을 사용하면 소스를 컴파일 하지 않고 바로 설치해서 사용할 수 있는 장점이 있습니다.8 GUI 클라이언트 프로그램 #
Subversion에서 기본적으로 지원하는 커맨드 라인 명령 svn은 사용하기에 불편한 점이 많습니다. 앞으로 소개할 것들은 MS Windows, X Window 등에서 사용 가능한 Subversion 클라이언트 프로그램 입니다.8.1 TortoiseSVN #
MS Windows용 GUI 클라이언트 프로그램입니다. CVS GUI 클라이언트 프로그램으로 유명한 TortoiseCVS와 거의 같은 인터페이스를 가지고 있습니다.http://tortoisesvn.tigris.org
![[]](http://www.pyrasis.com/imgs/moni/external.png)
8.2 Ankhsvn #
Visual Studio .NET 애드인 형식의 Subversion 클라이언트 프로그램입니다. VS.NET과 통합성이 매우 높습니다. VS.NET의 솔루션 뷰에서 커밋, 업데이트 등의 작업이 가능하며 솔류션 뷰의 각 파일에 수정되었거나 수정되지 않은 파일의 상태를 표시해줍니다.http://ankhsvn.tigris.org
![[]](http://www.pyrasis.com/imgs/moni/external.png)
8.3 RapidSVN #
크로스 플랫폼 Subversion 클라이언트 프로그램입니다. Windows, 리눅스, BSD의 X Window에서 사용할 수 있습니다.http://rapidsvn.tigris.org
9.1 ViewCVS #
CVS 웹 인터페이스로 유명합니다. 아파치와 mod_python 기반으로 동작하며 Subversion 파이썬 바인딩으로 만들어져 있습니다. 최신버전은 Subversion도 지원하고 있습니다. 유닉스, 리눅스, Windows 모두 사용할 수 있습니다.http://sourceforge.net/projects/viewcvs
9.2 WebSVN #
Subversion 전용 웹 인터페이스입니다. Subversion svnlook과 연동하여 웹으로 표시합니다. 아파치와 php가 필요합니다.http://websvn.tigris.org
Trac 설치
http://projects.edgewall.com/trac/wiki/TracInstall
설치후 아래 명령 실행
tracd --port 8000 /path/to/myproject
과 같이 실행을 하며 페이지가 뜨는 것을 확인할 수 있다.