我在其他几个人使用的git存储库中有一些愚蠢的bash脚本。这些是在我无法控制的客户端上运行的,但我想鼓励用户让它们保持最新,而不是强迫用户每次都连接到远程。
Bash伪代码将是这样的:
if [[ thirty_days_ago < date_of_last_fetch ]] then;
echo "Warning, these scripts are more than 30 days old. You should try a git pull"
fi
我已经完成了一些搜索,但是没有找到可以运行的命令或者可以读取mtime的文件来指示用户上次检查遥控器的时间。我更喜欢,如果这是一个选项,它将是每个遥控器可用,但我会采取我能得到的。
答案 0 :(得分:3)
文件
.git/refs/remotes/remotename/branchname
每次获取分支时都会更新。检查它的mtime。
如果你想检查远程分支是否已在本地分支中合并,你可以检查“remotename / branchname”和“branchname”的引用是否相等:
getref='git log --format="%H" -n 1'
if [ `$getref remotename/branchname` != `$getref branchname` ] ; then
echo "the local branch and the remote branch diverged! Please pull!"
fi
答案 1 :(得分:0)
执行此操作的最简单方法是使用脚本为它们执行提取/拉取,并将时间手动记录在.git
目录中的文件中。
您还可以使用上次上游提交的时间作为粗略衡量标准。
if [ "$(git log -1 --format=%ct origin/master)" -lt "$(date -d'30 days ago' +%s)" ]; then
echo 'Warning....'
fi
答案 2 :(得分:0)
我结合了一些使用stat [OS dependent flags] .git/FETCH_HEAD
的解决方案,以在下面的链接答案中获取该文件的modified time
。
无论何时获取任何内容,它都会每次更新
https://stackoverflow.com/a/54264210/622276
此代码段是我自己维护的bash prompt git integration的一部分,但是可以随意窃取代码段。
# 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