git pull
実行された最新の日時を確認するにはどうすればよいですか?何か問題が発生したときに、サーバー上のコードがいつ変更されたかを頻繁に知る必要があります。
回答:
このgit show
コマンドは、最新のコミットの日付を表示します。これは、コミットがローカルリポジトリにプルされた日付ではありませんが、Gitはそのようなプル情報を保持しません。
サーバー上のファイルのctime(作成時間)を使用して、最後のプルの時間を見つけることができる場合があります。例えば:
ls -lct
各ファイルのctimeを、最新のものから順に表示します。
git show
現在のブランチのチップコミットの日付を示します。これは、最新のフェッチ/プルの日付はもちろんのこと、リポジトリの最新のコミットである必要はありません。また、smooveの回答を確認することをお勧めします。
git show
ローカルクローンがどのコミットにあるかを通知します。(私はこれが古いことを知っていますが、検索によってここに
stat -c %Y .git/FETCH_HEAD
そのファイルの最終変更のUNIXタイムスタンプを提供します。プルするものがない場合でも、プルまたはフェッチするたびにGitはFETCH_HEADファイルを書き込みます。
stat -f '%m' .git/FETCH_HEAD
stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
.git/refs/heads/master
変更が発生した場合にタイムスタンプが変更されるgit pull
ものを確認することもできますmaster
が、変更がgit pull
報告されていない場合、タイムスタンプは変更されません。
直感的に、「stat -c%y .git / 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
[その後、「man stat」を実行するようになり、「stat」プログラムで使用できる他の%パラメータがたくさんあることに気付きました。YMMV。]
-c
はstat
Mac用の有効なオプションではありません。
非ベアリポジトリでは(そしてベアリポジトリでは意味がありませんgit pull
)、gitはブランチヒントと現在のブランチのアイデアに対するすべての変更をの「reflogs」に記録し.git/logs
ます。これらはを使用して表示できますgit log -g
。
ただし、ログファイルにはタイムスタンプがありますが、それgit log -g
を印刷するようには見えません。ただし、.git/logs/HEAD
例を見てみると、形式は解析が非常に簡単であることがわかります。これは、ref(またはHEAD)の変更元、変更先、変更者、時期、およびアクティビティメッセージで構成されています。
@smooves
回答:https : //stackoverflow.com/a/9229377/622276とコメントに強く触発されています。
しかし、私は自分のbashプロンプトgit統合を維持しています
ここにソースがあります:https: //github.com/neozenith/dotfiles/blob/master/bash-scripts/function_parse_git_prompt.sh
msys
Git Bash for Windowsのバージョンは、Linuxバージョンと同じように機能します。
クロスプラットフォームオプションをケースステートメントにコンパイルしています。したがって、最後にフェッチしてから15分以上経過している、私がナビゲートするgitリポジトリのフェッチプロセスがフォークされるため、残りのプロンプトスクリプトは、プルするものがあるかどうかを認識します。
Gitレーダーはこれに慣れていましたが、最後のフェッチが呼び出されたときのタイムスタンプを含むファイルを保存する必要がありました。これは一時ファイルを書き込みません。
git rev-parse --show-toplevel
ちょうど私がgit repoのどこかにいる場合、それはrepoルートを取得するので、.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
これが小さなgitラッパーです。名前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
$ # 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]
ユーザーが提案したように:https ://stackoverflow.com/users/83646/smoove、git pullが最後にリポで呼び出されたのは、.git / FETCH_HEADの変更タイムスタンプをチェックすることでわかります:gitは.git /を書き込みますプルするものがない場合でも、プルまたはフェッチするたびにFETCH_HEADファイル。
例:{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
が、私にはうまく機能しているようです。