顯示具有 svn 標籤的文章。 顯示所有文章
顯示具有 svn 標籤的文章。 顯示所有文章

星期四, 2月 05, 2009

Setup SVN with Trac

本文是在系統環境為 Debian GNU/Linux 5.0 (lenny) ,以 root 身份完成,實際指令有時可能要加上 sudo。

Plan:

/etc/svn -> SVN 相關設定檔
/etc/svn/account -> SVN 用戶的帳號密碼檔
/etc/svn/authz -> SVN 用戶的權限檔
/home/svn -> SVN 檔案庫的根目錄
/home/trac -> Trac 專案的根目錄
svn -> /home/svn 的 owner
svn -> /home/svn 的 group
www-data -> /home/trac 的 owner
www-data -> /home/trac 的 group

192.168.1.100 -> SVN 及 Trac 伺服器的 IP
svn+ssh://192.168.1.100/svn -> 存取 SVN 的 URL
http://192.168.1.100/trac -> 存取 Trac 的 URL


先產生 /etc/svn 及相關檔案
sudo mkdir -p /etc/svn
sudo touch /etc/svn/account
sudo touch /etc/svn/authz
sudo chown -R www-data /etc/svn




安裝 SVN 版本管理系統
sudo aptitude install subversion


新增 svn user/group
sudo adduser svn





開始用 SVN,先變身成 svn 使用者
su - svn

建立一個 SVN 檔案庫 project1
svnadmin create project1


設定 SVN 檔案庫 project1 的存取權限
chmod -R g+w project1


修改 /home/svn/project1/conf/svnserve.conf, 關閉匿名存取
[general]
anon-access = none
auth-access = write


匯入第一版至檔案庫 project1
svn import /tmp/src-code/ svn+ssh://svn@192.168.1.100/home/svn/project1


自檔案庫 project1 取出
svn co svn+ssh://svn@192.168.1.100/home/svn/project1 src-code-co



安裝 trac
sudo aptitude install trac


安裝 apache2 的 wsgi 模組
sudo aptitude install libapache2-mod-wsgi


設定 apache2 使用 wsgi 模組,將下面區段加到 /etc/apache2/sites-available/default 的最後一行之前
<VirtualHost>
...
...
...

WSGIScriptAlias /trac /var/www/trac/cgi-bin/trac.wsgi

<Directory /var/www/trac>
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>


trac.wsgi 內容如下

import sys
sys.stdout = sys.stderr

import os
os.environ['TRAC_ENV_PARENT_DIR'] = '/home/trac'
os.environ['PYTHON_EGG_CACHE'] = '/var/www/trac/eggs'

import trac.web.main

application = trac.web.main.dispatch_request


安裝 trac plugin
# SvnAuthzAdmin
sudo easy_install http://trac-hacks.org/svn/svnauthzadminplugin/0.11/


# The AccountManager
sudo easy_install http://trac-hacks.org/svn/accountmanagerplugin/trunk/


# IniAdmin
sudo easy_install http://trac-hacks.org/svn/iniadminplugin/0.11/


# TracWysiwygPlugin - for better Wiki editing
sudo easy_install http://trac-hacks.org/svn/tracwysiwygplugin/0.11/





開始用 Trac
建立 project1 的 trac 目錄
sudo mkdir -p /home/trac/project1


初始化 project1 的 trac 目錄
sudo trac-admin /home/trac/project1 initenv

回答下面的問題
Project Name [My Project]> project1
Database connection string [sqlite:db/trac.db]> ENTER
Repository type [svn]> ENTER
Path to repository [/path/to/repos]> /home/svn/project1
Templates directory [/usr/share/trac/templates]> ENTER

完成後會產生 project1 的 trac 設定檔 /home/trac/project1/conf/trac.ini

修改 project1 的 trac 設定檔 /home/trac/project1/conf/trac.ini,將下面這個區段加到檔尾。
[components]
# SvnAuthzAdmin
svnauthz.* = enabled
[svnauthzadmin]
show_all_repos = true

#啟用 AccountManager 外掛程式
acct_mgr.api.accountmanager = enabled
acct_mgr.web_ui.RegistrationModule = disabled
acct_mgr.htfile.HtPasswdStore = enabled

#關閉預設的 Http 登入認證方式,改用 AccountManager 的登入認證
trac.web.auth.LoginModule = disabled
acct_mgr.web_ui.LoginModule = enabled

