Bagaimana cara memeriksa tanggal dan waktu terbaru git pull
yang dijalankan? Saya sering perlu tahu ketika kode berubah di server ketika terjadi kesalahan.
Bagaimana cara memeriksa tanggal dan waktu terbaru git pull
yang dijalankan? Saya sering perlu tahu ketika kode berubah di server ketika terjadi kesalahan.
Jawaban:
The git show
perintah menunjukkan tanggal terbaru komit. Ini bukanlah tanggal di mana komit ditarik ke repositori lokal, tetapi Git tidak menyimpan informasi tarik tersebut.
Anda mungkin dapat menemukan waktu penarikan terakhir menggunakan ctime (waktu pembuatan) file di server. Sebagai contoh:
ls -lct
menunjukkan waktu setiap file, diurutkan dengan yang terbaru terlebih dahulu.
git show
menunjukkan tanggal komit tip dari cabang saat ini, yang tidak perlu komit terbaru dalam repo, apalagi tanggal pengambilan / penarikan terbaru. Saya juga merekomendasikan untuk memeriksa jawaban smoove.
git show
memberi tahu Anda di mana tempat klon lokal Anda berada. (Saya tahu ini sudah tua, tapi saya berakhir di sini melalui pencarian.)
stat -c %Y .git/FETCH_HEAD
Akan memberi Anda stempel waktu unix dari modifikasi terakhir file itu. Git menulis file FETCH_HEAD setiap kali Anda menarik atau mengambil, bahkan jika tidak ada yang menarik.
stat -f '%m' .git/FETCH_HEAD
stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
.git/refs/heads/master
stempel waktunya yang akan berubah ketika git pull
hasil dalam perubahan datang dari master
cabang jarak jauh , tetapi stempel waktu tidak akan berubah ketika git pull
laporan tidak ada perubahan.
Sebuah firasat, saya mencoba "stat -c% y .git / FETCH_HEAD", dan mendapatkan hasil cetakan yang dapat dibaca manusia pada waktunya:
> stat -c %y .git/FETCH_HEAD
2015-02-24 17:42:08.072094410 -0500
Selanjutnya, Anda dapat menambahkan
when = !stat -c %y .git/FETCH_HEAD
ke [alias]
bagian dalam ~ / .gitconfig berkas (itu paling aman untuk melakukan ini secara otomatis dengan menjalankan baris perintah berikut dalam git repo)
git config --global alias.when '!stat -c %y .git/FETCH_HEAD'
dan kemudian Anda dapat menemukan info ini dengan "perintah" baru Anda, kapan saja:
> git when
2015-02-23 15:07:53.086254218 -0500
[Kemudian saya terpikir untuk melakukan "man stat", dan saya menemukan bahwa ada banyak% parameter lain yang tersedia untuk program 'stat'. YMMV.]
-c
bukan pilihan yang valid stat
untuk Mac.
Dalam repositori non-bare (dan repositori kosong tidak masuk akal git pull
), git mencatat semua perubahan pada tip cabang dan ide cabang saat ini dalam "reflogs", di .git/logs
. Anda dapat melihatnya menggunakan git log -g
.
Namun, meskipun file log memiliki stempel waktu, tampaknya tidak git log -g
akan mencetaknya. Namun, jika Anda perhatikan .git/logs/HEAD
misalnya, Anda akan melihat bahwa formatnya cukup sederhana untuk diurai- ini terdiri dari apa ref (atau HEAD) berubah dari, diubah menjadi, siapa yang mengubahnya, kapan dan pesan aktivitas.
Gunakan python: python -c "import os;print os.stat('.git/FETCH_HEAD').st_mtime"
Sangat terinspirasi oleh @smooves
jawaban: https://stackoverflow.com/a/9229377/622276 dan komentar.
Tapi saya mempertahankan integrasi git prompt bash saya sendiri
Dengan sumbernya di sini: https://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_prompt.sh
msys
versi di Git Bash untuk Windows bekerja sama dengan versi linux.
Saya menyusun opsi lintas platform menjadi pernyataan kasus. Jadi ini akan membagi proses pengambilan pada repo git apa pun yang saya navigasikan yang lebih lama dari lima belas menit sejak pengambilan terakhir sehingga sisa skrip prompt saya tahu apakah saya memiliki sesuatu untuk ditarik.
Radar Git terbiasa dengan ini, tetapi membutuhkan penyimpanan file dengan stempel waktu kapan pengambilan terakhir dipanggil. Ini tidak menulis file sementara.
git rev-parse --show-toplevel
hanya berarti jika saya berada di mana saja di git repo itu akan mendapatkan root repo sehingga kita dapat mereferensikan .git
jalur folder.
# 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
Ini bungkus git kecil. Instal dengan nama git
dan hak chmod a+x git
. Kemudian tambahkan last_successful_fetch
ke .git/info/exclude
.
Jika ingin melihat hasilnya, gunakan 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]
Seperti yang disarankan oleh pengguna: https://stackoverflow.com/users/83646/smoove , Anda dapat mengetahui kapan git pull terakhir kali dipanggil di repo dengan memeriksa stempel waktu modifikasi: .git / FETCH_HEAD sebagai: git menulis .git / FETCH_HEAD setiap kali Anda menarik atau mengambil, meskipun tidak ada yang ditarik.
Contoh: {master} vinegupt @ bhling69 (/imsgit_local/work/vinegupt/ims_18.5a/ims_common) $ stat -c% y .git / FETCH_HEAD
12-02-2018 02: 01: 50.487160386 +0530
stat -f %Sm .git/FETCH_HEAD
tetapi tampaknya bekerja dengan baik untuk saya.