我有一个.bat,在.bat中我想执行一个特殊的代码,如果在svn存储库中有一些修改(例如,编译)。
答案 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 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!
)