1

我的任务是确保我们的主分支定期合并到我们的开发人员分支中。

我们的结构是这样的。我们有 4 个存储库,在每个存储库中我们都有一个主 master 分支,以及大约 5-10 个在任何给定时间都在工作的开发人员分支。开发者分支可以在一天到 3 个月之间处于活动状态,并且分支的名称从不重复。

每周一次,我需要检查所有开发者分支以及主分支,并跟踪哪些分支已合并,哪些尚未合并,以及上次合并发生的时间。

我目前正在通过使用 SmartGit 并切换到分支并检查日志等来执行此操作,但是我希望使此过程更快甚至可能自动化。

是否有执行此操作的工具,是否有我可以编写的 bat 脚本来执行此操作?

查看其他与 git 相关的问题,我发现我可能会使用一些组合

git show :/"Merge branch 'master'"

git log --pretty=format

但我必须遗漏一些东西,这将使这比当前的手动方法更快、更容易。

编辑:

到目前为止的答案非常有希望,这让我想增加两个皱纹。

  1. 我需要跟踪两个方向。当开发者分支从 master 合并时,以及何时合并到 master。
  2. 我们还有第三个分支,我也需要监控它,称为“生产”。将 master 与其他分支进行比较的答案是否也可以将“生产”分支与各种命名的开发人员分支进行比较?
4

3 回答 3

0

git log可用于列出存在于一个分支中但不存在于另一个分支中的提交。例如,

git log developer..master

显示哪些提交已到达主分支但未到达开发者分支和

git log master..developer

自然会做相反的事情。您可以将其与各种格式选项结合起来,生成您喜欢的报告。

要了解开发人员分支何时从主分支更新,您可以使用git merge-base它来查找两个分支共有的最新提交。请注意,如果最近的合并是从开发人员到主服务器而不是相反的方式,那么这样的提交可能在开发人员分支上,但是如果您只合并到主服务器一次(在开发人员分支的生命周期结束时),这不应该成为问题。

于 2014-01-07T14:22:07.133 回答
0

一个简单的工作流程更改是使用--all选项来git log.

这会导致存储库中所有分支的日志条目都包含在日志中。将此与您可能想要的任何其他选项结合起来,可以将您的日志探索从约 30 个(每个分支一个)减少到 4 个(每个存储库一个)。

根据您的需要,您可能会发现这些其他选项很有用:

git log --all --graph --decorate

有些人也喜欢使用--oneline,但我并不喜欢它。我发现没有它的可视化更容易查看,但可以尝试两种方式。

您可能还想探索git log master..<branch-name>,这将显示可访问的提交<branch-name>,而无法访问的提交master。这实际上是您正在寻找的提交列表。这可能可以编写脚本以从每个分支生成一个列表。

这个问题的公认答案更详细地介绍了通过使用git for-each-ref.

于 2014-01-07T14:14:24.880 回答
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
于 2014-01-07T14:14:32.860 回答