Yürütülen en son "git çekme" nin tarihini ve saatini nasıl kontrol ederim?


91

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:


28

git showKomut 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.


18
Bu soruya cevap vermiyor - aşağıdaki smoove'un cevabına bakın.
Wilfred Hughes

1
git showen 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.
Stefaan

3
Naçizane size katılmıyorum. Bu soruya cevap veriyor. Size en son çekilme tarihini vermese de, en son çektiğinizde en son yaptığınız işlemin tarihini verir. Orijinal sorudaki kullanım durumu için bu tamamen uygundur. Bir sunucudaki kodu git çekme yoluyla en son ne zaman güncellediğinizi, yani şu anda sunucuda kodun hangi sürümünün bulunduğunu bilmek istiyorsunuz. git showyerel klonunuzun hangi işlemede olduğunu söyler. (Bunun eski olduğunu biliyorum, ama arama yoluyla buraya geldim.)
Dietmar

151
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.


18
OSX'te değiştirilen zamanın Unix zaman damgası:stat -f '%m' .git/FETCH_HEAD
jpillora

18
Git , gerçek getirme / çekmeden önce FETCH_HEAD yazar ... Bu nedenle, çekme başarısız olursa veya iptal edilirse, FETCH_HEAD gerçek depo durumunu temsil etmeyecektir. Bu, özellikle orijinal repo URL'si çalışmadığında sorunludur, çünkü her çekme başarısız olur, ancak FETCH_HEAD her denemede güncellenecektir.
rustyx

9
OS X'te değiştirilme zamanı:stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
Colin vH

7
Uzak daldan gelen değişikliklerle sonuçlandığında .git/refs/heads/masterzaman damgasının hangisinin değişeceğini de kontrol edebilirsiniz , ancak raporlarda değişiklik olmadığında zaman damgası değişmez. git pullmastergit pull
Malvineous

6
Bunu bir komut dosyasında kullanan herkes için: Bir getirme veya çekme henüz yapılmadıysa, FETCH_HEAD henüz mevcut olmayacak ve stat çıkış kodu 1'i döndürecektir.
MajicBob

45

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_HEADiç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.]


3
Bu en kullanışlı cevap!
Arun

1
Sadece bir not. -c, statMac için geçerli bir seçenek değil .
Abel Callejo

10

Çı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 -gyazdı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.


6
git show -1 --stat  

Bu git komutu en son değişiklikleri gösterir saat ve tarihi mesajla kaydeder


3

Python kullanın: python -c "import os;print os.stat('.git/FETCH_HEAD').st_mtime"


biraz biçimlendirmeye ihtiyaç duyar, ancak stat yukarıda açıklanan yollarla çalışmadığı freebsd için tamamen geçerli bir cevap.
Endre

2
python -c "import os, datetime ;print datetime.datetime.fromtimestamp(os.stat('.git/FETCH_HEAD').st_mtime)"

veya

python3 -c "import os, datetime ;print(datetime.datetime.fromtimestamp(os.stat('.git/FETCH_HEAD').st_mtime))"

1

Çapraz Platform (OSX / Linux) Bash Çözümü

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-toplevelsadece bir git deposunda herhangi bir yerdeysem, repo kökünü alır, böylece .gitklasö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

1

İşte küçük bir git sarmalayıcı. Adı gitve haklarıyla yükleyin chmod a+x git. Ardından eklemek last_successful_fetchiç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

0
$ # 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]

-2

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


Fo OSX 10.9.5 Bunu yapmam gerekiyordu: stat -f %Sm .git/FETCH_HEADama benim için iyi çalışıyor gibi görünüyor.
Josh

@ Smoove'un cevabını kendi "cevabınıza" kopyalamak / yapıştırmak yerine yükseltmelisiniz.
bfontaine
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.