如何确定何时创建git ref?

时间:2016-08-01 18:35:33

标签: git

这不是你认为的问题。

我想知道何时创建了特定的ref。我不想知道作者的时间戳或提交者时间戳是什么。

例如:如果我从一个更新我的本地仓库的远程仓库中提取,我想检索创建本地仓库报价的时间戳。

[remote-host]$ git show --format='%H %cD' refs/heads/master
25f2508a379adf2f8aa264afe6f7e5046943274a Mon, 1 Aug 2016 11:33:12 -0700

[remote-host]$ logout
Connection to remote-host closed.
[local-host]$ git fetch
remote: Counting objects: 165073, done
remote: Finding sources: 100% (1836/1836)
remote: Total 1836 (delta 484), reused 1374 (delta 484)
Receiving objects: 100% (1836/1836), 4.10 MiB | 0 bytes/s, done.
Resolving deltas: 100% (484/484), completed with 262 local objects.
...
[local-host]$ git show --format='%H %cD' 25f2508a379adf2f8aa264afe6f7e5046943274a
25f2508a379adf2f8aa264afe6f7e5046943274a Mon, 1 Aug 2016 11:33:12 -0700

[local-host]$ date
Mon Aug  1 11:50:44 PDT 2016

我想要的输出是Mon Aug 1 11:50:44 PDT 2016(即获取的时间),而不是远程和本地主机上正确相同的提交者日期。

我想过使用git reflog,但该命令的输出奇怪地没有任何时间戳信息。

2 个答案:

答案 0 :(得分:1)

我不认为git跟踪您正在寻找的信息,我认为这更准确地描述为"在我的本地系统上创建blob的日期&#34 ;。

你可以:

  • 首先查找带有匹配内容哈希的松散blob,如果找到它,假设该blob的mtime是在系统上创建的时间(因为它不应该&# 39;由任何后续操作修改):

    cid=25f2508a379adf2f8aa264afe6f7e5046943274a
    if test -f .git/objects/${cid:0:2}/${cid:2}; then
      ls -l .git/objects/${cid:0:2}/${cid:2}
    fi
    
  • 如果您找不到松散的对象,请查看您的包文件以查找相应的内容ID,如果找到它,则假定相应包文件的mtime为日期你想要的:

    for idx in .git/objects/pack/*.idx; do
      if git show-index < $idx | grep $cid; then
        ls -l ${idx/idx/pack}
        break
      fi
    done
    

答案 1 :(得分:-1)

使用--date=short--date=relative / --relative-date(或实际上任何日期指令)将显示reflog条目本身的时间戳,而不是提交的时间戳,在{...}部分内:

$ git reflog torturetest --date=relative
8bb1189 torturetest@{3 days ago}: branch: Created from HEAD
$ git reflog torturetest --date=default
8bb1189 torturetest@{Fri Jul 29 00:17:04 2016 -0700}: branch: Created from HEAD

这个问题的主要问题是不能保证Created from条目存在:它可能永远不会被放入reflog中,或者它可能已经过期。