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

发布于 2024-09-04 05:58:52 字数 61 浏览 3 评论 0原文

如何检查最近执行的 git pull 的日期和时间?当出现问题时,我经常需要知道服务器上的代码何时发生更改。

How do I check the date and time of the latest git pull that was executed? I frequently need to know when the code changed on a server when something goes wrong.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(13

关于从前 2024-09-11 05:58:53

在非裸存储库中(裸存储库对于 git pull 没有意义),git 会在 的“reflogs”中记录对分支提示和当前分支想法的所有更改。 git/logs.您可以使用 git log -g 来查看这些内容。

然而,尽管日志文件确实有时间戳,但 git log -g 似乎不会打印它。但是,如果您查看 .git/logs/HEAD 例如,您会发现该格式非常易于解析 - 它由 ref (或 HEAD)更改的内容组成,更改为、谁更改、何时更改以及活动消息。

In a non-bare repository (and a bare repository doesn't make sense for git pull), git logs all changes to branch tips and the current branch idea in "reflogs", in .git/logs. You can view these using git log -g.

However, although the log files do have timestamps, it doesn't appear that git log -g will print it. However, if you take a look at .git/logs/HEAD for example, you'll see that the format is quite simple to parse- it consists of what the ref (or HEAD) changed from, changed to, who changed it, when and an activity message.

死开点丶别碍眼 2024-09-11 05:58:53

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

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

但我正在维护我自己的 bash 提示 git 集成

源代码如下:
https://github.com/neozenith/dotfiles/blob/ Git Bash for Windows 中的master/bash-scripts/function_parse_git_prompt.sh

msys 版本与 Linux 版本的工作方式相同。

我正在将跨平台选项编译成案例陈述。因此,它将在我导航到的任何 git 存储库上分叉一个提取过程,该过程自上次提取以来已超过十五分钟,这样我的提示脚本的其余部分就知道我是否有东西要提取。

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

Cross Platform (OSX/Linux) Bash Solution

Heavily inspired by @smooves answer: https://stackoverflow.com/a/9229377/622276 and comments.

But I am maintaining my own bash prompt git integration

With the source here:
https://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_prompt.sh

msys version in Git Bash for Windows works identical to the linux version.

I'm compiling the cross platform options into a case statement. So it will fork a fetch process on any git repo I navigate into that is older than fifteen minutes since last fetch so the rest of my prompt script knows if I have stuff to pull.

Git radar used to to this but it required saving a file with timestamp of when the last fetch was called. This writes no temporary files.

git rev-parse --show-toplevel just means if I'm anywhere in a git repo it will get the repo root so we can reference the .git folder path.

# 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
浅笑轻吟梦一曲 2024-09-11 05:58:53

使用Python:

$ python3 -c "import os; print(os.stat('.git/FETCH_HEAD').st_mtime)"`
1716489746.8263276

Use Python:

$ python3 -c "import os; print(os.stat('.git/FETCH_HEAD').st_mtime)"`
1716489746.8263276
◇流星雨 2024-09-11 05:58:53
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))"
python -c "import os, datetime ;print datetime.datetime.fromtimestamp(os.stat('.git/FETCH_HEAD').st_mtime)"

or

python3 -c "import os, datetime ;print(datetime.datetime.fromtimestamp(os.stat('.git/FETCH_HEAD').st_mtime))"
篱下浅笙歌 2024-09-11 05:58:53

根据用户的建议:https://stackoverflow.com/users/83646/smoove,您可以找到 git pull 的时间最后通过检查 .git/FETCH_HEAD 的修改时间戳来调用存储库:每次拉取或提取时,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

As suggested by user: https://stackoverflow.com/users/83646/smoove, you can find when git pull was last called on the repo by checking the modification timestamp of: .git/FETCH_HEAD as: git writes the .git/FETCH_HEAD file every time you pull or fetch, even if there was nothing to pull.

Example:
{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

好菇凉咱不稀罕他 2024-09-11 05:58:53

这是一个小的 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

Here's a small git wrapper. Install it with the name git and with rights chmod a+x git. Then add last_successful_fetch to .git/info/exclude.

When you want to see the result, use 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
泪眸﹌ 2024-09-11 05:58:53
$ # 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 <[email protected]>)
Reflog message: pull: Fast-forward
Author: Ryan Schmidt <[email protected]>
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]
$ # 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 <[email protected]>)
Reflog message: pull: Fast-forward
Author: Ryan Schmidt <[email protected]>
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]
甜尕妞 2024-09-11 05:58:53

