You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SVN的VERSION.txt在每次提交时自动更新Revision版本号?

实现SVN每次提交自动更新VERSION.txt的修订版本号

SVN默认的关键字替换(比如Rev)只有当文件本身被包含在提交变更集中时,才会自动更新其中的$Revision标记。要实现无论提交任何文件都自动更新VERSION.txt的修订号,必须借助SVN的版本库钩子脚本,具体使用pre-commit钩子在提交前自动修改VERSION.txt并将其纳入本次提交。

具体实现步骤

1. 进入版本库的hooks目录

找到你的SVN版本库所在路径,进入其下的hooks子目录:

  • Linux/macOS:执行命令 cd /path/to/your/svn/repo/hooks
  • Windows:直接在资源管理器中打开版本库文件夹下的hooks文件夹

2. 创建pre-commit钩子脚本

钩子脚本分为Shell脚本(Linux/macOS)和批处理脚本(Windows)两种,选择对应系统的脚本:

针对Linux/macOS的Shell脚本

  1. 复制默认模板并改名:
cp pre-commit.tmpl pre-commit
  1. 赋予执行权限:
chmod +x pre-commit
  1. 编辑pre-commit文件,替换内容为以下脚本(注意修改VERSION_FILE为实际路径):
#!/bin/sh

REPOS="$1"
TXN="$2"

# 请修改为VERSION.txt在版本库中的实际路径,比如项目根目录就是"VERSION.txt"
VERSION_FILE="VERSION.txt"

# 获取即将生成的新修订号(当前最新修订号+1)
NEW_REV=$(svnlook youngest "$REPOS")
NEW_REV=$((NEW_REV + 1))

# 创建临时目录存放修改后的文件
TMP_DIR=$(mktemp -d)
svnlook cat "$REPOS" "$VERSION_FILE" > "$TMP_DIR/$VERSION_FILE"

# 替换$Revision字段
sed -i.bak "s/\$Revision: [0-9]* \$/\\\$Revision: $NEW_REV \$/" "$TMP_DIR/$VERSION_FILE"
rm "$TMP_DIR/$VERSION_FILE.bak"

# 检查VERSION.txt是否已在本次提交中,未加入则添加到提交
svnlook tree "$REPOS" -t "$TXN" | grep -q "^$VERSION_FILE$"
if [ $? -ne 0 ]; then
    svnmucc -t "$TXN" -r "$REPOS" put "$VERSION_FILE" "$TMP_DIR/$VERSION_FILE"
fi

# 清理临时文件
rm -rf "$TMP_DIR"

exit 0

针对Windows的批处理脚本

  1. 复制pre-commit.tmpl为pre-commit.bat(直接在资源管理器中复制重命名即可)
  2. 编辑pre-commit.bat,替换内容为以下脚本(注意修改VERSION_FILE为实际路径):
@echo off
setlocal enabledelayedexpansion

set REPOS=%1
set TXN=%2
:: 请修改为VERSION.txt在版本库中的实际路径,比如项目根目录就是"VERSION.txt"
set VERSION_FILE=VERSION.txt

:: 获取即将生成的新修订号(当前最新修订号+1)
for /f %%i in ('svnlook youngest %REPOS%') do set NEW_REV=%%i
set /a NEW_REV=NEW_REV+1

:: 创建临时目录
set TMP_DIR=%temp%\svn_version_update
mkdir %TMP_DIR% 2>nul

:: 导出当前VERSION.txt到临时目录
svnlook cat %REPOS% %VERSION_FILE% > %TMP_DIR%\%VERSION_FILE%

:: 使用PowerShell替换Revision字段
powershell -Command "(Get-Content '%TMP_DIR%\%VERSION_FILE%') -replace '\$Revision: \d+ \$', '\$Revision: %NEW_REV% \$' | Set-Content '%TMP_DIR%\%VERSION_FILE%'"

:: 检查VERSION.txt是否在本次提交中,未加入则添加
svnlook tree %REPOS% -t %TXN% | findstr /c:"%VERSION_FILE%" >nul
if errorlevel 1 (
    svnmucc -t %TXN% -r %REPOS% put %VERSION_FILE% %TMP_DIR%\%VERSION_FILE%
)

:: 清理临时目录
rmdir /s /q %TMP_DIR%

exit 0

3. 测试钩子功能

完成配置后,做一次不修改VERSION.txt的提交(比如修改其他文件),提交完成后查看VERSION.txt中的$Revision标记,应该已经更新为最新的提交版本号。

注意事项

  • 确保VERSION_FILE的路径与项目中实际路径一致,比如VERSION.txt在src子目录下,要写成src/VERSION.txt
  • Linux/macOS下要确保svnlook、sed、svnmucc命令在系统PATH中可用,且钩子脚本有执行权限
  • Windows下要将Subversion的bin目录(比如C:\Program Files\Subversion\bin)添加到系统环境变量PATH中,确保svnlook、svnmucc能被正常调用

内容的提问来源于stack exchange,提问作者Tom Woodland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:09:28