【问题标题】:git: check when the last fetch was rungit:检查最后一次 fetch 的运行时间
【发布时间】:2014-02-05 21:16:54
【问题描述】:

我有一个显示最近几次日志更改的脚本,但如果在一两天内未运行提取,我希望脚本手动运行它。

这是它如何工作的示例 bash 代码:

#!/bin/bash

# this is what I need:
last_fetch_date=`git fetch --show-last-fetch-date`

# do the math to see how long ago
timestamp=`date -d "$last_fetch_date" +%s`
now=`date +%s`
diff=`echo $now - $timestamp | bc -l`

# two days
if [ `echo $diff' >= 2*24*60*60' | bc -l` == "1" ]; then
    git fetch --tags
fi

【问题讨论】:

  • 只是检查.git/logs/refs/remotes/origin/master 或类似的修改日期的想法......或者使用钩子
  • 按照上面的建议检查远程参考文件的修改时间可能是上次运行 fetch 的一个很好的替代,但请记住,使用打包的 refs,refs 可能在该位置没有文件。
  • 你多久运行一次这个脚本?每次调用 git fetch 可能更有意义。如果无事可做,时间不会太长。或者您可以设置一个 cron 作业,每天进行一次提取。
  • 它可以手动运行,也可以由刚刚进行提取的另一个脚本调用。
  • 另外,在我们的服务器上,git fetch 通常会要求您提供密码,即使我们正在缓存密码

标签: git bash


【解决方案1】:

没有办法知道 最后一次运行 git fetch 的时间,因为 git 不存储该信息。如果你想知道,每次运行时都必须在某处写一个时间戳。

但是,您可以找出 git fetch 上次实际获取某些东西的时间。每次git fetch 获取新提交时,它都会更新 reflog。要查看它,请使用例如

git reflog show --date=iso -n 1 origin/master

这将显示对origin/master 的最后更改,以及日期。警告:这也将显示何时 修改了它(通过推送)。

最后,在方便的时候获取可能更容易,无需所有这些检查。如果没有可取的东西,git fetch 会运行得非常快。

【讨论】:

  • 这样吗? git reflog show --date=raw -n 1 origin/master | grep -oE '{[0-9]+' | sed 's%{%%'
  • 为什么不只看FETCH_HEAD上的时间戳?
  • @EdwardThomson:是的,这似乎可行。为什么不回答这个问题?
  • Edward Thomson 的扩展,提供更全面的答案:stackoverflow.com/questions/29091536/…,准确地回答了 OP
【解决方案2】:

感谢@sleske,这就是我最终要做的事情

#!/bin/bash

# do the math to see how long ago was the last fetch
 now=`date +%s`
 last_fetch=`git reflog show --date=raw -n 1 origin/master | grep -oE '{[0-9]+' | sed 's%{%%'`
 diff=`echo $now - $last_fetch | bc -l`
if [ `echo $diff' >= 2*24*60*60' | bc -l` == "1" ]; then
    git fetch -q
    git fetch --tags -q
fi

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多