如何根据文件最后修改日期向Git添加未跟踪新文件?
按修改时间筛选暂存Git未跟踪文件的实现方案(Windows环境)
Git本身没有内置按文件系统修改时间筛选未跟踪文件执行git add的原生参数,可结合系统自带的脚本能力实现需求,以下两种方案均可直接使用,不会影响已被Git跟踪的文件状态,也会自动遵守.gitignore规则跳过被忽略的文件。
PowerShell 原生方案(无需额外安装工具)
直接在仓库根目录打开PowerShell执行以下脚本,默认筛选最近30天(1个月)内修改的未跟踪文件执行暂存:
# 获取所有符合忽略规则的未跟踪文件列表 $untrackedList = git ls-files --others --exclude-standard foreach ($file in $untrackedList) { $modifyTime = (Get-Item $file).LastWriteTime # 筛选30天内修改的文件,如需调整时间范围修改AddDays()内的数值即可 if ($modifyTime -gt (Get-Date).AddDays(-30)) { git add $file } }
执行前如果需要预览待暂存的文件名单,可将脚本内的
git add $file替换为Write-Host "待暂存: $file",确认列表无误后再执行实际暂存操作,避免误加不需要的文件。
Git Bash 方案(Git for Windows 自带环境)
如果你平时习惯用Git安装包自带的Bash终端,可直接在仓库根目录执行以下单行命令实现同样效果:
find . -type f -mtime -30 | git ls-files --others --exclude-standard -Z --stdin | xargs -0 git add
命令逻辑说明:
find . -type f -mtime -30:递归遍历当前目录下所有30天内修改过的普通文件git ls-files --others --exclude-standard -Z --stdin:从传入的文件列表里过滤出未被跟踪、且不在.gitignore忽略列表内的文件xargs -0 git add:将过滤后的文件列表传给git add执行暂存
通用注意事项
- 时间阈值可按需调整:需要筛选最近N天修改的文件,就把PowerShell脚本里
AddDays(-30)的30、Bash命令里-mtime -30的30改成对应数值即可 - 所有命令默认递归处理所有子文件夹,不需要手动遍历子目录
- 操作不会修改已被Git跟踪的文件的暂存状态,和你之前查到的仅处理已跟踪文件的方案互不影响
内容的提问来源于stack exchange,提问作者ds_col
相关产品推荐
相关产品推荐

