2009-12-01 73 views
6

我有一個軌道站點。我想,在雜種重啓,寫當前SVN版本納入公共/ version.txt,這樣我就可以把這個到在頁眉評論。寫入當前SVN版本爲文本文件

的問題越來越SVN目前本地版本 - 我有點困惑。

如果,例如,我做已經有一段時間沒有我得到「在修訂4571.」被更新文件SVN更新。但是,如果我做SVN信息,我得到

路徑。
網址:http://my.url/trunk
庫根:http://my.url/lesson_planner
庫UUID:#########
修訂:4570
節點類型:目錄
附表:正常
上次更改作者:最大
上次更改修訂:4570
上次更改日期:2009-11-30 17點14分52秒+0000(星期一,2009年11月30日)

注意此說改版4570,1比以前的命令下。

誰能把我直,讓我看看如何簡單地得到當前版本號?

感謝,最大

+0

我一直有一個夢想,我的應用程序的內部版本號將與SVN版本保持一致。我很好奇,看看這是如何解決的。 – 2009-12-01 11:54:54

+0

請參閱:http://stackoverflow.com/questions/1449935/getting-svn-revision-number-into-a-program-automatically – 2009-12-01 11:56:39

回答

6

Subversion附帶了一個用於執行此操作的命令:SVNVERSION.EXE

用法:svnversion,如果[OPTIONS] [WC_PATH [TRAIL_URL]]

爲工作拷貝路徑 WC_PATH緊湊 '版本號'。 TRAIL_URL是用於確定WC_PATH本身是否被切換(在WC_PATH中檢測到開關 不依賴於TRAIL_URL)的用於URL的尾部部分 。版本號 寫入標準輸出。例如:

$ svnversion . /repos/svn/trunk 
4168 

版本號將是單號,如果工作 副本是單一版本,未經切換,並與 的TRAIL_URL參數相匹配的URL。如果工作 副本是不尋常的版本號將更加複雜:

4123:4168的混合版本的工作副本
4168M調整工作內容拷貝
4123S已切換工作副本
4123:4168MS混合版本,有修改,切換工作複製

如果在不是工作副本的目錄上調用 導出目錄,那麼程序將輸出'exported'。

如果在沒有參數的情況下調用WC_PATH將是當前目錄。

有效選項: -n [--no-換行符]:不輸出其後的換行符 -c [--committed]:最後改變的,而不是目前的版本 -h [--help]:顯示此幫助 --version:顯示版本信息

+0

我想在我的輸出文件的開始處寫入這些信息,並且這完美地工作。謝謝。 – ryanjdillon 2014-03-03 13:25:12

2

如果你只想打印版本庫的最新修訂版本,你可以使用這樣的事情:

svn info <repository_url> -rHEAD | grep '^Revision: ' | awk '{print $2}' 

您可以使用部署Capistrano的,它會創建修訂文件,該文件你可以複製到public/version.txt

+0

如果您通過-r或PEG修訂版(@。 ..)你總是要求HEAD,所以你可以把-rHEAD放在你的例子中。 – 2009-12-01 14:19:08

1

看來你正在運行svn info的目錄,但svn update在一個特定的文件上。如果更新目錄到版本4571,svn info應打印:

路徑。

網址:http://my.url/trunk

庫根:http://my.url/lesson%5Fplanner

庫UUID:#########

修訂:4571

[...]

上次更改修訂:4571

注意「最近修改的修訂版」並不一定與資源庫的最新版本保持一致。

+0

啊 - 好吧,這很有道理,謝謝。 – 2009-12-02 16:39:54

4

我用下面的shell腳本片段創建一個頭文件svnversion.h定義我在編譯的代碼使用的一些常量字符串。你應該能夠得到類似的東西:

#!/bin/sh -e 

svnversion() { 
    svnrevision=`LC_ALL=C svn info | awk '/^Revision:/ {print $2}'` 
    svndate=`LC_ALL=C svn info | awk '/^Last Changed Date:/ {print $4,$5}'` 

    now=`date` 

    cat <<EOF > svnversion.h 

// Do not edit! This file was autogenerated 
//  by $0 
//  on $now 
// 
// svnrevision and svndate are as reported by svn at that point in time, 
// compiledate and compiletime are being filled gcc at compilation 

#include <stdlib.h> 

static const char* svnrevision = "$svnrevision"; 
static const char* svndate = "$svndate"; 
static const char* compiletime = __TIME__; 
static const char* compiledate = __DATE__; 

EOF 
} 

test -f svnversion.h || svnversion 

這假設你將刪除創建的頭文件來觸發新建立的頭文件。

0

謝謝大家誰Capistrano的建議和svninfo。

我們實際使用Capistrano的,而且它確實使這次修訂文件,我想我以前看過,但沒有引起重視。但事實並非如此,因爲它只是在部署上得到更新,而有時我們可能會偷偷更新一些文件,然後重新啓動,而不是進行完全部署。

我結束了使用svninfo,grep和awk的,很多人在這裏建議,並把它在公衆做我自己的文件。這是在mongrel啓動時創建的,這是部署過程的一部分,重啓過程因此兩次完成。

謝謝大家!