Subverion 和 CVS 都有一模固定的參數可以加入, 然後只要加入後, 就會依照指定的值, 每次更新時自動修改此值.(在下面這種我統稱叫 SVN 變數 好了)
ex: 以 CVS 為例, 只要於檔案中加入 下述:
- $Id$, CVS 在更新時就自動會將 $Id$ 換成 $Id: index.php,v 1.21 2007/12/11 10:12:37 tsung Exp $
- $Source$: $Source: /CVSROOT/project/webroot/index.php,v $
- $Author$: $Author: tsung $
但是在 SVN 需要多一個步驟, 假如要讓 SVN 自動產生版本編號, 在加入 $Rev$ 後, 需要再多執行下面這行指令:
- svn propset svn:keywords "Revision" index.php
這樣子 $Rev$ 才會自動更新成此次 svn 的版本編號, 會變成 $Rev: 130 $
要自動多設 SVN變數 可以這樣子設定(自動將 Id, Date 轉換成 svn 的值):
- svn propset svn:keywords "Id Date" index.php
Subversion 的這種參數有下述這些, 每次要用都要記得用 propset 設定一下此次要用的 keywords:(目前全部有下面這五個 SVN變數 可以用)
- $LastChangedDate$ or $Date$: $LastChangedDate: 2002-07-22 21:42:37 -0700 (Mon, 22 Jul 2002) $. 最後更新日期.
- $LastChangedRevision$ or $Rev$: $Revision: 144 $ 自動更新成此次 svn 的版本編號.
- $LastChangedBy$ or $Author$: $Author: harry $ 最後修改的人.
- $HeadURL$ or $URL$: $HeadURL: http://svn.hostname/repos/trunk/index.php $ 最新版的程式 URL 路徑於此.
- $Id$: $Id: index.php 4308 2007-12-22 09:28:08Z tsung $ 最常用的就是這個了, 需要的資訊大概都包在裡面了.
如果不想要每次都手動 svn propset 設定值的話, 也可以編輯 ~/.subversion/config
:(下述部份取自: Symfony Repository Tips)
[miscellany]
# 自動執行 propset 動作
enable-auto-props = yes[auto-props]
# Scriptish formats
*.bat = svn:eol-style=native; svn:keywords=Id; svn-mine-type=text/plain
*.bsh = svn:eol-style=native; svn:keywords=Id; svn:mime-type=text/x-beanshell
*.cgi = svn:eol-style=native; svn:keywords=Id; svn-mine-type=text/plain
*.cmd = svn:eol-style=native; svn:keywords=Id; svn-mine-type=text/plain
*.js = svn:eol-style=native; svn:keywords=Id; svn:mime-type=text/javascript
*.php = svn:eol-style=native; svn:keywords=Id Rev Date; svn:mime-type=text/x-php
*.pl = svn:eol-style=native; svn:keywords=Id; svn:mime-type=text/x-perl; svn:executable
*.pm = svn:eol-style=native; svn:keywords=Id; svn:mime-type=text/x-perl
*.py = svn:eol-style=native; svn:keywords=Id; svn:mime-type=text/x-python; svn:executable
*.sh = svn:eol-style=native; svn:keywords=Id; svn:mime-type=text/x-sh; svn:executable
# 最簡的寫法(eol/mime 這些可以不設, 設不設的差別可見最下面的 Subversion 系統那篇 PDF)
*.html = svn:keywords=Id URL
svn:ignore
另外, 上述用的是 propset 的參數來做設定, 如果在 project 中, 有些目錄或檔案是在測試時後產生, 但是並不需要 commit 進去, 不過每次 svn st 都會跑出來干擾你, 可以用 propedit svn:ignore 來解決此問題:
- svn propedit svn:ignore img
- 會出現讓你編輯不想編入的檔案, 寫入
*.jpg
- 這樣子之後 img/*.jpg 的檔案, 在 svn st 時就都不會出現囉~ 🙂
Tsung 大大的 blog 真的很用心!
推薦一下我最近幾個月在用的好物 -- svk ,基於 svn 也跟 svn 相容,指令也和 svn 差不多,不過功能更強大。值得一玩! 😀
大大的 Blog 也是小弟必讀的呀.. Orz...
我最近常在外面跑, 也是有在考慮用 svk 來做離線的 commit, 可惜的是 svk 的相關文章還蠻少的, 所以也還在研究中~~ 感謝推薦~~ 🙂
http://c9s.blogspot.com/2008/01/svk.html
最近寫好了,分享給你。 😉
真的是太棒了.. Orz....
我所需要的完全都在裡面了, 感謝大大的好文呀 😀