Как проверить дату и время последнего 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