En son gerçekleştirilen tarih ve saati nasıl kontrol ederim git pull
? Bir şeyler ters gittiğinde sunucuda kodun ne zaman değiştiğini sık sık bilmem gerekiyor.
En son gerçekleştirilen tarih ve saati nasıl kontrol ederim git pull
? Bir şeyler ters gittiğinde sunucuda kodun ne zaman değiştiğini sık sık bilmem gerekiyor.
Yanıtlar:
git show
Komut gösterileri En son tarihini işlemek. Bu işlemin yerel depoya çekildiği tarih değildir, ancak Git bu tür çekme bilgilerini saklamaz.
Sunucudaki dosyaların c zamanını (oluşturma zamanı) kullanarak son çekmenin zamanını bulabilirsiniz. Örneğin:
ls -lct
en yenisi ilk sırada olacak şekilde her dosyanın c zamanını gösterir.
git show
en son getirme / çekme tarihini bırakın, repodaki en son commit için gerekli olmayan mevcut şubenin ipucu commit tarihini gösterir. Ayrıca smoove'un cevabını da kontrol etmenizi tavsiye ederim.
git show
yerel klonunuzun hangi işlemede olduğunu söyler. (Bunun eski olduğunu biliyorum, ama arama yoluyla buraya geldim.)
stat -c %Y .git/FETCH_HEAD
Size o dosyanın son değişikliğinin bir unix zaman damgası verecektir. Git, FETCH_HEAD dosyasını her çektiğinizde veya getirdiğinizde, çekecek bir şey olmasa bile yazar.
stat -f '%m' .git/FETCH_HEAD
stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
.git/refs/heads/master
zaman damgasının hangisinin değişeceğini de kontrol edebilirsiniz , ancak raporlarda değişiklik olmadığında zaman damgası değişmez. git pull
master
git pull
Bir önseziyle "stat -c% y .git / FETCH_HEAD" denedim ve insan tarafından okunabilir bir çıktı aldım:
> stat -c %y .git/FETCH_HEAD
2015-02-24 17:42:08.072094410 -0500
Ayrıca, ekleyebilir
when = !stat -c %y .git/FETCH_HEAD
için [alias]
sizin ~ / .gitconfig dosyasında bölüm (herhangi git repo aşağıdaki komut satırını çalıştırarak otomatik olarak yapmak için en güvenli)
git config --global alias.when '!stat -c %y .git/FETCH_HEAD'
ve sonra bu bilgileri yeni "komutunuzla" istediğiniz zaman bulabilirsiniz:
> git when
2015-02-23 15:07:53.086254218 -0500
[Sonra "man stat" yapmak aklıma geldi ve "stat" programı için kullanılabilen bir sürü başka% parametresi olduğunu öğrendim. YMMV.]
-c
, stat
Mac için geçerli bir seçenek değil .
Çıplak olmayan bir depoda (ve çıplak bir depo bunun için bir anlam ifade etmez git pull
), git dal ipuçlarındaki tüm değişiklikleri ve "yeniden günlükler" içindeki geçerli dal fikrini günlüğe kaydeder .git/logs
. Bunları kullanarak görüntüleyebilirsiniz git log -g
.
Ancak, günlük dosyalarının zaman damgaları olmasına rağmen, onu git log -g
yazdıracak gibi görünmüyor . Bununla birlikte, .git/logs/HEAD
örneğin, bir bakarsanız , biçimin ayrıştırmanın oldukça basit olduğunu göreceksiniz - bu, ref (veya HEAD) neyin değiştiği, değiştiği, kim tarafından değiştirildiği, ne zaman değiştirildiği ve bir etkinlik mesajından oluşur.
Python kullanın: python -c "import os;print os.stat('.git/FETCH_HEAD').st_mtime"
Yanıttan büyük ölçüde ilham aldı @smooves
: https://stackoverflow.com/a/9229377/622276 ve yorumlar.
Ama kendi bash hızlı entegrasyonumu sürdürüyorum
Buradaki kaynakla: https://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_prompt.sh
msys
Windows için Git Bash'deki sürüm, linux sürümüyle aynı şekilde çalışır.
Çapraz platform seçeneklerini bir vaka bildiriminde derliyorum. Bu yüzden, son getirmeden bu yana on beş dakikadan daha eski olan herhangi bir git deposuna bir getirme işlemi çatallayacak, böylece komut istemi betiğimin geri kalanı çekecek şeylerim olup olmadığını bilir.
Git radarı buna alıştı, ancak son getirmenin ne zaman çağrıldığına dair zaman damgası olan bir dosyayı kaydetmeyi gerektiriyordu. Bu hiçbir geçici dosya yazmaz.
git rev-parse --show-toplevel
sadece bir git deposunda herhangi bir yerdeysem, repo kökünü alır, böylece .git
klasör yoluna başvurabiliriz .
# 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
İşte küçük bir git sarmalayıcı. Adı git
ve haklarıyla yükleyin chmod a+x git
. Ardından eklemek last_successful_fetch
için .git/info/exclude
.
Sonucu görmek istediğinizde kullanın 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]
Kullanıcının önerdiği gibi: https://stackoverflow.com/users/83646/smoove , git pull'un repo üzerinde en son ne zaman çağrıldığını şu şekilde değişiklik zaman damgasını kontrol ederek bulabilirsiniz: .git / FETCH_HEAD as: git .git / FETCH_HEAD dosyasını her çektiğinizde veya getirdiğinizde, çekecek bir şey olmasa bile.
Örnek: {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
ama benim için iyi çalışıyor gibi görünüyor.