#啟用帳號管理
acct_mgr.admin.AccountManagerAdminPage = enabled

#允許用戶變更密碼、刪除帳號
acct_mgr.web_ui.AccountModule = enabled
[account-manager]
password_format = htpasswd
password_file = /etc/svn/account
password_store = HtPasswdStore

#iniadminplugin
iniadmin.iniadmin.iniadminplugin = enabled

#tracwysiwygplugin
tracwysiwyg.* = enabled


修改 [trac] 區塊中的
authz_file = /etc/svn/authz
autoz_module_name = project1
default_charset = utf-8


存檔離開

Trac 用戶管理
新增 admin 管理員權限
sudo trac-admin /home/trac/project1 permission add admin TRAC_ADMIN


移除匿名者權限
sudo trac-admin /home/trac/project1 permission remove anonymous '*'


新增 project1 群組權限,方便往後新增 member
sudo trac-admin /home/trac/project1 permission add @project1 LOG_VIEW FILE_VIEW WIKI_VIEW WIKI_CREATE WIKI_MODIFY SEARCH_VIEW REPORT_VIEW REPORT_SQL_VIEW
sudo trac-admin /home/trac/project1 permission add @project1 TICKET_VIEW TICKET_CREATE TICKET_MODIFY BROWSER_VIEW TIMELINE_VIEW CHANGESET_VIEW ROADMAP_VIEW MILESTONE_VIEW

變更 /home/trac 的存取權限,讓 apache 可以存取它
sudo chown -R www-data.www-data /home/trac



新增 member
System Part
sudo adduser [new_member]
sudo adduser [new_member] svn


Trac Part
login as admin
Admin->Accounts->Users->Add Account:
->Username:[new_member];Password:[xxxxxx];Confirm password:[xxxxxx]
->Add
Admin->Subversion->Subversion Access->Subversion Paths->/
->Add Path Member to /
->subject:[new_member]; Read:v; Write:v
->Add
Admin->Subversion->Subversion Access->Subversion Paths->/home/svn/[project_name]
->Add Path Member to /home/svn/[project_name]
->subject:[new_member]; Read:v; Write:v
->Add
Admin->general->Permissions
->Add subject to Group:
->Subject:[new_member]; Group:@[project_name]
->Add



備份 project1 的 SVN 檔案庫(/home/svn/project1)
svnadmin dump /home/svn/project1 > /tmp/project1-svn.dump

還原 project1 SVN 檔案庫
svnadmin create --fs-type fsfs /home/svn/project1
svnadmin load /home/svn/project1 < /tmp/project1-svn.dump chown -R svn.svn /home/svn/project1


備份 Trac (/home/trac/project1)
trac-admin /home/trac/project1 hotcopy /tmp/project1-trac-backup

還原 Trac(/home/trac/project1)
cp /tmp/project1-trac-backup /home/trac/project1



參考資料:
SVN + Trac + Apache 完整安裝攻略
http://www.vixual.net/blog/archives/232

setuptools too old

I receive an 'error: Unexpected HTML page found at ...' message when trying to use easy_install to install the plugin

The reason for this is that the current stable release of setuptools does work well with Subversion 1.5.

Solution

You need to install the latest development branch of setuptools.

svn co http://svn.python.org/projects/sandbox/branches/setuptools-0.6/

Then install it as root.

cd setuptools-0.6
python setup.py install

星期五, 11月 28, 2008

New a svn repository and trac

如何新增 svn 檔案庫及其 trac ?

假設有個新專案,它的名字是 projectA
該專案的檔案庫欲放在 /home/svn/projectA
該專案的 trac 欲放在 /home/trac/projectA

建立檔案庫
svnadmin create /home/svn/projectA


設定檔案庫存取權限

chmod -R 775 /home/svn/projectA


vi /home/svn/projectA/conf/svnserve.conf
[general]
anon-access = none
auth-access = write


建立 trac
mkdir -p /home/trac/projectA


初始化 trac 環境
trac-admin /home/trac/projectA initenv

回答下面的問題
Project Name [My Project]> projectA
Database connection string [sqlite:db/trac.db]> ENTER
Repository type [svn]> ENTER
Path to repository [/path/to/repos]> /home/svn/projectA
Templates directory [/usr/share/trac/templates]> ENTER

