मैं नवीनतम 'गिट पुल' की तारीख और समय की जांच कैसे करूं जिसे निष्पादित किया गया था?


91

मैं git pullनिष्पादित की गई नवीनतम की तारीख और समय की जांच कैसे करूं ? मुझे अक्सर यह जानना होता है कि जब सर्वर में कुछ गलत होता है तो कोड बदल जाता है।

जवाबों:


28

git showआदेश से पता चलता है सबसे हाल ही में की तारीख के लिए प्रतिबद्ध। यह वह तारीख नहीं है, जिस पर स्थानीय रिपॉजिटरी के लिए कमिट की गई थी, लेकिन Git इस तरह की जानकारी नहीं रखता है।

आप सर्वर पर फ़ाइलों के समय (निर्माण समय) का उपयोग करके अंतिम खींचने का समय पा सकते हैं। उदाहरण के लिए:

ls -lct

प्रत्येक फ़ाइल का समय दर्शाता है, सबसे हाल ही में पहले के साथ क्रमबद्ध।


18
इस सवाल का जवाब नहीं है - नीचे smoove का जवाब देखें।
विल्फ्रेड ह्यूजेस

1
git showवर्तमान शाखा के टिप कमेटी की तारीख को दर्शाता है, जो रेपो में हाल की कमिटमेंट के लिए आवश्यक नहीं है, अकेले लेटेस्ट ब्रांच / पुल की तारीख दें। मैं स्मूव के जवाब की जांच करने की भी सलाह देता हूं।
स्टेफान

3
क्षमा करें मैं असहमत हूं। यह प्रश्न का उत्तर देता है। हालांकि यह आपको नवीनतम पुल की तारीख नहीं देता है, लेकिन यह आपको उस प्रतिबद्धता की तारीख देता है जो आपने हाल ही में खींची थी। मूल प्रश्न में उपयोग के मामले के लिए, यह पूरी तरह से उपयुक्त है। आप यह जानना चाहते हैं कि आपने पिछली बार सर्वर पर git पुल के माध्यम से कोड को अपडेट किया था, अर्थात वर्तमान में कोड का कौन सा संस्करण सर्वर पर है। git showआपको बताता है कि आपका स्थानीय क्लोन किस पर है। (मुझे पता है कि यह पुराना है, लेकिन मैं खोज के माध्यम से यहां समाप्त हो गया।)
डिटमार

150
stat -c %Y .git/FETCH_HEAD

आपको उस फ़ाइल के अंतिम संशोधन का यूनिक्स टाइमस्टैम्प देगा। Git हर बार आपके द्वारा खींचे जाने या लाने के लिए FETCH_HEAD फ़ाइल लिखता है, भले ही खींचने के लिए कुछ भी न हो।


17
OSX पर संशोधित समय का यूनिक्स टाइमस्टैम्प:stat -f '%m' .git/FETCH_HEAD
jpillora

18
गिट वास्तविक भ्रूण / पुल से पहले FETCH_HEAD लिखते हैं ... इसलिए यदि पुल विफल हुआ या रद्द कर दिया गया तो FETCH_HEAD वास्तविक रिपॉजिटरी राज्य का प्रतिनिधित्व नहीं करेगा। यह विशेष रूप से समस्याग्रस्त है जब मूल रेपो URL काम नहीं कर रहा है, क्योंकि हर पुल विफल हो जाएगा लेकिन FETCH_HEAD को हर प्रयास पर अपडेट किया जाएगा।
रस्टीक्स

9
OS X पर संशोधित समय की तारीख:stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
कॉलिन vH

7
आप यह भी देख सकते हैं कि दूरस्थ शाखा से आने वाले परिवर्तनों के परिणामस्वरूप .git/refs/heads/masterइसका टाइमस्टैम्प परिवर्तन होगा , लेकिन रिपोर्ट में कोई परिवर्तन नहीं होने पर टाइमस्टैम्प नहीं बदलेगा । git pullmastergit pull
माल्विनस

