检测.bat中的svn变化

时间:2008-10-03 11:58:02

标签: svn

我有一个.bat,在.bat中我想执行一个特殊的代码,如果在svn存储库中有一些修改(例如,编译)。

5 个答案:

答案 0 :(得分:6)

对于Win 2000及更高版本,这会将svn status commmand的最后一个输出行分配给svnOut变量,然后测试该变量是否包含任何内容:

@echo off
set svnOut=
set svnDir=C:Your\path\to\svn\dir\to\check
for /F "tokens=*" %%I in ('svn status %svnDir%') do set svnOut=%%I

if "%svnOut%"==""  (
    echo No changes
) else (
    echo Changed files!
)

为什么会有这样的一行

set svnOut=

你必须弄清楚自己。 ; - )

答案 1 :(得分:3)

好的,我在Tooony的帮助下找到的解决方案:

set vHEAD = 0
set vBASE = 0

set svnDir=<path to local svn directory>

for /F "tokens=1,2" %%I in ('svn info -r HEAD %svnDir%') do if "%%I"=="Revision:" set vHEAD=%%J
for /F "tokens=1,2" %%I in ('svn info -r BASE %svnDir%') do if "%%I"=="Revision:" set vBASE=%%J

if "%vBASE%"=="%vHEAD%"  (
    echo No changes
) else (
    echo Changed files!
)

答案 2 :(得分:3)

让你的.bat执行svnversion(如果你正在使用Subversion)或SvnWCRev.exe(如果你使用的是TortoiseSVN)对照工作副本的最高级别。

如果您的工作副本已被修改,则两者都输出。

svnversion在其输出中附加“M”。 SvnWCRev.exe将打印WC已被修改的文本行。

答案 3 :(得分:1)

你想要这个被动反应吗?或者,按需?

对于被动,请参阅hooks。该脚本必须根据其目的命名: pre-commit.bat post-commit.bat 。这些脚本称为: [script] [repos-path] [revision-number]

对于按需:

  • 工作副本
    • svn log
    • svn st
    • svn diff
    • svn proplist
  • 存储库
    • svnlook作者
    • svnlook已更改
    • svnlook date
    • svnlook diff
    • svnlook历史记录

示例:

svn st "C:\path\to\working\directory\" >> C:\path\to\working\project.log

每次运行BAT时,都会将 st 输出添加到 project.log 。根据需要进行调整。

答案 4 :(得分:0)

此版本基于@ tooony's但检查服务器是否有更新而不是客户端。

@echo off
set svnOut=

rem Check svn server status of current working directory repository and see if first or second token is an *
for /F "tokens=1" %%I in ('svn status --show-updates') do if "%%I"=="*" set svnOut=%%I
rem echo "%svnOut%"

if "%svnOut%"==""  (
    echo No changes
) else (
    echo Changed files!
)