Как проверить дату и время последнего запуска `git pull`, который был выполнен?

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

Ответ 1

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

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

ls -lct

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

Ответ 2

stat -c %Y .git/FETCH_HEAD

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

Ответ 3

По подозрению, я попробовал "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.]

Ответ 4

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

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

Ответ 5

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

Ответ 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))"

Ответ 7

$ # for the latest pull even if there 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) [email protected]{2017-12-14 11:28:39 +0100}: pull: Fast-forward
37fe73ad [email protected]{2017-12-03 17:09:32 +0100}: pull: Fast-forward
c4107fcd [email protected]{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: [email protected]{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]

Ответ 8

git show -1 --stat  

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

Ответ 9

Для текущей ветки вы можете получить даты всех команд git pull вы выполнили, выполнив следующие действия:

$ for i in $(cat .git/logs/refs/heads/<YOUR_BRANCH_NAME_HERE> | grep pull | awk '{print $5}');do date [email protected]$i; done

Примечание. Аргумент awk может меняться в зависимости от версии git. Этот awk arg работает для git версии 1.8.3.1.

Ответ 10

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

Вдохновленный ответом @smooves: fooobar.com/questions/91012/... и комментариями.

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

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

Версия msys в Git Bash для Windows работает идентично версии 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

Ответ 11

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