检测.bat中的svn变化

时间:2020-03-06 15:04:15  来源:igfitidea点击:

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

解决方案

我们是否要对此做出反应?还是按需?

有关反应性,请参见钩子。该脚本必须根据其用途进行命名:pre-commit.bat,post-commit.bat。这些脚本称为:[脚本] [repos-path] [版本号]

对于,按需:

  • svn st
  • svn差异
  • svn支持者
  • svnlook已更改
  • svnlook日期
  • svnlook差异
  • svnlook历史

例子:

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

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

对于Win 2000及更高版本,这会将svn status命令的最后一个输出行分配给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=

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

好的,我在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!
)

让.bat对工作副本的最顶层执行svnversion(如果使用Subversion)或者SvnWCRev.exe(如果使用TortoiseSVN)。

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

svnversion在其输出后面添加一个" M"。
SvnWCRev.exe将输出一行已修改WC的文本。