2008-10-03 123 views
9

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

回答

6

为Win 2000及更高版本,这会从SVN状态条命令的最后输出行分配给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

你想要这是被动的?或者,按需?

有关反应性,请参阅hooks。脚本必须根据其目的命名:pre-commit.bat,post-commit.bat。这些脚本称为:[脚本] [回购路径] [版本号]

有关,点播:

  • 工作拷贝
    • SVN日志
    • svn st
    • svn diff
    • 的svn proplist变种
    • svnlook的作者
    • svnlook的改变
    • svnlook的日期
    • svnlook的DIFF
    • svnlook的历史

例子:

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

运行BAT每一次,它会在ST输出添加到项目。日志。根据需要调整。

+0

它按需提供。 我知道svn命令(很容易找到他们eveyrwhere)。 的问题是要知道如何使用,在一个蝙蝠脚本 – acemtp 2008-10-03 12:14:11

+0

我不想把状态到日志文件: 我想.BAT的是做这样的事情代码: 如果(svn_changed()) 这样做 否则 那样做 – acemtp 2008-10-03 12:37:15

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

有你。蝙蝠执行svnversion(如果您使用的是Subversion)或SvnWCRev.exe(如果您使用的是TortoiseSVN),则是针对您的工作副本的最高级别。

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

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

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! 
)