আমি কীভাবে সর্বশেষ `গিট পুল` কার্যকর করা হয়েছিল তার তারিখ এবং সময়টি কীভাবে পরীক্ষা করব?


91

আমি git pullযে সর্বশেষ কার্যকর করা হয়েছিল তার তারিখ এবং সময় কীভাবে চেক করব ? যখন কোনও সার্ভারে কিছু ভুল হয়ে যায় তখন আমাকে প্রায়শই কোডটি পরিবর্তন হয় know

উত্তর:


28

git showকমান্ড শো সাম্প্রতিকতম তারিখ কমিট। এটি সেই তারিখ নয় যেখানে স্থানীয় ভান্ডারগুলিতে প্রতিশ্রুতিবদ্ধভাবে টানা হয়েছিল, তবে গিট এই ধরণের তথ্য রাখে না।

আপনি সার্ভারে থাকা ফাইলগুলির সিটিটাইম (তৈরির সময়) ব্যবহার করে শেষ টানার সময়টি সন্ধান করতে পারেন। উদাহরণ স্বরূপ:

ls -lct

সর্বাধিক সাম্প্রতিক প্রথমটির সাথে সাজানো প্রতিটি ফাইলের সিটিটাইম দেখায়।


18
এটি প্রশ্নের উত্তর দেয় না - নীচে স্মুয়ের উত্তর দেখুন।
উইলফ্রেড হিউজেস

4
git showবর্তমান শাখার টিপ কমিটের তারিখটি দেখায়, যা রেপোতে সাম্প্রতিক প্রতিশ্রুতিবদ্ধ হওয়া আবশ্যক নয়, সর্বশেষতম আনতে / টানার তারিখটি ছেড়ে দিন। আমি স্মুওয়ের উত্তর চেক করারও পরামর্শ দিই।
স্টিফ্যান

4
আমি আলাদা করতে অনুরোধ। এটি প্রশ্নের উত্তর দেয়। যদিও এটি আপনাকে সর্বশেষতম টানার তারিখ দেয় না, এটি আপনাকে প্রতিশ্রুতি দেওয়ার তারিখ দেয় যা আপনি সর্বশেষে টানা যখন সবচেয়ে সাম্প্রতিক ছিল। মূল প্রশ্নে ব্যবহারের ক্ষেত্রে এটি পুরোপুরি উপযুক্ত। আপনি জানতে চান কখন আপনি সর্বশেষে গিট টানের মাধ্যমে কোনও সার্ভারে কোডটি আপডেট করেছেন, অর্থাৎ সার্ভারে বর্তমানে কোডটির কোন সংস্করণ রয়েছে। git showআপনার স্থানীয় ক্লোনটি কোনটি প্রতিশ্রুতিবদ্ধ তা আপনাকে জানায়। (আমি জানি এটি পুরানো, তবে আমি অনুসন্ধানের মাধ্যমে এখানেই শেষ করেছি))
ডায়েটমার

151
stat -c %Y .git/FETCH_HEAD

আপনাকে সেই ফাইলটির সর্বশেষ পরিবর্তনের একটি ইউনিক্স টাইমস্ট্যাম্প দেবে। টানানোর মতো কিছু না থাকলেও গিট প্রতিবার টানতে বা আনতে প্রতিবার FETCH_HEAD ফাইলটি লিখে দেয়।


18
stat -f '%m' .git/FETCH_HEAD
ওএসএক্সে

18
গিট আসল আনার / টানার আগে FETCH_HEAD লিখে ... তাই যদি টান ব্যর্থ হয় বা বাতিল হয়ে যায় তবে FETCH_HEAD প্রকৃত সংগ্রহস্থল অবস্থার প্রতিনিধিত্ব করবে না। এটি মূলত সমস্যাযুক্ত যখন মূল রেপো ইউআরএল কাজ না করে, কারণ প্রতিটি টানা ব্যর্থ হবে তবে প্রতিটি চেষ্টায় FETCH_HEAD আপডেট করা হবে।
রুস্টেক্স

9
ওএস এক্স-এ পরিবর্তিত সময়ের তারিখ:stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
কলিন ভিএইচ

7
দূরবর্তী শাখা থেকে .git/refs/heads/masterপরিবর্তনগুলি যখন আসে তখন git pullফলাফলগুলির মধ্যে কোনটির টাইমস্ট্যাম্প পরিবর্তন হবে তা আপনিও পরীক্ষা করতে পারেন master, তবে git pullপ্রতিবেদনগুলির কোনও পরিবর্তন না হলে টাইমস্ট্যাম্প পরিবর্তন হবে না ।
মালভাইনাস

6
এটি যে কোনও স্ক্রিপ্টে ব্যবহার করছে তার জন্য: যদি আনতে বা টানাটি এখনও না করা হয় তবে FETCH_HEAD এর অস্তিত্ব এখনও থাকবে না এবং
স্ট্যাটটি

45

