[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一頁 ]
有關的詳細訊息可使用 lynx 查閱
/usr/share/doc/cvs/html-cvsclient ,
/usr/share/doc/cvs/html-info,/usr/share/doc/cvsbook
或執行 info cvs 及 man cvs。
以下設定的步驟,僅允許 "src" 群組的成員存取 CVS 檔案庫,並且僅 "staff" 群組的成員才可管理 CVS,這樣做可以降低管理者不小心犯錯的機會。
# cd /var/lib; umask 002; mkdir cvs # [Woody] FSH
# apt-get install cvs cvs-doc cvsbook
# export CVSROOT=/var/lib/cvs
# cd $CVSROOT
# chown root:src . # "staff" to restrict more for starting project.
# chmod 3775 . # 如果上面使用 "staff",則這裡用 2775
# cvs -d /var/lib/cvs init # 在此明確指定 -d 會更安全!
# cd CVSROOT
# chown -R root:staff .
# chmod 2775 .
# touch val-tags
# chmod 664 history val-tags
# chown root:src history val-tags
下面是設定 shell 環境以便存取 CVS 檔案庫 (repository)。
遠端唯讀存取:
$ export CVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qref
$ cvs login
$ cvs -z3 co qref
透過同一台機器上的 shell 進行本地端存取:
$ export CVSROOT=/var/lib/cvs
不使用 SSH (在 cvs 中使用 RSH 協議) 遠程存取:
$ export CVSROOT=:pserver:account@cvs.foobar.com:/var/lib/cvs
$ cvs login
這個方法有被竊聽攻擊的疑慮。
ssh 使用遠端 CVS透過 SSH 進行遠端存取:
$ export CVSROOT=:ext:account@cvs.foobar.com:/var/lib/cvs
或以 SourceForge 為例:
$ export CVSROOT=:ext:account@cvs.sf.net:/cvsroot/qref
你亦可使用 RSA 認證 (以少許密碼連線 – RSA, 第 9.5.3 節),它不需要密碼提示。
想要建立如下的檔案,
ITEM VALUE MEANING
source tree: ~/project-x 所有的源碼
Project name: project-x 專案名稱
Vendor Tag: Main-branch 整個分支的標記 (Tag)
Release Tag: Release-initial 特定分支的標記
則,
$ cd ~/project-x # 進源碼目錄
... 建立源碼樹 ...
$ cvs import -m "Start project-x" project-x Main-branch Release-initial
$ cd ..; rm -R ~/project-x
使用本地端 CVS 檔案庫來進行 project-x:
$ cd # 轉到工作區
$ cvs co project-x # 從 CVS 下載源碼到本地端
$ cd project-x
... 修改內容 ...
$ cvs diff -u # 相當於 diff -u repository/ local/
$ cvs up -C modified_file # 取消對文件的修改
$ cvs ci -m "Describe change" # 將本地端源碼存到 CVS 上
$ vi newfile_added
$ cvs add newfile_added
$ cvs ci -m "Added newfile_added"
$ cvs up # 從 CVS 合併最新版本
... 要從 CVS 建立所有新建立的子目錄的話,請改用 "cvs up -d -P"
... 注意以 "C filename" 作開頭的行
... 沒有變動的碼會移至 `.#filename.version'
... 在 filename 中搜尋 "<<<<<<<" 和 ">>>>>>>"
$ cvs tag Release-1 # 添加 release tag
... 繼續編輯 ...
$ cvs tag -d Release-1 # 移除 release tag
$ cvs ci -m "more comments"
$ cvs tag Release-1 # 重新加入 release tag
$ cd # 返回工作區
$ cvs co -r Release-initial -d old project-x
... 取得原版本並放入 old 目錄
$ cd old
$ cvs tag -b Release-initial-bugfixes # 建立 branch (-b) tag
... 現在你可以對舊版本做修改了 (Tag=sticky)
$ cvs update -d -P
... 源碼樹現在有 "Release-initial-bugfixes" 的 sticky tag
... 對分支做修改
$ cvs up -d -P # 將在這個分支版本上被他人修改的檔案同步化
$ cvs ci -m "check into this branch"
$ cvs update -kk -A -d -P
... 移除 sticky tag 並取消內容
... update from main trunk without keyword expansion
$ cvs update -kk -d -P -j Release-initial-bugfixes
... 將 Release-initial-bugfixes 的分支合併至主要版本
... trunk without keyword expansion. Fix conflicts with editor.
$ cvs ci -m "merge Release-initial-bugfixes"
$ cd
$ tar -cvzf old-project-x.tar.gz old # 建立壓縮備份, -j 可使用 bz2 格式
$ cvs release -d old # 移除本地端源碼(可選)
應該記住的幾個選項(用作 cvs 命令行的第一個參數):
-n dry run, no effect
-t display messages showing steps of cvs activity
要從 CVS 獲得最新版本,用 "tomorrow" :
$ cvs ex -D tomorrow module_name
為專案加上別名 (alias)(本地伺服器):
$ su - admin # staff 成員之一
$ export CVSROOT=/var/lib/cvs
$ cvs co CVSROOT/modules
$ cd CVSROOT
$ echo "px -a project-x" >>modules
$ cvs ci -m "Now px is an alias for project-x"
$ cvs release -d .
$ exit # 或 Ctrl-D 自 su 返回
$ cvs co -d project px
... 自 CVS 中匯出 project-x (別名: px) 至 direcotry 專案
$ cd project
... 修改內容 ...
CVS 不會覆蓋當前容器中的文件,而是用另一個文件替換它。因此,對檔案庫目錄的寫入權限是很重要的權限。所以如果需要的話,在新建檔案庫時請執行下面的命令,以確保權限的設定。
# cd /var/lib/cvs
# chown -R root:src repository
# chmod -R ug+rwX repository
# chmod 2775 repository # 如果需要的話,對子目錄也做同樣的設定
當文件被別人匯出後會保留可執行權限。任何時候當你匯出的文件遇到執行權限的問題,可用下面的命令在 CVS 檔案庫中修改文件的權限。
# chmod ugo-x filename
這裡是一些 CVS 命令和他們的捷徑的用法。
{add|ad|new} [-k kflag] [-m 'message'] files...
{admin|adm|rcs} [rcs-options] files...
{annotate|ann} [options] [files...]
{checkout|co|get} [options] modules...
{commit|ci|com} [-lnR] [-m 'log_message' | -f file] \
[-r revision] [files...]
{diff|di|dif} [-kl] [rcsdiff_options] [[-r rev1 | -D date1] \
[-r rev2 | -D date2]] [files...]
{export|ex|exp} [-flNn] -r rev|-D date [-d dir] [-k kflag] module...
{history|hi|his} [-report] [-flags] [-options args] [files...]
{import|im|imp} [-options] repository vendortag releasetag...
{login|logon|lgn}
{log|lo|rlog} [-l] rlog-options [files...]
{rdiff|patch|pa} [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules...
{release|re|rel} [-d] directories...
{remove|rm|delete} [-lR] [files...]
{rtag|rt|rfreeze} [-falnR] [-b] [-d] [-r tag | -D date] \
symbolic_tag modules...
{status|st|stat} [-lR] [-v] [files...]
{tag|ta|freeze} [-lR] [-F] [-b] [-d] [-r tag | -D date] [-f] \
symbolic_tag [files...]
{update|up|upd} [-AdflPpR] [-d] [-r tag|-D date] files...
Subversion 是下一代版本控制系統,它將替代 CVS。當前開發者稱它還處於 "alpha" 階段,但對大多數用戶而言它已足夠穩定了。到本文檔寫作之時,Subversion 僅在 Debian unstable 中可用。
subversion meta-package 依賴一些相依的套件
(libapache2-svn 和 subversion-tools) 來設定伺服器。
當前,subversion
無法建立檔案庫,所以使用者需要手動創建它們。通常會在
/var/local/repos 下建立檔案庫。
創建目錄:
# mkdir -p /var/local/repos
建立檔案資料庫:
# svnadmin create /var/local/repos
將容器的寫權限賦給 www server:
# chown -R www-data:www-data /var/local/repos
想要用使用者認證來授權存取檔案庫,則添加(或去除注釋)下列內容到
/etc/apache2/mods-available/dav_svn.conf :
<Location /repos>
DAV svn
SVNPath /var/local/repos
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/subversion/passwd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
接著,使用下面的命令建立使用者認證檔:
htpasswd2 -c /etc/subversion/passwd some-username
重新啟動 Apache2,就可以使用 URL http://hostname/repos 來存取新的 subversion 檔案庫了。
下面的小節將教你如何在 Subversion 下使用各種命令。
要建立新的 Subversion 保存檔,請輸入下面的命令:
$ cd ~/your-project # 進入你的源碼目錄
$ svn import http://localhost/repos your-project \
project-name -m "initial project import"
這將在你的 Subversion 檔案庫下建立一個名為 project-name 的目錄,用來存放你的專案文件。查看 http://localhost/repos/ 它是否在那兒?
用 Subversion 來管理 project-y:
$ cd # 進入工作區域
$ svn co http://localhost/repos/project-y # 匯出源碼
$ cd project-y
... 完成一些工作 ...
$ svn diff # 相當於 diff -u repository/ local/
$ svn revert modified_file # 取消對文件所做的修改
$ svn ci -m "Describe changes" # 將你做的修改匯入至檔案庫中
$ vi newfile_added
$ svn add newfile_added
$ svn add new_dir # 將 new_dir 中的所有文件遞迴地加入檔案庫中
$ svn add -N new_dir2 # 將 new_dir2 中的文件非遞迴地加入檔案庫中
$ svn ci -m "Added newfile_added, new_dir, new_dir2"
$ svn up # 從檔案庫中合併最新的版本
$ svn log # 顯示所有已提交的修改記錄
$ svn copy http://localhost/repos/project-y \
http://localhost/repos/project-y-branch \
-m "creating my branch of project-y" # 建立 project-y 的分支版本
$ svn copy http://localhost/repos/project-y \
http://localhost/repos/proj-y_release1.0 \
-m "project-y 1.0 release" # 加入 release tag
... 注意,分支 (branching) 和標記 (tagging) 是相同的。唯一的不同在分支會提交 (committed) 而標記不會。
... 對分支版本做修改 ...
$ # 將分支版本回存至主要版本
$ svn merge http://localhost/repos/project-y \
http://localhost/repos/project-y-branch
$ svn co -r 4 http://localhost/repos/project-y # 取得第四版本
[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一頁 ]
Debian 參考手冊
CVS, 週四 一月 18 11:53:38 UTC 2007osamu#at#debian.orgasho#at#debian.org.tw