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

如何一次性获取Git指定文件夹所有文件创建时间及Python调用方法

批量获取Git仓库指定文件夹下文件创建时间方案

原生Git命令实现

你之前使用的单文件查询命令逻辑正确,批量查询可通过遍历指定目录下Git跟踪的文件列表,逐个匹配首次提交记录实现,可直接在终端执行以下命令:

# 将<目标文件夹路径>替换为需要查询的实际目录,支持相对路径/绝对路径
git ls-files <目标文件夹路径> | while read file; do
  create_time=$(git log --diff-filter=A --follow --format=%aD -- "$file" | tail -1)
  echo "$create_time | $file"
done

命令逻辑说明:

  • git ls-files 仅拉取指定目录下被Git纳入版本跟踪的文件列表,自动过滤未跟踪的本地临时文件
  • 逐文件读取后复用单文件查询逻辑,--diff-filter=A 仅匹配文件首次添加的提交记录,--follow 会跟踪文件重命名历史,避免把重命名操作误判为文件创建时间
  • 默认输出RFC2822格式的时间,若需要更易程序解析的格式,可将%aD替换为%aI(带时区的ISO8601标准格式)或%at(Unix时间戳)

Python脚本实现

直接使用Python标准库subprocess调用Git命令即可,无需安装第三方依赖,示例代码如下:

import subprocess
from pathlib import Path

def get_dir_git_create_time(target_dir: str | Path):
    """
    查询指定目录下所有Git跟踪文件的首次提交创建时间
    :param target_dir: 待查询的目标文件夹路径
    :return: 字典结构,key为文件相对仓库根目录的路径,value为ISO8601格式的创建时间
    """
    target_dir = str(Path(target_dir).resolve())
    # 获取目标目录下所有Git跟踪文件列表
    ls_proc = subprocess.run(
        ["git", "ls-files", target_dir],
        capture_output=True,
        text=True,
        check=True
    )
    file_list = [line.strip() for line in ls_proc.stdout.splitlines() if line.strip()]
    create_time_map = {}
    for file_path in file_list:
        # 查询单个文件的首次提交记录
        log_proc = subprocess.run(
            ["git", "log", "--diff-filter=A", "--follow", "--format=%aI", "--", file_path],
            capture_output=True,
            text=True,
            check=True
        )
        # 取最后一条记录即为文件最早创建时间
        create_time_map[file_path] = log_proc.stdout.splitlines()[-1].strip()
    return create_time_map

# 调用示例
if __name__ == "__main__":
    time_map = get_dir_git_create_time("./src")  # 替换为实际目标目录
    for file_path, create_time in time_map.items():
        print(f"{create_time} | {file_path}")

使用注意:

  • 脚本默认在当前工作目录识别Git仓库,若需要指定仓库位置,可在所有subprocess.run调用中传入cwd="你的仓库根目录路径"参数
  • 若不需要跟踪文件重命名历史,可删除命令中的--follow参数,大幅提升大仓库的查询速度
  • 若需要Unix时间戳格式结果,将--format=%aI替换为--format=%at,读取结果后转整数即可使用

内容的提问来源于stack exchange,提问作者Dhanush Amruth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:39:28