从git commit生成发行说明

时间:2018-11-09 22:01:54

标签: ruby git rake

我已经在下面创建了以下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

2 个答案:

答案 0 :(得分:4)

  

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

很少有选择:

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

git tag

请阅读有关git标签及其用法的答案:What is git tag, How to create tags & How to checkout git remote tag(s)

简而言之: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的情况下将内容附加到提交中。

enter image description here

现在,一旦您有了笔记,就可以找出您先前“合并”的最后一次提交,并使用上面的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

enter image description here

答案 1 :(得分:0)

考虑使用git tag并用版本号标记您的发行版。我的团队要做的是创建一个版本分支,其中包含每个发行版的版本号,即release-2.5.8,当发行版准备就绪时,它将合并到master中。然后,我们用版本号标记合并提交,即v2.5.8。如果您这样做,则与壁球合并一起查看所有相关的提交,就像这样做一样简单:

git log v2.5.8...v2.5.9

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

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

您可能还想签出Gitflow