如何猜测从远程获取/拉出存储库的最后时间?

时间:2014-08-08 16:36:34

标签: git bash

我在其他几个人使用的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的文件来指示用户上次检查遥控器的时间。我更喜欢,如果这是一个选项,它将是每个遥控器可用,但我会采取我能得到的。

3 个答案:

答案 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