修改 projectA trac 的存取權限,讓 httpd 可以存取
sudo chown -R www-data.www-data projectA


修改 projectA trac 的設定檔,在檔尾加上
[components]
#啟用 WebAdmin 外掛程式
webadmin.* = enabled
#啟用 IniAdmin 外掛程式
iniadmin.iniadmin.iniadminplugin = enabled
#啟用 TracWysiwyg 外掛程式
tracwysiwyg.* = enabled
#啟用 SvnAuthzAdmin 外掛程式
svnauthz.* = enabled
#啟用 AccountManager 外掛程式
acct_mgr.api.accountmanager = enabled
acct_mgr.htfile.HtPasswdStore = enabled
#關閉預設的 Http 登入認證方式,改用 AccountManager 的登入認證
trac.web.auth.LoginModule = disabled
acct_mgr.web_ui.LoginModule = enabled
#啟用帳號管理
acct_mgr.admin.AccountManagerAdminPage = enabled
#允許用戶變更密碼、刪除帳號
acct_mgr.web_ui.AccountModule = enabled
[account-manager]
password_format = htpasswd
password_file = /etc/svn/account
password_store = HtPasswdStore


修改 [trac] 區塊中的
authz_file = /etc/svn/authz
autoz_module_name = projectA
default_charset = utf-8


存檔離開

設定 trac 的使用者
新增管理員 admin
trac-admin /home/trac/projectA permission add admin TRAC_ADMIN


移除匿名存取使用者(anonymous)
trac-admin /home/trac/projectA permission remove anonymous '*'


新增群組 @projectA,進去 trac 管理介面時,只要將新增的使用者指定為此處新增的群組名,即可有相同的權限了。
trac-admin /home/trac/projectA permission add @projectA LOG_VIEW FILE_VIEW WIKI_VIEW WIKI_CREATE WIKI_MODIFY SEARCH_VIEW REPORT_VIEW REPORT_SQL_VIEW
trac-admin /home/trac/projectA permission add @projectA TICKET_VIEW TICKET_CREATE TICKET_MODIFY BROWSER_VIEW TIMELINE_VIEW CHANGESET_VIEW ROADMAP_VIEW MILESTONE_VIEW


用瀏覽器連上 Trac 的存取位址,例如 http://192.168.1.1/trac
選擇進入 projectA 專案後,會顯示 Forbidden 說你沒有讀取權限,因為我們在上一個步驟已經把匿名存取使用者所有的權限給移除了,現在你只能在網頁的右上角找到 「login」 來登入 「admin」 帳號。

成功登入 admin 之後,你可以從導覽列右邊的 [Admin] 進入管理介面,其中:

1. General 下的 「Permissions」 是用來管理 Trac 的使用權限
2. Account 下的 「Users」 可以用來管理 Trac 及 SVN 的用戶 (/etc/svn/account)
3. Subversion 下的 「Subversion Access」 才是用來管理 SVN 的路徑存取權限及 SVN 的用戶群組 (/etc/svn/authz)

參考自:
SVN + Trac + Apache 完整安裝攻略
http://www.vixual.net/blog/archives/232

Debian Linux 架設 Trac + VirtualHost
http://plog.longwin.com.tw/my_note-unix/2007/07/03/debian_trac_svn_virtualhost_2007

星期四, 5月 22, 2008

如何自 svn 檔案庫中取出某一檔案?

svn export URL

不小心砍掉 .svn 這個目錄怎麼辦?

.svn 這個目錄是 svn 替你做的本地工作記錄
沒有這個目錄,svn 就不知道你做過了什麼事或是不知道怎麼幫你做記錄了。因為不知從何做起 Orz...

不小心砍掉 .svn 這個目錄怎麼辦?

把該層整個砍掉,再到上一層去做 svn update 即可從 server 端將整個有缺的部份更新回來了。


svn 分支用法

當想要
*. 做一些實驗
*. 新增某功能
*. 修改某部份功能

建議這樣做
1. 從主幹分支出去
2. 從分支取出
3. 開始在分支的複本做你想要的修改
4. 分支目的達成,將修改部份合併回主幹


1. 從主幹分支出去
svn cp svn+ssh://trunk svn+ssh://branches/BRANCHES_PURPOSE


上面執行後,會將目前 trunk 最新的版本複製一份到 branches/BRANCHES_PURPOSE
BRANCHES_PURPOSE 是你為這個分支所取的名字,建議可取這個分支所要完成的功能相關的名字

