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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:22:51