6
यदि लाए जाने या पुल नहीं किया गया है अभी तक तो FETCH_HEAD अभी तक अस्तित्व में नहीं है और स्टेट से बाहर निकलें कोड 1. वापस आ जाएगी: किसी को भी एक स्क्रिप्ट में इस का उपयोग कर के लिए
MajicBob

45

एक कूबड़ पर, मैंने "स्टेट -c% y .गित / 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

[फिर यह मेरे लिए "मैन स्टैट" करने के लिए हुआ, और मैंने पाया कि 'स्टैट' प्रोग्राम के लिए अन्य% मापदंडों का एक गुच्छा उपलब्ध है। YMMV।]


3
यह सबसे उपयोगी उत्तर है!
अरुण

सिर्फ एक नोट। मैक -cके statलिए एक वैध विकल्प नहीं है ।
हाबिल कैलेजो

10

गैर-नंगे रिपॉजिटरी में (और नंगे रिपॉजिटरी के लिए कोई मतलब नहीं है git pull), git सभी सुझावों को ब्रांच टिप्स और "रिफ्लॉग्स" में करंट ब्रांच आइडिया में लॉग करता है .git/logs। आप इनका उपयोग करके देख सकते हैं git log -g

हालाँकि, हालांकि लॉग फ़ाइलों में टाइमस्टैम्प हैं, लेकिन यह प्रकट नहीं होता है कि git log -gयह प्रिंट करेगा। हालाँकि, यदि आप .git/logs/HEADउदाहरण के लिए एक नज़र डालते हैं, तो आप देखेंगे कि प्रारूप को पार्स करने के लिए काफी सरल है- इसमें रेफ (या HEAD) से क्या बदला, किससे बदला, कब और किस गतिविधि संदेश में बदल गया।


6
git show -1 --stat  

यह git कमांड संदेश के साथ समय और दिनांक के नवीनतम परिवर्तनों को दिखाता है


3

अजगर का उपयोग करें: python -c "import os;print os.stat('.git/FETCH_HEAD').st_mtime"


कुछ स्वरूपण की आवश्यकता है, लेकिन फ्रीबल्ड के लिए एक पूरी तरह से मान्य उत्तर जहां स्टेटमेंट ऊपर वर्णित तरीकों से काम नहीं करता है।
एंड्रे

2
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))"

1

क्रॉस प्लेटफ़ॉर्म (OSX / Linux) बैश सॉल्यूशन

भारी @smoovesजवाब से प्रेरित : https://stackoverflow.com/a/9229377/622276 और टिप्पणियाँ।

लेकिन मैं अपना बैश प्रॉम्प्ट गिट इंटीग्रेशन बनाए हुए हूं

यहाँ स्रोत के साथ: https://github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_prompt.sh

msys Windows के लिए Git Bash में संस्करण लिनक्स संस्करण के समान काम करता है।

मैं एक केस स्टेटमेंट में क्रॉस प्लेटफॉर्म विकल्पों का संकलन कर रहा हूं। तो यह किसी भी 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

1

यहाँ एक छोटा सा आवरण है। नाम के 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

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

जैसा कि उपयोगकर्ता द्वारा सुझाया गया है: https://stackoverflow.com/users/83646/smoove , आप पा सकते हैं जब गिट पुल को रेपो पर पिछली बार संशोधन के टाइमस्टैम्प की जाँच करके बुलाया गया था। FETCH_HEAD फ़ाइल हर बार जब आप खींचते हैं या लाते हैं, भले ही खींचने के लिए कुछ भी न हो।

उदाहरण: {मास्‍टर} सिरकाटु @ bhling69 (/imsgit_local/work/vinegupt/ims_18.5a/ims_common) $ stat -c% y .गित / FETCH_HEAD।

2018-02-12 02: 01: 50.487160386 +0530


Fo OSX 10.9.5 मुझे यह करने की आवश्यकता थी: stat -f %Sm .git/FETCH_HEADलेकिन मेरे लिए अच्छा काम करता है।
जोश

आपको कॉपी / पेस्ट करने के बजाय अपने स्वयं के "उत्तर" में @ smoove के उत्तर को upvote करना चाहिए।
bfontaine
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.