星期日, 十二月 23, 2007

將 Subversion 管理的 File 設定自動加入 Revision 或 Id 等資訊

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:ingnore 來解決此問題:

  1. svn propedit svn:ignore img
  2. 會出現讓你編輯不想編入的檔案, 寫入
    *.jpg
  3. 這樣子之後 img/*.jpg 的檔案, 在 svn st 時就都不會出現囉~ :)

其它參考

相關標籤

this is comment icon 資料真詳細 [回覆]

Tsung 大大的 blog 真的很用心!

推薦一下我最近幾個月在用的好物 -- svk ,基於 svn 也跟 svn 相容,指令也和 svn 差不多,不過功能更強大。值得一玩! :D

Comment by c9s (12/30/2007 18:55)

this is comment icon 回 c9s [回覆]

大大的 Blog 也是小弟必讀的呀.. Orz...
我最近常在外面跑, 也是有在考慮用 svk 來做離線的 commit, 可惜的是 svk 的相關文章還蠻少的, 所以也還在研究中~~ 感謝推薦~~ :)

Comment by Tsung (12/31/2007 10:37)

this is comment icon svk [回覆]

http://c9s.blogspot.com/2008/01/svk.html
最近寫好了,分享給你。 ;)

Comment by c9s (01/06/2008 21:10)

this is comment icon 回 c9s [回覆]

真的是太棒了.. Orz....
我所需要的完全都在裡面了, 感謝大大的好文呀 :D

Comment by Tsung (01/06/2008 21:57)
Add this page to del.icio.us Add this page to Yahoo Taiwan's bookmark Add this page to MyShare

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~