Як перевірити дату та час останнього, 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але, здається, це добре для мене працює.