我正在尝试编写一个批处理文件,其中我需要我正在处理的项目的 HEAD 修订版。
是否有命令可以从命令行获取此信息?
我使用的是 Windows XP 计算机。
没有 *nix 的文本处理功能会很尴尬,但是这个批处理文件可以做到:
@echo off
for /f "tokens=2" %%i in ('svn info -rHEAD svn://localhost^|find "Revision"') do @echo %%i
用你的 svn 存储库替换我的
svn://localhost
。
svn info
获取存储库信息,然后将其传送到 find
,这会删除除包含修订号的行之外的所有内容。 for
命令为您提供该行上的第二个“标记”(第一个是 Revision:
)。
编辑:正如其他人已经提到的,您需要安装 Subversion 的命令行版本,并且在您的
svn.exe
上有 PATH
。
for /f "tokens=5" %%i in ('SubWCRev WorkingCopyPath^|find "Last committed at revision"') do set version=%%i
echo %version%
当前本地签出的修订版感兴趣,我发现这篇博文所做的事情与Shambulator的答案中所做的非常相似:
@echo off
FOR /F "tokens=2 skip=4" %%G IN ('svn info --revision HEAD') DO ^
IF NOT DEFINED REVISION SET REVISION=%%G
echo %REVISION%
set SubWCRev=C:\Program Files\TortoiseSVN\bin\SubWCRev.exe
set WorkingCopyPath=%~dp0
for /f "tokens=5" %%i in ('""%SubWCRev%" "%WorkingCopyPath%.""') do set version=%%i
@echo Version=%version%
我使用了bat文件所在的目录作为SVN存储库文件夹,使用%~dp1是你想要将目录作为参数传入
但是,如果您安装了 svn 命令行工具,以下命令将为您提供 SVN URL 的详细信息:
svn info [SVN-URL]
要提取修订版,您可以使用以下命令:
svn info [SVN-URL] | grep Revision | awk '{print $2}'
(假设您已经安装了一些 UNIX 工具,例如 cygwin)
head -4 entries | tail -1
会给您修订号。
使用它可能并不明智,因为文件的格式可能会改变 - 这实际上取决于脚本是否仅供个人使用
将第一行中的%cd%更改为您想要的路径
,以防你的 PATH 中没有 svn.exe。请注意使用反引号来处理路径中的空格。
@echo off
set SVN_EXE=C:\Program Files (x86)\VisualSVN\bin\svn.exe
rem Find revision of entire repository
for /f "usebackq tokens=2" %%i in (`call "%SVN_EXE%" info -rHEAD https://svnroot/repo^|find "Revision"`) do @echo %%i
rem Find revision of a path in the repository
for /f "usebackq tokens=4" %%i in (`call "%SVN_EXE%" info -rHEAD https://svnroot/repo/project/trunk^|find "Last Changed Rev"`) do @echo %%i
svnlook youngest <repo-path>
它返回单个修订号。