从 git 次提交生成发行说明

Generating release notes from git commits

我在下面创建了以下 rake 任务来为每个 sprint 生成我们的发行说明。
我正在将所有提交到 master 的时间超过 2 周。

问题是当一个分支已经开发超过 2 周的冲刺时,较旧的提交将不会被包括在内。

任何人都可以建议我获取这些提交的方法吗?

task :new_release_note do

  puts "Creating new release note"
  puts "..."

  git_log = `git log --since="two weeks ago" --no-merges --format=%B`
  git_log.gsub!(/^$\n/, '')
  git_log.gsub!(/^/, "* ") 

  current_time = DateTime.now 
  current_date = current_time.strftime "%Y-%m-%d"
  current_date_UK = current_time.strftime "%d-%m-%Y"

  template = "__Release Notes__
  =======================
  #{current_date_UK}

  __New Features__
  ----------------

  * -


  __Improvements__
  ----------------

  * -


  __Fixes__
  ---------

  * -


  __Change Log__
  ----------------

  Detailed release notes below, listing all commit messages for this release.


  #{git_log}
  "

  out_file = File.new("./doc/release_notes/release-notes-#{current_date}.md", "w")
  out_file.puts(template)

  if File.exist?(out_file) 
    puts "New release note generated successfully at /doc/release-notes/release-notes-#{current_date}.md"
  else 
    puts "Error - file not generated."
  end 

end

考虑使用 git tag 并使用版本号标记您的发布。我的团队所做的是为每个版本创建一个带有版本号的发布分支,即 release-2.5.8,当发布准备就绪时,它会合并到 master。然后我们用版本号标记合并提交,即 v2.5.8 如果你这样做,连同压缩合并,那么要查看所有相关的提交就像这样做一样简单:

git log v2.5.8...v2.5.9

这将向您显示这 2 个版本中的所有提交。

我建议 squash 合并您的功能分支的原因正是针对您的用例。您想知道在该功能的开发过程中做了什么,但您怎么能只按日期呢?你真的不能。因此,当您的功能准备好合并到您的版本中时,如果您压缩合并,您可以将所有注释保留在一次提交中以合并该功能。这里的想法是保留相关内容并丢弃开发过程中不再需要的内容。

您可能还想查看 Gitflow

Can anyone suggest a way I can get these commits in?

几个选项:

  1. git tag
  2. git notes
  3. git whatchanged

git tag

阅读这个关于什么是 git 标签以及如何使用它的答案:

简而言之:git 标记允许您标记提交,稍后可以执行合并。如你所知

git pull = git fetch + git merge

因此,一旦您用标签标记了上次合并,您就可以提取上次合并中的所有更改

# "Merge" the last X commits based upon your previous tag
git cherry-pick <tag_name>..master

git notes

git notes 允许我们将内容添加到提交 而无需 更新提交的 SHA-1,这意味着我们可以在保留 SHA- 的同时将内容附加到提交1 个未修改。

现在一旦你有了你的笔记,你就可以找到你之前 "merged" 的最后一次提交,并使用上面的 cherry-pick.

获取从这一点开始的更改

您可以使用 git log --grep

搜索和查找您的笔记

git whatchanged

一旦你知道你引用的提交是什么,你就可以看到在此时间段内使用 git whatchanged 命令更新的文件列表

# Print out a list of files which was updated/added between the 2 commits
git whatchanged <TAG_NAME>...HEAD