Làm cách nào để kiểm tra ngày và giờ mới nhất git pull
đã được thực thi? Tôi thường xuyên cần biết khi nào mã thay đổi trên máy chủ khi có sự cố.
Làm cách nào để kiểm tra ngày và giờ mới nhất git pull
đã được thực thi? Tôi thường xuyên cần biết khi nào mã thay đổi trên máy chủ khi có sự cố.
Câu trả lời:
Các git show
chương trình lệnh ngày gần đây nhất cam kết. Đây không phải là ngày mà cam kết được kéo vào kho lưu trữ cục bộ, nhưng Git không giữ thông tin kéo như vậy.
Bạn có thể tìm thấy thời gian của lần kéo cuối cùng bằng cách sử dụng ctime (thời gian tạo) của các tệp trên máy chủ. Ví dụ:
ls -lct
hiển thị thời gian của mỗi tệp, được sắp xếp với tệp đầu tiên gần đây nhất.
git show
hiển thị ngày cam kết mẹo của nhánh hiện tại, không cần thiết phải cam kết gần đây nhất trong repo, chứ chưa nói đến ngày tìm nạp / kéo gần nhất. Tôi cũng khuyên bạn nên kiểm tra câu trả lời của Smoove.
git show
cho bạn biết bản sao cục bộ của bạn đang ở đâu. (Tôi biết điều này là cũ, nhưng tôi đã kết thúc ở đây qua tìm kiếm.)
stat -c %Y .git/FETCH_HEAD
Sẽ cung cấp cho bạn dấu thời gian unix của lần sửa đổi cuối cùng của tệp đó. Git ghi tệp FETCH_HEAD mỗi khi bạn kéo hoặc tìm nạp, ngay cả khi không có gì để kéo.
stat -f '%m' .git/FETCH_HEAD
stat -f '%Sm' $(git rev-parse --show-toplevel)/.git/FETCH_HEAD
.git/refs/heads/master
dấu thời gian nào sẽ thay đổi dấu thời gian khi git pull
dẫn đến các thay đổi đến từ master
chi nhánh từ xa , nhưng dấu thời gian sẽ không thay đổi khi git pull
báo cáo không có thay đổi.
Linh cảm, tôi đã thử "stat -c% y .git / FETCH_HEAD" và nhận được một bản in mà con người có thể đọc được vào thời điểm đó:
> stat -c %y .git/FETCH_HEAD
2015-02-24 17:42:08.072094410 -0500
Hơn nữa, bạn có thể thêm
when = !stat -c %y .git/FETCH_HEAD
vào [alias]
phần trong tệp ~ / .gitconfig của mình (an toàn nhất là làm điều này tự động bằng cách chạy dòng lệnh sau trong bất kỳ git repo nào)
git config --global alias.when '!stat -c %y .git/FETCH_HEAD'
và sau đó bạn có thể tìm thấy thông tin này bằng "lệnh" mới của mình bất cứ lúc nào:
> git when
2015-02-23 15:07:53.086254218 -0500
[Sau đó, tôi tình cờ làm "man stat" và tôi thấy rằng có một loạt các tham số% khác có sẵn cho chương trình 'stat'. YMMV.]
-c
không phải là một tùy chọn hợp lệ stat
cho Mac.
Trong một kho lưu trữ không trần (và một kho lưu trữ trống không có ý nghĩa đối với git pull
), git ghi lại tất cả các thay đổi đối với các mẹo nhánh và ý tưởng nhánh hiện tại trong "reflogs", trong .git/logs
. Bạn có thể xem những điều này bằng cách sử dụng git log -g
.
Tuy nhiên, mặc dù các tệp nhật ký có dấu thời gian, nhưng nó không xuất hiện để git log -g
in nó. Tuy nhiên, nếu bạn xem xét .git/logs/HEAD
ví dụ, bạn sẽ thấy rằng định dạng này khá đơn giản để phân tích cú pháp - nó bao gồm những gì ref (hoặc HEAD) đã thay đổi từ, thay đổi thành, ai đã thay đổi nó, khi nào và một thông báo hoạt động.
Được truyền cảm hứng rất nhiều từ @smooves
câu trả lời: https://stackoverflow.com/a/9229377/622276 và nhận xét.
Nhưng tôi đang duy trì tích hợp git nhắc bash của riêng mình
Với nguồn tại đây: https://github.com/neozenith/dotfiles/blob/master/bash-scripts/ Chức năng_parse_git_prompt.sh
msys
phiên bản trong Git Bash dành cho Windows hoạt động giống với phiên bản linux.
Tôi đang biên soạn các tùy chọn nền tảng chéo thành một tuyên bố tình huống. Vì vậy, nó sẽ phân nhánh một quy trình tìm nạp trên bất kỳ git repo nào mà tôi điều hướng vào đó cũ hơn mười lăm phút kể từ lần tìm nạp cuối cùng để phần còn lại của tập lệnh nhắc của tôi biết liệu tôi có nội dung cần kéo hay không.
Git radar đã từng làm điều này nhưng nó yêu cầu lưu một tệp có dấu thời gian về thời điểm lần tìm nạp cuối cùng được gọi. Điều này không ghi tệp tạm thời.
git rev-parse --show-toplevel
chỉ có nghĩa là nếu tôi ở bất kỳ đâu trong repo git, nó sẽ lấy gốc repo để chúng tôi có thể tham khảo .git
đường dẫn thư mục.
# 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
Đây là một trình bao bọc git nhỏ. Cài đặt nó với tên git
và với quyền chmod a+x git
. Sau đó thêm last_successful_fetch
vào .git/info/exclude
.
Khi bạn muốn xem kết quả, hãy sử dụng 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]
Theo đề xuất của người dùng: https://stackoverflow.com/users/83646/smoove , bạn có thể tìm thời điểm git pull được gọi lần cuối trên repo bằng cách kiểm tra dấu thời gian sửa đổi của: .git / FETCH_HEAD as: git write the .git / FETCH_HEAD tệp mỗi khi bạn kéo hoặc tìm nạp, ngay cả khi không có gì để kéo.
Ví dụ: {master} dấmgupt @ 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
nhưng dường như hoạt động tốt đối với tôi.