检测.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的文本。