如何在Git中获取指定目录下携带提交日期的文件列表并支持排序?
获取指定目录下带提交日期的文件列表及排序方案
基础查询命令
方案1:包含所有历史提交文件(含已删除)
适合需要追溯该目录下所有历史文件的场景:
git log --pretty=format:"%ci %h" --name-only -- "C:\WORKDIR\REPOS\some_repo\some_folder" | grep -v "^$" | awk 'NF==3 {date=$0; next} {print date, $0}' | sort -u
输出格式示例:2024-05-20 14:30:00 +0800 a1b2c3d C:\WORKDIR\REPOS\some_repo\some_folder/test.txt
方案2:仅展示当前存在的文件
适合只看现有文件最新提交日期的场景,结果更精准:
git ls-files "C:\WORKDIR\REPOS\some_repo\some_folder" | xargs -I {} git log -1 --pretty=format:"%ci {}" -- {}
排序方案
按提交日期排序
ISO格式的日期支持直接自然排序:
# 升序(最早提交的文件在前) git ls-files "C:\WORKDIR\REPOS\some_repo\some_folder" | xargs -I {} git log -1 --pretty=format:"%ci {}" -- {} | sort # 降序(最新提交的文件在前) git ls-files "C:\WORKDIR\REPOS\some_repo\some_folder" | xargs -I {} git log -1 --pretty=format:"%ci {}" -- {} | sort -r
按文件名排序
指定从第4个字段(前3个为日期、时间、时区)开始排序即可:
# 升序(按文件名A-Z排序) git ls-files "C:\WORKDIR\REPOS\some_repo\some_folder" | xargs -I {} git log -1 --pretty=format:"%ci {}" -- {} | sort -k4 # 降序(按文件名Z-A排序) git ls-files "C:\WORKDIR\REPOS\some_repo\some_folder" | xargs -I {} git log -1 --pretty=format:"%ci {}" -- {} | sort -rk4
Windows PowerShell 兼容方案
如果环境没有grep/awk/xargs工具,可直接使用PowerShell命令:
# 获取当前目录下所有Git跟踪文件+最后提交日期,按提交日期降序 Get-ChildItem "C:\WORKDIR\REPOS\some_repo\some_folder" -File -Recurse | ForEach-Object { $commitDate = git log -1 --pretty=format:%ci -- $_.FullName [PSCustomObject]@{ 提交日期 = $commitDate 文件路径 = $_.FullName } } | Sort-Object 提交日期 -Descending # 按文件名排序只需修改Sort-Object的参数 # | Sort-Object 文件路径
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

