Как проверить дату и время последнего выполненного `git pull`? - PullRequest
82 голосов
/ 08 июня 2010

Как проверить дату и время последнего git pull, который был выполнен?Мне часто нужно знать, когда код изменился на сервере, когда что-то пошло не так.

Ответы [ 10 ]

129 голосов
/ 10 февраля 2012
stat -c %Y .git/FETCH_HEAD

Предоставит вам метку времени Unix последней модификации этого файла. Git записывает файл FETCH_HEAD каждый раз, когда вы извлекаете или извлекаете, даже если нечего было извлекать.

30 голосов
/ 25 февраля 2015

Я догадался, что я попробовал "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-репо)

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

20 голосов
/ 08 июня 2010

Команда git show показывает дату самой последней фиксации. Это не дата, когда фиксация была перенесена в локальный репозиторий, но Git не хранит такую ​​информацию извлечения.

Вы можете найти время последнего извлечения, используя ctime (время создания) файлов на сервере. Например:

ls -lct

показывает ctime каждого файла, отсортированного с самым последним первым.

9 голосов
/ 08 июня 2010

В не пустом хранилище (а пустое хранилище не имеет смысла для git pull), git регистрирует все изменения в подсказках веток и текущей идее ветвления в "reflogs", в .git/logs. Вы можете просмотреть их, используя git log -g.

Однако, хотя файлы журнала имеют временные метки, не похоже, что git log -g напечатает их. Однако, если вы посмотрите, например, на .git/logs/HEAD, вы увидите, что формат довольно прост для анализа - он состоит из того, с чего изменился ref (или HEAD), изменился на, кто его изменил, когда и сообщение об активности.

2 голосов
/ 16 октября 2018
git show -1 --stat  

Эта команда git показывает последние изменения, фиксирующие время и дату, с сообщением

1 голос
/ 10 октября 2018
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))"
1 голос
/ 22 марта 2015

Использовать питона: python -c "import os;print os.stat('.git/FETCH_HEAD').st_mtime"

0 голосов
/ 19 января 2019

Кроссплатформенное (OSX / Linux) Bash Solution

Сильно вдохновлен @smooves ответом: https://stackoverflow.com/a/9229377/622276 и комментариями.

Но я поддерживаю собственную интеграцию gash с приглашением bash

С источником здесь: https://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_prompt.sh

msys версия в Git Bash для Windows работает идентично версии linux.

Я собираю кроссплатформенные опции в инструкцию case. Таким образом, он будет обрабатывать процесс извлечения для любого 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
0 голосов
/ 13 февраля 2018

По предложению пользователя: 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

0 голосов
/ 15 декабря 2017
$ # 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]
...