최근 git pull
에 실행 된 날짜와 시간을 어떻게 확인 합니까? 뭔가 잘못되었을 때 서버에서 코드가 언제 변경되었는지 자주 알아야합니다.
최근 git pull
에 실행 된 날짜와 시간을 어떻게 확인 합니까? 뭔가 잘못되었을 때 서버에서 코드가 언제 변경되었는지 자주 알아야합니다.
답변:
이 git show
명령은 가장 최근 커밋 날짜를 보여줍니다. 이것은 커밋이 로컬 저장소로 가져온 날짜가 아니지만 Git은 이러한 가져 오기 정보를 유지하지 않습니다.
서버에있는 파일의 ctime (생성 시간)을 사용하여 마지막 풀 시간을 찾을 수 있습니다. 예를 들면 :
ls -lct
가장 최근의 순서로 정렬 된 각 파일의 ctime을 표시합니다.
git show
현재 브랜치의 팁 커밋 날짜를 보여줍니다. 이는 최신 가져 오기 / 풀 날짜는 말할 것도없고 저장소의 가장 최근 커밋 일 필요는 없습니다. 나는 또한 smoove의 대답을 확인하는 것이 좋습니다.
git show
로컬 클론이있는 커밋을 알려줍니다. (나는 이것이 오래
stat -c %Y .git/FETCH_HEAD
해당 파일의 마지막 수정에 대한 유닉스 타임 스탬프를 제공합니다. 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
또한 ~ / .gitconfig 파일 when = !stat -c %y .git/FETCH_HEAD
의 [alias]
섹션에 추가 할 수 있습니다
(git repo에서 다음 명령 줄을 실행하여 자동으로 수행하는 것이 가장 안전합니다).
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
대한 유효한 옵션이 아닙니다 .
베어 저장소가 아닌 저장소 (그리고 베어 저장소 git pull
는를 의미하지 않음 )에서 git은 브랜치 팁의 모든 변경 사항과 현재 브랜치 아이디어를 .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
Windows 용 Git Bash의 버전은 Linux 버전과 동일하게 작동합니다.
크로스 플랫폼 옵션을 case 문으로 컴파일하고 있습니다. 따라서 마지막 가져 오기 이후 15 분이 지난 모든 git repo에서 가져 오기 프로세스를 포크하므로 나머지 프롬프트 스크립트는 가져올 항목이 있는지 알 수 있습니다.
Git 레이더는 여기에 사용되었지만 마지막 가져 오기가 호출 된 타임 스탬프와 함께 파일을 저장해야했습니다. 이것은 임시 파일을 쓰지 않습니다.
git rev-parse --show-toplevel
단지 내가 git repo의 어느 곳에 있든 .git
폴더 경로를 참조 할 수 있도록 repo 루트를 얻을 수 있다는 뜻 입니다.
# 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 / FETCH_HEAD의 수정 타임 스탬프를 확인하여 저장소에서 git pull이 마지막으로 호출 된시기를 찾을 수 있습니다. .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
했지만 잘 작동하는 것 같습니다.