就我而言,我必须返回以获取倒数第二个拉取(previous-1),因此使用了此 reflog 命令,请注意,reflog 默认在 90 天后过期。希望这对某人有帮助。

 master ± -> git reflog --date=iso|grep pull
67718cc11 HEAD@{2022-01-25 10:14:31 +0530}: pull: Fast-forward
9bb64364a HEAD@{2021-12-13 18:22:17 +0530}: pull: Fast-forward
f5cf7c887 HEAD@{2021-11-29 13:08:14 +0530}: pull: Fast-forward

然后你可以签出该哈希并创建一个分支。 (以下命令中的分离头)

git checkout 9bb64364a 

In my case I had to go back to get the second to last pull (previous-1), so used this reflog command, note that reflogs expire in 90 days by default. Hope this will be helpful to someone.

 master ± -> git reflog --date=iso|grep pull
67718cc11 HEAD@{2022-01-25 10:14:31 +0530}: pull: Fast-forward
9bb64364a HEAD@{2021-12-13 18:22:17 +0530}: pull: Fast-forward
f5cf7c887 HEAD@{2021-11-29 13:08:14 +0530}: pull: Fast-forward

then you can checkout that hash and create a branch. (detached head in below command)

git checkout 9bb64364a 
梦回梦里 2024-09-11 05:58:53

为什么不使用最简单的,

ls -l .git/FETCH_HEAD 

只要它不到 1 岁就可以工作
并且您只需要日期(时间 hh:mm 仅在不到 1 天的情况下显示)

应该适用于任何操作系统(系统)、任何带有任何 shell 的 FS(文件系统)
除非有人在 .git 文件夹中搞砸了

顺便说一句, ls -c 可能会使用状态更改日期时间来排序和/或打印
不是创建日期时间(在某些条件下可能匹配)。
男人ls
-c 使用上次更改文件状态以进行排序或打印的时间。

why not use the simplest

ls -l .git/FETCH_HEAD 

it works as long it's less than 1 year old
and you only need the date (time hh:mm is only displayed if less than 1 day old)

should work on any OS (system), any FS (FileSystem) with any shell
except if someone messes up inside the .git folder

By the way, ls -c may use status change datetime to sort and/or print
not creation datetime (it may matches in some conditions).
man ls
-c Use time when file status was last changed for sorting or printing.

清风挽心 2024-09-11 05:58:52
stat -c %Y .git/FETCH_HEAD

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

stat -c %Y .git/FETCH_HEAD

Will give you a unix timestamp of the last modification of that file.
Git writes the FETCH_HEAD file every time you pull or fetch, even if there was nothing to pull.

烟酉 2024-09-11 05:58:52

凭直觉,我尝试了“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 到 ~/.gitconfig 文件中的 [alias] 部分(通过运行以下命令自动执行此操作是最安全的任何 git 存储库中的命令行)

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。]

On a hunch, I tried "stat -c %y .git/FETCH_HEAD", and got a human-readable printout of the time:

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

Furthermore, you can add
when = !stat -c %y .git/FETCH_HEAD to the [alias] section in your ~/.gitconfig file (it's safest to do this automatically by running the following command line in any git repo)

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

and then you are able to find this info with your new "command", anytime:

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

[Then it occurred to me to do "man stat", and I found that there are a bunch of other % parameters available for the 'stat' program. YMMV.]

じ违心 2024-09-11 05:58:52

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

您也许可以使用服务器上文件的 ctime(创建时间)找到上次拉取的时间。例如:

ls -lct

显示每个文件的 ctime,以最新的在前排序。

The git show command shows the date of the most recent commit. This isn't the date at which the commit was pulled to the local repository, but Git doesn't keep such pull information.

You may be able to find the time of the last pull using the ctime (creation time) of the files on the server. For example:

ls -lct

shows the ctime of each file, sorted with the most recent first.

内心荒芜 2024-09-11 05:58:52
git show -1 --stat  

此 git 命令显示最新更改提交时间和日期以及消息

git show -1 --stat  

This git command shows the latest changes commits time and date with message

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文