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

  1. svn propedit svn:ignore img
  2. 會出現讓你編輯不想編入的檔案, 寫入

    *.jpg

  3. 這樣子之後 img/*.jpg 的檔案, 在 svn st 時就都不會出現囉~ 🙂

其它參考

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈將 Subversion 管理的 File 設定自動加入 Revision 或 Id 等資訊〉中有 4 則留言

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

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

c9s 發表迴響取消回覆

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料