越简单越好!

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

发表于 2012-03-20 13:51 | 1614次阅读 0次点赞   杂七杂八


什么是 svn property?

由于svn来说文件有很多属性,因为svn客户端是跨平台的,对于代码库的文件,需要根据这些属性以及客户端所在平台来处理工作空间文件的属性。例如我们 常见的Windows文件的回车换行和Unix文件的换行是不相同的。我们可以通过指定svn文件中的 svn:eol-style 属性来实现, 具体命令如下 svn propset svn:eol-style native。

如果你想指定一个shell脚本为可执行文件, 你可以通过命令使用 svn propset svn:executable 文件名来实现。

如何设置svn自动属性

前面提到的文件属性要设置起来通过命令行的方式很麻烦,我们可以通过修改 Subversion的配置文件让Subsersion自动实行上面的操作。 具体做法如下:

修改 home/Subversion/config 文件。

启用和设置自动属性,是在 config 配置文件中完成的。 config 配置文件的位置:

Unix 平台

全局的配置文件位置为:/etc/subversion/config;

每个用户主目录还有配置文件覆盖全局配置文件的设置:~/.subversion/config;

Windows 平台

全局配置文件:%ALLUSERSPROFILE%Application DataSubversionconfig,用户个人配置文件:%APPDATA%Subversionconfig

将 enable-auto-props = yes

然后添加如下的内容

 

 


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 時就都不會出現囉~ 




返回顶部 ^