我的任务是确保我们的主分支机构定期合并到我们的开发者分支机构。
我们的结构是这样的。我们有4个存储库,在每个存储库中我们都有一个主要的主分支,以及在任何给定时间正在处理的大约5-10个开发人员分支。开发人员分支可以在一天到3个月之间激活,并且分支的名称永远不会重复。
每周一次,我需要检查所有开发人员分支以及主分支,并跟踪哪些分支已合并,哪些分支尚未合并,以及何时进行最后一次合并。
我目前正在通过使用SmartGit并切换到分支,检查日志等来做到这一点,但我希望这个过程更快,甚至可能自动化。
是否有工具可以执行此操作,是否有我可以写的蝙蝠脚本来执行此操作?
看看其他与git相关的问题,我看到我可能会使用
的某些组合git show :/"Merge branch 'master'"
和
git log --pretty=format
但我必须遗漏一些能比现行手动方法更快更容易的东西。
编辑:
到目前为止,答案非常有希望,这让我想加上两条皱纹。
答案 0 :(得分:0)
一个简单的工作流程更改是使用--all
的{{1}}选项。
这会导致存储库中所有分支的日志条目都包含在日志中。将此与您可能需要的任何其他选项相结合,可以将日志消耗从~30(每个分支一个)减少到4(每个存储库一个)。
根据您的需要,您可能会发现其他选项非常有用:
git log
有些人也喜欢使用git log --all --graph --decorate
,但我并不为此感到疯狂。我发现没有它可以更容易地查看可视化,但是可以通过两种方式进行实验。
您可能还想浏览--oneline
,该git log master..<branch-name>
会显示<branch-name>
无法从master
访问的提交。这实际上是您正在寻找的提交列表。这可以编写脚本以从每个分支生成列表。
accepted answer from this question详细介绍了使用git for-each-ref
通过脚本迭代分支。
答案 1 :(得分:0)
这些可以帮到你吗?
# view the branches that have been merged already
git branch --merged
# view the branches that have NOT been merged yet
git branch --no-merged
答案 2 :(得分:0)
git log
可用于列出一个分支中存在但不存在另一个分支的提交。例如,
git log developer..master
显示哪些提交已到达主分支但未到达开发人员分支和
git log master..developer
自然会做相反的事情。您可以将其与各种格式选项结合使用,以生成您喜欢的报告。
要了解从主分支更新开发人员分支的时间,您可以使用git merge-base
查找两个分支共有的最新提交。请注意,如果最近的合并是从开发人员到主人,而不是相反,那么这样的提交可能在开发人员分支上,但如果您只合并到master一次(在开发人员分支的生命周期结束时),则不应该是个问题。