如何查看执行的最新`git pull`的日期和时间?

时间:2010-06-07 23:34:39

标签: git git-pull

如何查看已执行的最新git pull的日期和时间?当出现问题时,我经常需要知道服务器上的代码何时发生了变化。

11 个答案:

答案 0 :(得分:126)

stat -c %Y .git/FETCH_HEAD

将为您提供该文件最后修改的unix时间戳。 每次拉或取时,Git都会写入FETCH_HEAD文件,即使没有任何东西可以拉动。

答案 1 :(得分:30)

在预感中,我尝试了#34; stat -c%y .git / FETCH_HEAD",并获得了人类可读的时间打印输出:

> stat -c %y .git/FETCH_HEAD
2015-02-24 17:42:08.072094410 -0500

此外,您可以添加 {~1}}到〜/ .gitconfig文件中的when = !stat -c %y .git/FETCH_HEAD部分(通过在任何git仓库中运行以下命令行自动执行此操作)

[alias]

然后您可以随时使用新的"命令"找到此信息:

git config --global alias.when '!stat -c %y .git/FETCH_HEAD'

[然后我发生了" man stat",我发现有很多其他%参数可用于' stat'程序。 YMMV。]

答案 2 :(得分:20)

git show命令显示最近提交的日期。这不是提交被提取到本地存储库的日期,但是Git没有保留这样的提取信息。

您可以使用服务器上文件的ctime(创建时间)找到最后一次拉动的时间。例如:

ls -lct

显示每个文件的ctime,使用最近的第一个文件进行排序。

答案 3 :(得分:9)

在非裸存储库中(并且裸存储库对git pull没有意义),git会在.git/logs中的“reflogs”中记录对分支提示和当前分支构思的所有更改。您可以使用git log -g

查看这些内容

但是,虽然日志文件确实有时间戳,但git log -g似乎不会打印它。但是,如果您查看.git/logs/HEAD例如,您将看到该格式非常简单,它可以解析ref(或HEAD)的变化,更改为,更改者,何时更改和活动信息。

答案 4 :(得分:2)

git show -1 --stat  
  

此git命令显示最新更改,并通过消息

提交时间和日期。

答案 5 :(得分:1)

使用python:python -c "import os;print os.stat('.git/FETCH_HEAD').st_mtime"

答案 6 :(得分:1)

python -c "import os, datetime ;print datetime.datetime.fromtimestamp(os.stat('.git/FETCH_HEAD').st_mtime)"

python3 -c "import os, datetime ;print(datetime.datetime.fromtimestamp(os.stat('.git/FETCH_HEAD').st_mtime))"

答案 7 :(得分:1)

这是一个小的git包装器。以名称git和权限chmod a+x git安装它。然后将last_successful_fetch添加到.git/info/exclude

要查看结果时,请使用stat last_successful_fetch

#!/bin/sh

# This script just invokes git as expected, plus one additional action:
# If there stands last_successful_fetch in .git/info/exclude, then
# this file will be touched in top dir.

"`which --all git | uniq | head -n 2 | tail -n 1`" "$@"
status=$?

if [ _"$1" = _pull -o _"$1" = _fetch ]; then
    if grep last_successful_fetch "`git rev-parse --git-dir`/info/exclude" >/dev/null 2>&1; then
        [ $status = 0 ] && touch last_successful_fetch
    fi
fi

答案 8 :(得分:0)

$ # for the latest pull even if there's nothing new
$ stat -c %y .git/FETCH_HEAD
2017-12-15 11:24:25.000000000 +0100
$ 
$ # for records of updated references
$ git reflog --date=iso
db2bba84 (HEAD -> master, origin/master, origin/HEAD) HEAD@{2017-12-14 11:28:39 +0100}: pull: Fast-forward
37fe73ad HEAD@{2017-12-03 17:09:32 +0100}: pull: Fast-forward
c4107fcd HEAD@{2017-11-27 18:53:40 +0100}: clone: from https://github.com/macports/macports-base
$ 
$ # for a more detailed view of the latter
$ git log -g
commit db2bba84d5e8cd82ec94a19129deb91ef62287bb (HEAD -> master, origin/master, origin/HEAD)
Reflog: HEAD@{0} (me <me@machine.local>)
Reflog message: pull: Fast-forward
Author: Ryan Schmidt <ryandesign@macports.org>
Date:   Wed Dec 13 10:23:47 2017 -0600

    portutil.tcl: Fix renames that supply the -force option

    Treat $options as a list not as a string.

    See: https://trac.macports.org/ticket/55492

[snip]

答案 9 :(得分:0)

跨平台(OSX / Linux)Bash解决方案

受到@smooves答案:https://stackoverflow.com/a/9229377/622276和评论的启发。

但是我正在维护自己的bash prompt git integration

来源在这里: https://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_prompt.sh

Windows的Git Bash中的

msys版本与Linux版本相同。

我正在将跨平台选项编译成一个case语句。因此,它将在我导航到的任何git存储库中派生一个获取过程,该过程比上次获取早了15分钟,因此其余的提示脚本知道我是否有东西要拉。

Git radar习惯于此操作,但是它需要保存一个带有最后一次调用时间的时间戳记的文件。这不会写入任何临时文件。

git rev-parse --show-toplevel仅表示如果我在git仓库中的任何地方,它将获得仓库的根目录,因此我们可以引用.git文件夹路径。

# No repo == no more work 
local REPO_ROOT=`git rev-parse --show-toplevel 2> /dev/null`
if [[ -n $REPO_ROOT && -e "$REPO_ROOT/.git/FETCH_HEAD" ]]; then

    case $OSTYPE in
      darwin*)
        local LAST_FETCH="$(stat -f '%m' $REPO_ROOT/.git/FETCH_HEAD)" 
        local FETCH_THRESHOLD="$(date -v-15m +%s)"  
      ;;
      *)
        local LAST_FETCH="$(stat -c %Y $REPO_ROOT/.git/FETCH_HEAD)" 
        local FETCH_THRESHOLD="$(date -d'15 minutes ago' +%s)"  
      ;;
    esac

    # Fork fetch process in background
    if [[ $LAST_FETCH -lt $FETCH_THRESHOLD ]]; then
      git fetch --all --quiet --prune 2> /dev/null &
    fi

fi

答案 10 :(得分:-1)

根据用户的建议:https://stackoverflow.com/users/83646/smoove,您可以通过检查以下内容的修改时间戳:.git / FETCH_HEAD来找到最后一次调用git pull的时间:git每次都写入.git / FETCH_HEAD文件拉或取,即使没有什么可拉。

实施例: {master} vinegupt @ bhling69(/imsgit_local/work/vinegupt/ims_18.5a/ims_common) $ stat -c%y .git / FETCH_HEAD

2018-02-12 02:01:50.487160386 +0530