Як перевірити дату та час останнього, git pull
що було виконано? Мені часто потрібно знати, коли код змінювався на сервері, коли щось пішло не так.
Як перевірити дату та час останнього, git pull
що було виконано? Мені часто потрібно знати, коли код змінювався на сервері, коли щось пішло не так.
Відповіді:
У git show
команді показує дату самого останньої фіксація. Це не дата, коли коміт було витягнуто до локального сховища, але Git не зберігає таку інформацію про витягування.
Можливо, ви зможете знайти час останнього витягування, використовуючи ctime (час створення) файлів на сервері. Наприклад:
ls -lct
показує ctime кожного файлу, відсортованого за останнім першим.
git show
показує дату коміту чайової поточної гілки, що не є необхідним для останнього коміту в репо, не кажучи вже про дату останнього завантаження / витягування. Я також рекомендую перевірити відповідь Smoove.
git show
повідомляє вам, у якому коміті знаходиться ваш локальний клон. (Я знаю, що це давнє, але я опинився тут через пошук.)
stat -c %Y .git/FETCH_HEAD
Дасть вам мітку часу unix останньої модифікації цього файлу. Git пише файл FETCH_HEAD кожного разу, коли ви тягнете або витягаєте, навіть якщо не було чого тягнути.
stat -f '%m' .git/FETCH_HEAD
stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
.git/refs/heads/master
яка мінятиметься мітка часу, коли в git pull
результаті відбуватимуться зміни, що надходять із віддаленої master
гілки, але мітка часу не змінюватиметься, коли git pull
звітів не буде.
На початку, я спробував "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.]
-c
не є дійсним варіантом stat
для Mac.
У непростому сховищі (а оголене сховище не має сенсу git pull
), git реєструє всі зміни до підказок гілок та поточної ідеї гілки у "перезапису", у .git/logs
. Ви можете переглянути їх за допомогою git log -g
.
Однак, хоча файли журналів мають позначки часу, не видається, що вони git log -g
будуть надруковані. Однак, якщо ви подивитесь, .git/logs/HEAD
наприклад, ви побачите, що формат досить простий для аналізу - він складається з того, що змінив ref (або HEAD), змінив на, хто змінив його, коли та повідомлення про активність.
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))"
Дуже натхненний @smooves
відповіддю: https://stackoverflow.com/a/9229377/622276 та коментарями.
Але я підтримую власну баш оперативну інтеграцію git
З джерелом тут: https://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_prompt.sh
msys
версія в Git Bash для Windows працює ідентично версії Linux.
Я збираю варіанти крос-платформних платформ у заяві. Отже, він буде розгалужувати процес отримання на будь-якому репозиторії git, до якого я переходжу, і який перебуває старше п’ятнадцяти хвилин з моменту останнього завантаження, тому решта мого сценарію підказки знає, чи є у мене щось для витягування.
Радар Git використовував це, але він вимагав збереження файлу з позначкою часу, коли був викликаний останній вибір. Це не пише тимчасових файлів.
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
Ось невеличка обгортка 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
$ # 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]
Як запропонував користувач: 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
stat -f %Sm .git/FETCH_HEAD
але, здається, це добре для мене працює.