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

在GitHub Actions中获取仓库文件创建时间的可行性确认

结论:你的推理完全正确

当GitHub Action运行时,仓库代码会被克隆到Docker容器的文件系统中,这个过程会生成全新的文件副本——副本的创建时间就是它被写入容器的时间,和原仓库中文件的实际创建时间完全无关。用Python的os.path.getctime()或类似方法拿到的,必然是容器内的复制时间,而非你需要的原仓库时间。

替代方案:通过Git提交记录获取真实时间

仓库中文件的"实际创建时间"本质上是它首次被提交到Git仓库的时间,你可以通过Git命令来获取这个时间,再在Python脚本中调用这些命令实现。

获取文件首次提交时间(即仓库内创建时间)

以下是Python脚本示例,通过调用git log命令获取文件的首次提交时间:

import subprocess
from datetime import datetime

def get_git_file_creation_time(file_path):
    try:
        # 执行git log命令,获取所有提交的时间戳(倒序)
        log_output = subprocess.check_output(
            ["git", "log", "--follow", "--format=%at", "--", file_path],
            text=True,
            stderr=subprocess.STDOUT
        )
        # 拆分时间戳列表,取最后一个(最早的提交)
        timestamps = log_output.strip().split("\n")
        if not timestamps:
            return None
        first_commit_timestamp = int(timestamps[-1])
        return datetime.fromtimestamp(first_commit_timestamp)
    except subprocess.CalledProcessError:
        # 文件不存在或无提交记录时返回None
        return None

# 使用示例
target_file = "your_file.py"
creation_time = get_git_file_creation_time(target_file)
if creation_time:
    print(f"文件在仓库中的创建时间:{creation_time}")
else:
    print(f"无法获取文件 {target_file} 的创建时间")

获取文件最后修改时间(仓库内最新提交时间)

如果需要文件的最后修改时间,可简化命令:

def get_git_file_last_modified_time(file_path):
    try:
        timestamp = subprocess.check_output(
            ["git", "log", "-1", "--format=%at", "--", file_path],
            text=True,
            stderr=subprocess.STDOUT
        ).strip()
        return datetime.fromtimestamp(int(timestamp))
    except subprocess.CalledProcessError:
        return None

注意事项

  • GitHub Action的运行环境默认已经完成仓库克隆,无需额外执行git clone操作,可直接调用Git命令。
  • --follow参数用于追踪文件重命名历史,如果文件曾被重命名,仍能正确获取首次提交时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:37:44