【问题标题】:How to print X month ago time before branch name?如何在分支名称之前打印 X 个月前的时间?
【发布时间】:2024-01-05 18:01:01
【问题描述】:

我正在尝试以下代码,输出应包含 x 个月前的分支名称。非常感谢此逻辑中的任何建议。

这里代码的主要目的是获取 4 个月前的所有分支名称。

current_timestamp=$(date +%s)
four_month_ago=$(( $current_timestamp - 4*30*24*60*60 ))

for x in `git branch -r`; do
    branch_timestamp=$(git show -s --format=%at $x)
    if [[ "$branch_timestamp" < "$four_month_ago" ]]; then
        list_branch+=("${x/origin\//}")
    fi
done

i=0
for x in ${list_branch[*]}; do
    printf "    %3d - %s\n" $i $x
    i=$(( i + 1 ))
done

获取输出:

0 - fix-code
1 - bug-read
2 - feature/memcp-fix

我需要在按日期排序的序列号后面加上x个月的时间戳

预期输出:

0 - 5 month ago - fix-code
1 - 7 month ago - bug-read
2 - 10 month ago - feature/memcp-fix

【问题讨论】:

  • 请描述您希望在分支前加上哪个日期。您打算从哪里获取该日期……或者您打算如何计算该日期?
  • 分支名称前需要打印的“作者日期”。 @LasseV.Karlsen
  • 那是你所说的分支上最后一次提交的作者日期吗?分支引用的提交的作者日期?
  • 是分支创建日期。基本上我必须列出带有序列号的 4 个月大的分支 |分行日期 |分支名称,然后删除所有列出的分支。请帮助我,将不胜感激。 @LasseV.Karlsen
  • 你说“是”然后你说“分支创建日期”,这不是一回事。如果我现在创建一个分支,您可能会争辩说分支创建日期是今天,即 11 月 15 日。但是,如果我在分支上工作了 1 个月,则分支所指的实际提交的作者日期可能是 12 月 15 日。你能澄清一下你想要这两个中的哪一个吗?我问是因为根据我的示例(11 月 15 日)获取创建日期可能并不容易,具体取决于合并和其他内容。

标签: git git-branch git-clean


【解决方案1】:

git log(和git show)有一个--date=&lt;format&gt; 选项:

git log --date=relative --format="%ad %s" -1 <branch or commit>

【讨论】:

    【解决方案2】:
    current_timestamp=$(date +%s)
    four_month_ago=$(( $current_timestamp - 4*30*24*60*60 ))
    
    for x in `git branch -r|sed 's/origin\///'|sed -e '/ HEAD /d'`; do
        branch_timestamp=$(git show -s --format=%at origin/$x)
        if [[ "$branch_timestamp" < "$four_month_ago" ]]; then
            num=$(( ($current_timestamp - $branch_timestamp) / (30*24*60*60)))
            list_branch+=("$num month ago - ${x}")
        fi
    done
    
    i=0
    for x in "${list_branch[@]}"; do
        printf "    %3d - %s\n" $i "$x"
        i=$(( i + 1 ))
    done
    
    

    【讨论】:

      最近更新 更多