重命名所有旧分支脚本。

3

如何将所有最后一次提交时间早于2019年12月31日的分支在远程仓库中的实际名称前添加"OLD_"前缀重命名


3
你可以编写一个脚本(Python,Shell)来完成以下操作:首先执行 git branch --all 命令,然后在循环中进入每个分支,查看 gil 日志并检查最后一次提交的时间,最后你可以重命名文件。 - Deepesh Uniyal
一个 Bash 一行命令就可以完成这个任务,正如 @DeepeshUniyal 所建议的那样。 - eftshift0
1个回答

1
这是一个脚本,可以实现类似您所需的功能(+示例)。
以下是我一些随机分支的列表,它们最后更新于2018年,我们将在其上运行该脚本。此脚本要求您拥有每个分支的本地副本,但我将在最后展示如何修改脚本以实现完全自动化(我不太喜欢自动化远程操作)。
    zrrbite@ZRRBITE MINGW64 /d/dev/git/jspaint (master)
    $ git for-each-ref --sort='-committerdate' --format='%(refname)%09%(committerdate)' 
    refs/heads | sed -e 's-refs/heads/--'

    master          Mon Aug 31 13:54:23 2020 +0200
    newnewbr        Tue Aug 28 00:08:31 2018 +0200
    newbranch       Tue Aug 28 00:06:51 2018 +0200
    gh-pages        Tue Feb 6 21:12:34 2018 +0100
    some_branch     Thu Feb 1 20:57:43 2018 +0100
    test            Thu Feb 6 18:47:16 2014 -0800

脚本:

    #!/bin/bash
    for k in $(git branch | sed /\*/d); do
      if [ -n "$(git log -1 --before='2019-12-31' -s $k)" ]; then
        git branch -m $k OLD_$k
      fi
    done

运行脚本后的输出:

zrrbite@ZRRBITE MINGW64 /d/dev/git/jspaint (OLD_test)
$ git branch
  OLD_gh-pages
  OLD_newbranch
  OLD_newnewbr
  OLD_some_branch
* OLD_test

现在您可以手动将这些分支推送并删除远程的旧分支。如果您想自动推送重命名的分支并删除旧分支,您可以重写脚本为:
    #!/bin/bash
    for k in $(git branch | sed /\*/d); do
      if [ -n "$(git log -1 --before='2019-12-31' -s $k)" ]; then
        git branch -m $k OLD_$k
        git push origin --delete $k
        git push origin OLD_$k
      fi
    done

如果您想进一步假设您没有检出任何本地分支,则可以执行以下操作:
  • 检查git branch -r(远程分支)
  • 检出分支并在适当的情况下重命名
  • 推送该分支
  • 删除旧的分支
如果您有很多分支,并且没有本地副本,则尝试此方法可能是明智的。

我认为这一行存在错误:if [ -n "$(git log -1 --before='2019-12-31' -s $k)" ]; then该脚本重命名了在2019年12月31日之后有提交的分支,这是不正确的。 - dorian shurdhi
1
你说得对。我意识到这个脚本正在重命名任何早于2019-21-31的提交。我会把它修复好。 - zrrbite
或者,除了删除最后提交日期在2019年12月31日之前的分支外,也可以保留在2019年12月31日之前创建的分支。 - dorian shurdhi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接