Bagaimana cara memeriksa tanggal dan waktu terbaru git pull
yang dijalankan? Saya sering perlu tahu ketika kode berubah di server ketika terjadi kesalahan.
91
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.)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.
sumber
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 ketikagit pull
hasil dalam perubahan datang darimaster
cabang jarak jauh , tetapi stempel waktu tidak akan berubah ketikagit 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:
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)dan kemudian Anda dapat menemukan info ini dengan "perintah" baru Anda, kapan saja:
[Kemudian saya terpikir untuk melakukan "man stat", dan saya menemukan bahwa ada banyak% parameter lain yang tersedia untuk program 'stat'. YMMV.]
sumber
-c
bukan pilihan yang validstat
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 menggunakangit 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.sumber
sumber
Gunakan python:
python -c "import os;print os.stat('.git/FETCH_HEAD').st_mtime"
sumber
atau
sumber
Solusi Bash Cross Platform (OSX / Linux)
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
sumber
Ini bungkus git kecil. Instal dengan nama
git
dan hakchmod a+x git
. Kemudian tambahkanlast_successful_fetch
ke.git/info/exclude
.Jika ingin melihat hasilnya, gunakan
stat last_successful_fetch
.sumber
sumber
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
sumber
stat -f %Sm .git/FETCH_HEAD
tetapi tampaknya bekerja dengan baik untuk saya.