2014-03-27 24 views
1

我维护一个git仓库,在中央仓库上有一百个左右的分支。许多这些分支是为了某个长期服务的目的而创建的,现在不活跃。有些分支机构可能因为某种原因而停留(例如,它们是发布分支机构),但其他许多分支机构可能会被删除。如何识别git中的陈旧/死亡分支?

我想要一个脚本,生成每个分支的报告,按上次提交活动排序,如果分支合并到我们的主线“develop”分支中,也用*标记该分支。

所以样本输出可能是:

origin/develop   10 minutes ago 
origin/feature/X  1 day ago 
origin/feature/Y *** 35 days ago 
origin/feature/Z  70 days ago 

所以我可以通过电子邮件发送出来的Y业主和Z,并告诉他们删除其分支机构。我也可以对Y说他们的分支合并发展。

我假设我可以通过在分支上查找最终提交的sha1来测试合并,并对其执行“git分支 - 包含哈希码”。

有没有一个脚本可以满足我的需求?

+1

要注意的是,只是因为你的回购协议的副本说,最后一次提交的一个分支是70天前,并不意味着有避风港”在其他人的回购克隆中做出了更多的承诺。这只意味着在那段时间里没有新的提交到你的repo副本中......我不确定这在DVCS场景中听起来像是个好主意,但是如果你确实删除了仍然有效的东西,他们的下一个推动只会把它放回去...... – twalberg

+0

我的意图是通过电子邮件发送给业主,并提醒他们删除自己的分支,而不是为他们做,尽管如果该人离开公司,我可以看到我删除了一个分支,或它明显的分支已经死了。如果他们真的在他们的机器上有分支,那么他们当然可以再推一次。 – locka

回答

0

我不能确定标识尚未承诺在一段时间回购,但作为有已经合并,这里有几个命令识别分支...

(所有的代码下面举从Steve Harman's blog post,去那里脱颖而出的详细信息)

要删除已经被合并到主当地的分支机构。

(First, check out master. Then...) 
$ git branch --merged master | grep -v "\* master" | xargs -n 1 git branch -d 

可以省略主分支rgument除去已经被合并到当前HEAD地方分支机构:

$ git branch --merged | grep -v "\*" | xargs -n 1 git branch -d