svn 比对本地修改与“昨日版本”需将日期转为修订号或直接用日期格式:先用 svn log -l 1 --revision "$(date -d 'yesterday' '+%y-%m-%d')t00:00:00":"$(date -d 'yesterday' '+%y-%m-%d')t23:59:59" --quiet 获取昨日最后提交号,再执行 svn diff -r rev;或更简便地直接运行 svn diff -r "$(date -d 'yesterday' '+%y-%m-%d')":working。

要使用 SVN 命令行比对本地修改与“昨日版本”的差异,关键在于:SVN 本身没有直接的 yesterday 时间关键字,需将“昨日”转换为具体修订版本号(revision)或日期戳,再结合 svn diff 完成比对。
1. 获取昨日的最新提交修订号
SVN 仓库中“昨日版本”通常指**昨天 24 小时内最后提交的版本**。可用以下命令查出昨日(如 2024-06-04)的最新修订号:
-
svn log -l 1 --revision "{2024-06-04}":"{2024-06-04}" --quiet(精确匹配某天) - 更实用的是用相对时间范围:
svn log -l 1 --revision "{2024-06-04T00:00}:{2024-06-04T23:59}" --quiet - 若想自动计算“昨天”,在 Bash 中可组合:
svn log -l 1 --revision "$(date -d 'yesterday' '+%Y-%m-%d')T00:00:00":"$(date -d 'yesterday' '+%Y-%m-%d')T23:59:59" --quiet | grep '^r' | cut -d' ' -f1
输出类似 r12345,即昨日最后提交的版本号。
2. 比对本地工作副本与昨日版本的差异
拿到昨日修订号(例如 r12345)后,运行:
-
svn diff -c 12345→ 显示本地修改相对于 r12345 的变更(仅显示你本地改了哪些文件、怎么改的) -
svn diff -r 12345:HEAD→ 若你想看 r12345 到当前 HEAD(最新服务器版本)之间的所有变更(含他人提交),不推荐用于“比对本地修改” - 正确做法是:
svn diff -r 12345→ 把本地工作副本与 r12345 做完整比对(等价于-r 12345:WORKING),涵盖新增、修改、删除文件
加 --no-diff-deleted 可忽略已删除文件;加 --summarize 只列出变更文件名和状态(M/A/D)。
3. 更稳妥的替代方案:按日期比对(无需查 revision)
跳过手动查号,直接用日期比对(SVN 支持 ISO 8601 日期格式):
-
svn diff -r "{2024-06-04}":WORKING→ 本地 vs 昨日零点时的仓库状态 -
svn diff -r "{2024-06-04T12:00}":WORKING→ 比对昨日中午以来的修改 - Bash 自动化:
svn diff -r "$(date -d 'yesterday' '+%Y-%m-%d')":WORKING
注意:该方式依赖服务器时区,且比对的是“昨日该时刻仓库快照”,不是“昨日最后一次提交”。多数场景下足够实用。
4. 实用小技巧
让比对更高效:
- 加
--diff-cmd vimdiff(Linux/macOS)或--diff-cmd winmerge.exe(Windows)启用图形化对比工具 - 导出差异到文件:
svn diff -r 12345 > yesterday-changes.patch - 只看特定目录:
svn diff -r 12345 trunk/src/ - 确认当前工作副本基准版本:
svn info | grep "Last Changed Rev",避免误以为本地已更新到最新
不复杂但容易忽略:确保执行前已运行 svn update(可选),否则本地可能缺失他人昨日提交的变更,导致比对结果不完整。