এক কুঁচকিতে, আমি "স্ট্যাটাস-সি% ওয়াই। গিট / ফেইচটিএইচইএইডি" চেষ্টা করেছিলাম এবং সেই সময়ের একটি মানব-পঠনযোগ্য প্রিন্টআউট পেয়েছি:

> 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

[তারপরে "ম্যান স্ট্যাট" করার বিষয়টি আমার কাছে ঘটেছিল এবং আমি দেখতে পেলাম যে 'স্ট্যাট' প্রোগ্রামের জন্য আরও অনেক% পরামিতি উপলব্ধ রয়েছে। ওয়াইএমএমভি।]


4
এটি সবচেয়ে দরকারী উত্তর!
অরুণ

4
শুধু একটি নোট. ম্যাকের জন্য -cকোনও বৈধ বিকল্প নয় stat
আবেল কালেজো

10

নন-বেয়ার রিপোজিটরিতে (এবং একটি খালি রেপোজিটরিটি বোঝায় না git pull), গিট শাখা টিপসে সমস্ত পরিবর্তন এবং বর্তমান শাখা ধারণাটিকে "রিফ্লাগস" এ লগ করে .git/logs। আপনি এগুলি ব্যবহার করে দেখতে পারেন git log -g

তবে লগ ফাইলগুলির টাইমস্ট্যাম্পগুলি থাকলেও git log -gএটি প্রিন্ট হবে এমনটি দেখা যায় না। তবে, .git/logs/HEADউদাহরণস্বরূপ যদি আপনি একবার দেখুন , আপনি দেখতে পাবেন যে ফর্ম্যাটটি পার্স করার পক্ষে বেশ সহজ it এতে রেফ (বা হেড) কী থেকে পরিবর্তিত হয়েছিল, কে পরিবর্তিত হয়েছে, কখন এবং কোনও ক্রিয়াকলাপের বার্তা নিয়ে গঠিত।


6
git show -1 --stat  

এই গিট কমান্ডটি সর্বশেষ পরিবর্তনগুলি বার্তা সহ সময় এবং তারিখের প্রতিশ্রুতি দেয়


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

ক্রস প্ল্যাটফর্ম (ওএসএক্স / লিনাক্স) বাশ সলিউশন

@smoovesউত্তরে উত্তরের দ্বারা অনুপ্রাণিত : https://stackoverflow.com/a/9229377/622276 এবং মন্তব্যসমূহ।

তবে আমি আমার নিজস্ব বাশ প্রম্পট গিট সংহত রক্ষণ করছি

উত্সটির সাথে এখানে: https://github.com/neozenith/dotfiles/blob/master/bash-scriptts/function_parse_git_prompt.sh

msys উইন্ডোজের জন্য গিট বাশ-এ সংস্করণ লিনাক্স সংস্করণের অনুরূপ কাজ করে।

আমি ক্রস প্ল্যাটফর্ম অপশনগুলি কেস স্টেটমেন্টে সংকলন করছি। সুতরাং এটি যে গিট রেপোতে নেভিগেট করব তাতে আনার প্রক্রিয়াটি কাঁটাবে, শেষ আনতে পনের মিনিটেরও বেশি পুরানো তাই আমার প্রম্পট স্ক্রিপ্টের বাকি অংশগুলি জানে যে আমার কাছে টানতে স্টাফ আছে কিনা।

গিট রাডারটি এটিতে অভ্যস্ত ছিল তবে শেষ ফ্যাচটি কখন ডাকা হয়েছিল তার টাইমস্ট্যাম্প সহ একটি ফাইল সংরক্ষণ করা দরকার। এটি কোনও অস্থায়ী ফাইল লেখেন না।

git rev-parse --show-toplevelকেবলমাত্র আমি যদি গিট রেপোতে কোথাও থাকি তবে এটি রেপো রুটটি পাবেন যাতে আমরা .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 , আপনি যখন গিট পুলটি সর্বশেষে .git / FETCH_HEAD এর সংশোধন টাইমস্ট্যাম্পটি পরীক্ষা করে রেপোতে ডেকেছিলেন তখন আবিষ্কার করতে পারেন: git লিখেছেন .git / আপনি টানতে বা আনতে প্রতিবার FETCH_HEAD ফাইলটি টানানোর মতো কিছু না থাকলেও

উদাহরণ: {মাস্টার} ভিনগুপ্ট @ bhling69 (/imsgit_local/work/vinegupt/ims_18.5a/ims_common) $ স্ট্যাটাস -c% y .git / FETCH_HEAD

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


ফো ওএসএক্স 10.9.5 আমার এটি করা দরকার ছিল: stat -f %Sm .git/FETCH_HEADতবে আমার পক্ষে এটি ভালভাবে কাজ করছে বলে মনে হচ্ছে।
জোশ

আপনার নিজের "উত্তর" এ অনুলিপি / পেস্ট করার পরিবর্তে @ স্মুয়ের উত্তরটি উঁচু করে তোলা উচিত।
bfontaine
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.