<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Git on 翟志军 Jack Zhai</title>
    <link>https://showme.codes/tags/git/</link>
    <description>Recent content in Git on 翟志军 Jack Zhai</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <copyright>showme.codes</copyright>
    <lastBuildDate>Sun, 24 Mar 2019 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://showme.codes/tags/git/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>理解 Gerrit 的 Change-Id</title>
      <link>https://showme.codes/zh-cn/2019-03-24-understand-gerrit-change-id/</link>
      <pubDate>Sun, 24 Mar 2019 00:00:00 +0000</pubDate>
      <guid>https://showme.codes/zh-cn/2019-03-24-understand-gerrit-change-id/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;审校：LinuxSuRen（https://github.com/LinuxSuRen）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;Gerrit workflow&#34; loading=&#34;lazy&#34; src=&#34;https://showme.codes/assets/images/gerrit_workflow.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Gerrit 是一个基于 Git 版本控制的基于 Web 的代码审查工具 。笔者在学习它的过程中发现，要使用好它，第一步就是要理解 Change-Id。&lt;/p&gt;
&lt;h3 id=&#34;理解-change-id&#34;&gt;理解 Change-Id&lt;/h3&gt;
&lt;p&gt;要理解 Gerrit 的 Change-Id，我们就必须对“一次代码审查任务”有一个定义。通常，我们认为对一次完整的功能实现或 Bug 修复（即一次完整的变更）进行代码审查是合理的。而对一个半成品进行代码审查，得到的结论是不可靠的。因此，一次代码审查任务意味着是对一次变更进行审查。&lt;/p&gt;
&lt;p&gt;Gerrit 使用 Change-Id 来标识一次变更。Change-Id 实际上就是一串字符串，类似这样：&lt;code&gt;Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;但是，一次变更通常会伴随多次 Git 提交（Commit），而且每次提交的提交是不同的 Commit Id（提交Id）。Gerrit 如何将多次提交关联到同一个 Change-Id 呢？&lt;/p&gt;
&lt;p&gt;我们需要在每次提交时，将 Change-Id 以规定的格式放在提交消息（Commit message）的Footer 部分中（最后一行）。如下图：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://showme.codes/assets/images/gerrit-commit-message-with-change-id.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Change-Id 为避免与提交 Id 冲突，通常以大写字母&lt;code&gt;I&lt;/code&gt;为前缀。但是，我们怎么才能方便生成 Change-Id 呢？&lt;/p&gt;
&lt;h3 id=&#34;使用-git-钩子生成-change-id&#34;&gt;使用 Git 钩子生成 Change-Id&lt;/h3&gt;
&lt;p&gt;Change-Id 最好是自动生成，并放到提交消息指定位置，这样才能节约开发者的时间。Gerrit 提供了标准的“commit-msg”钩子来实现。&lt;/p&gt;
&lt;p&gt;Git 提供了4个提交工作流钩子：pre-commit、prepare-commit-msg、commit-msg、post-commit。其中 commit-msg 钩子，会在我们执行 &lt;code&gt;git commit&lt;/code&gt; 时被执行。&lt;/p&gt;
&lt;p&gt;本质上，commit-msg 钩子是一段脚本程序，放在 .git/hooks 目录下。commit-msg 脚本可以使用 Shell、Ruby、Python 等语言实现。&lt;/p&gt;
&lt;p&gt;Gerrit 的 commit-msg 钩子直接从 Gerrit 下载：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
