如何让SVN为本地所有文件设置最后提交日期?
优化方案:无需删除重更即可统一未修改文件的提交时间戳
方法1:强制全量更新(最简单高效)
直接执行以下命令,强制SVN重新处理工作副本中的所有文件(包括未修改的文件),此时use-commit-times=yes的配置会自动将所有文件的时间戳同步为最后提交日期:
svn update --force
该命令不会修改文件内容,仅触发SVN重新同步版本库中的文件元数据(含提交时间),耗时远低于删除后重新更新。
方法2:脚本批量同步时间戳(适合精细化控制)
如果强制更新仍不生效,或你需要精准处理特定文件,可通过脚本遍历未修改文件,利用svn info获取提交时间后手动修改文件时间戳:
Linux/macOS 脚本示例
#!/bin/bash # 遍历当前目录下所有未修改的SVN管理文件 svn status | grep '^ ' | awk '{print $2}' | while read file; do # 提取并转换最后提交时间格式 commit_time=$(svn info "$file" | grep 'Last Changed Date' | awk '{print $4, $5, $6, $7}') # 修改文件的访问和修改时间 touch -d "$commit_time" "$file" done
Windows PowerShell 脚本示例
# 筛选并遍历未修改的SVN文件 svn status | Where-Object { $_ -match '^ ' } | ForEach-Object { $file = $_.Substring(8).Trim() # 提取最后提交时间并转换格式 $infoLine = (svn info $file | Select-String 'Last Changed Date').Line $commitTimeStr = $infoLine -replace 'Last Changed Date: ', '' $commitTime = [DateTime]::ParseExact($commitTimeStr, 'yyyy-MM-dd HH:mm:ss zzz', $null) # 更新文件时间戳 (Get-Item $file).LastWriteTime = $commitTime (Get-Item $file).CreationTime = $commitTime }
补充说明
use-commit-times仅在文件被SVN更新(含强制更新)时生效,强制更新本质是同步版本库元数据而非重新下载文件,因此速度显著优于删除重更。- 脚本方法适合需要排除部分文件的场景,注意仅处理
svn status输出以空格开头的未修改文件,避免覆盖本地修改内容。
内容的提问来源于stack exchange,提问作者Fernando D'Andrea
相关产品推荐
相关产品推荐