2. 從分支取出
svn co svn+ssh://branches/BRANCHES_PURPOSE WORK_DIR


執行後,會將 BRANCHES_PURPOSE 複製一份到 WORK_DIRWORK_DIR svn 會幫你產生

3. 開始在分支的複本做你想要的修改
修改/新增/刪除
更新
提交
驗證

4. 分支目的達成,將修改部份合併回主幹
cd WORK_DIR
svn merge svn+ssh://trunk svn+ssh://branches/BRANCHES_PURPOSE

星期一, 5月 12, 2008

轉載 [新人培訓之3 ] 使用 SVN

出處: http://blog.chinaunix.net/u/22617/showart_372059.html
作者: bob_zhang2004@163.com
潤飾: Richman

SVN 命令操作非常簡單和 CVS 的操作基本上是一致的。

修改了某個文件,想傳上去
svn commit bob.c

如果想在 commit 時,自動跳出 vi 讓你可以寫 commit 記錄,則要設置 SVN_EDITOR 環境變數:
export SVN_EDITOR=/usr/bin/vim,可以寫在在 ~/.bash_profile 裡面去。

新增加了某個文件 bob.c,想傳上去
svn add bob.c
svn commit bob.c
自己修改了,發現錯了,想恢復到 svn 上面的第25版, 可以用
svn update bob.c -r25

想要刪除某個文件bob.c :
svn del bob.c
svn commit bob.c
想徹底更新某個目錄(可能改了某個目錄的一些文件,都不想要了)
svn revert -R xxx (xxx是那個目錄)
比如 ,我 checkout 下來後,新建了一個目錄,然後要上傳整個目錄, 這點比cvs強,
svn add xxx
(xxx就是那個目錄) ,他會遞迴的增加整個目錄的。
然後 svn commit 即可

再次強調一點使用 SVN/CVS 的流程:

1. 自 SVN 檔案庫取出一份最新版本
如:
svn checkout


svn update


2. 修改,本地調試, 測試ok

3. 提交自己修改過的文件和增加的文件(svn add xxx) 。
注意人無完人, 可能會忘記傳了某個文件。你可以在工作副本的根目錄下 ,執行svn status,它會列出來你改了哪些文件。
如:
svn status
svn commit


4. 上傳完畢後, 再自 SVN 檔案庫取出一份最新版本,編譯,測試,如果ok,發mail 給相關的人
內容,比如 "I have updated "drivers/fs/ext3.c , pls update it "
總之越詳細越好,最好精確到文件, 如果不能精確到文件 ,也要精確到目錄
不要只說 "我更新了 kernel 的代碼, 你 update 一下"
這樣的話,會給別人增加工作量,kernel 那麼多的代碼,別人總不能每次都 update , 那樣時間會很長。

5. 等待著別人的問題報告

注意事項: 當你都沒有穩定某個 c 文件的時候 ,不要 commit,不要三天兩頭 commit svn 上的同一個文件(如果是這樣,只能說明,你的改的還不穩定, 先自己測試穩定了再傳)

另外, svn 不是個人的備份的倉庫,是大家的財產,要一字千金的改


星期六, 6月 02, 2007

如何安裝 subversion 於 debian

安裝 subversion
# apt-get install subversion subversion-tools


設定使用權限
假設 project name 為 project_a , 該 project 的使用成員有 user_a, user_b, user_c
則系統應有帳號 user_a, user_b, user_c ; 群組 group_a
並將 user_a, user_b, user_c 加入 group_a,
/etc/group 應如下
group_a:x:1000:user_a,user_b,user_c


假設檔案庫(repository)欲建於 /home/project_a
則以 svnadmin 將之初始化為 repository
# svnadmin create /home/project_a


設定檔案庫的檔案存取權限
# chown -R user_a.group_a /home/project_a
# chmod 770 /home/project_a
# chmod -R g+w /home/project_a


設定檔案庫的存取權限,僅經身份驗證通過者可寫入
修改 /home/project_a/conf/svnserve.conf
[general]
anon-access = none
auth-access = write


使用如下 URL 即可存取檔案庫 project_a
svn+ssh://user@svn.server.ip/home/project_a

ps.身份驗證是以 ssh 完成,若欲免密碼即通過身份驗證,請參考Login via SSH without password