代码之家  ›  专栏  ›  技术社区  ›  Chirag Patel

如何检查最近执行的“git pull”的日期和时间?

  •  77
  • Chirag Patel  · 技术社区  · 15 年前

    我怎么检查最近的日期和时间 git pull 那是被处决的?我经常需要知道当服务器上的代码发生错误时,什么时候发生了变化。

    10 回复  |  直到 6 年前
        1
  •  20
  •   Greg Hewgill    15 年前

    这个 git show 命令显示最近提交的日期。这不是将提交拉到本地存储库的日期,但Git不保留此类拉取信息。

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

    ls -lct
    

    显示每个文件的CTIME,按最新的第一个文件排序。

        2
  •  122
  •   smoove    13 年前
    stat -c %Y .git/FETCH_HEAD
    

    将为您提供该文件最后一次修改的Unix时间戳。 每次你拉或取的时候,git都会写一个fetch-head文件,即使没有要拉的东西。

        3
  •  27
  •   Starman    8 年前

    有预感,我尝试了“stat-c%y.git/fetch-head”,得到了一份人类可读的打印输出时间:

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

    此外,您还可以添加 when = !stat -c %y .git/FETCH_HEAD [alias] 您的~/.gitconfig文件中的部分(通过在任何git repo中运行以下命令行来自动执行此操作是最安全的)

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

    然后,您可以随时通过新的“命令”找到此信息:

    > git when
    2015-02-23 15:07:53.086254218 -0500
    

    [然后我突然想到要做“man stat”,我发现“stat”程序还有许多其他的%参数可用。YMMV.

        4
  •  9
  •   araqnid    15 年前

    在非裸机存储库中(裸机存储库对于 git pull )Git在“reflogs”中记录对分支提示和当前分支想法的所有更改。 .git/logs . 您可以使用 git log -g .

    但是,尽管日志文件确实有时间戳,但似乎没有 GIT日志-G 会打印出来。不过,如果你看看 .git/logs/HEAD 例如,您将看到格式很容易解析——它由REF(或HEAD)的更改、更改为、更改者、更改时间和活动消息组成。

        5
  •  2
  •   sachin_ur    6 年前
    git show -1 --stat  
    

    这个git命令用消息显示最新的更改提交时间和日期。

        6
  •  1
  •   widerin    10 年前

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

        7
  •  1
  •   RedEyed    6 年前
    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))"
    
        8
  •  0
  •   1.61803    7 年前
    $ # 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
  •   Josh Peak    6 年前

    跨平台(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

    msys 用于Windows的Git-Bash版本的工作方式与Linux版本相同。

    我正在将跨平台选项编译成一个案例陈述。因此,它将在我导航到的任何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
  •   Vineet Gupta    7 年前

    如用户建议: https://stackoverflow.com/users/83646/smoove ,通过检查修改时间戳:.git/fetch-head as:git在每次提取或提取时写入.git/fetch-head文件,可以找到上次在回购上调用git pull的时间,即使没有要提取的内容。

    例子: master_vinegupt@bhling69(/ims git_local/work/vinegupt/ims_18.5a/ims_common)$stat-c%y.git/fetch_head

    2018年2月12日02:01:50.487160386+0530