2009-07-09 65 views
1

我在Windows的Box上使用Visual SVN。在svn中使用svnversion:關鍵字

我有知識庫Application,其中Framework作爲svn:external。一切都很好。我想將ApplicationFramework的版本包含在頁腳文件中。這樣我可以有這樣的:

Application Version $ApplicationVersion$, Framework Version $FrameworkVersion$ 

通常情況下,我明白我可以使用svn:關鍵字和添加修改 - 但據我瞭解,SVN:關鍵字適用於每個文件爲基礎。有幾個網站建議使用svnversion來產生每個變量的輸出,但我不完全確定如何去做這件事。

再次在Windows Box上使用VisualSVN。我也使用Versions.app在Mac上開發,如果它提供了一個更熟悉的界面供人們回答:)

編輯 - 我的應用程序是一個PHP Web應用程序。因此,沒有編譯。

謝謝!

回答

4

要使用svnversion,您需要將它集成到構建過程中。如果你在顛覆簽出時運行它,它會輸出一個字符串,如73597:73598,表明你的樹有什麼版本(注意不同的文件可能有不同的版本,加上文件也可能有本地修改)。你把像

CFLAGS+=-DSVNVERSION="\"`svnversion`\"" 

到您的Makefile,然後把

#define VERSION_STRING "Application version" SVNVERSION ", Framework version" FRAMEWORK_VERSION 

到代碼。如果您不使用Make,或者不能立即讓您的構建過程運行一個命令,其輸出會生成編譯器命令行選項,那麼您還可以使用TortoiseSVN附帶的subwcrev實用程序。您將其用作預構建步驟,並使用佔位符將某些文件轉換爲文件的副本,並用實際版本替換佔位符;那麼你的編譯將編譯並鏈接新文件。

編輯:對於PHP情況下,也不可能有自動寫入對檢出或更新文件的修訂。相反,您可以在每次PHP訪問時運行svnversion,將其輸出放入HTML響應中。如果這太昂貴了,你可以將svnversion結果緩存在一個文件中,並且只在文件超過一個小時(比如說)時重新生成文件,留給用戶記住在更新後刪除文件以使其重新計算緩存立即。

+0

我的應用程序是一個PHP Web應用程序。因此,沒有編譯。如果我要使用subwcrev之類的東西,我怎麼才能讓它在檢出時自動運行? – EvilChookie 2009-07-09 20:08:53