Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 10175] ファイルの概要

このコミットは、Go言語のリポジトリにおけるタグ付けに関するもので、具体的にはweekly.2011-11-01という週次リリースを示すタグと、単にweeklyというタグを.hgtagsファイルに追加しています。これは、当時のGo言語の開発プロセスにおいて、Mercurialというバージョン管理システムを用いてリリースバージョンを管理していた名残を示しています。

コミット

commit 9a0563548b5d4fa16aef09e2d953db6c938ff080
Author: Andrew Gerrand <adg@golang.org>
Date:   Wed Nov 2 10:40:35 2011 +0900

    tag weekly.2011-11-01
    
    R=golang-dev, rsc, dsymonds
    CC=golang-dev
    https://golang.org/cl/5305085
---
 .hgtags | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.hgtags b/.hgtags
index ccb12890fa..c804476fa 100644
--- a/.hgtags
+++ b/.hgtags
@@ -90,3 +90,5 @@ acaddf1cea75c059d19b20dbef35b20fb3f38954 release.r58.2
 6d7136d74b656ba6e1194853a9486375005227ef weekly.2011-10-18
 941b8015061a0f6480954821dd589c60dfe35ed1 weekly.2011-10-25
 7c1f789e6efd153951e85e3f28722fc69efc2af2 weekly.2011-10-26
+e69e528f2afc25a8334cfb9359fa4fcdf2a934b6 weekly.2011-11-01
+e69e528f2afc25a8334cfb9359fa4fcdf2a934b6 weekly

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/9a0563548b5d4fa16aef09e2d953db6c938ff080

元コミット内容

このコミットの目的は、Go言語のリポジトリにweekly.2011-11-01というタグとweeklyというタグを追加することです。これは、当時のGo言語の開発サイクルにおける週次リリース(またはそれに準ずるスナップショット)をマークするためのものでした。コミットメッセージには、レビュー担当者(R=)とCC(CC=)が記載されており、Goプロジェクトにおけるコードレビュープロセスを経て取り込まれた変更であることがわかります。また、https://golang.org/cl/5305085というリンクは、Goプロジェクトが利用していたコードレビューシステム(Gerritなど)における変更リスト(Change-list)へのリンクを示しています。

変更の背景

Go言語は、その初期段階において、バージョン管理システムとしてMercurial(Hg)を使用していました。Gitへの移行は後に行われました。このコミットは、Mercurialが主要なバージョン管理システムであった時期のものであり、.hgtagsファイルはそのMercurialリポジトリでタグを管理するために使用されていました。

当時のGo言語の開発は、現在のような厳格なメジャーリリースサイクルとは異なり、より頻繁なスナップショットや「週次リリース」のような形で開発の進捗を共有していた可能性があります。このコミットは、2011年11月1日時点の特定のコミットハッシュにweekly.2011-11-01というタグを付与し、さらにその時点の最新の週次リリースを指すweeklyというエイリアス的なタグも同時に付与することで、開発者やユーザーが特定の時点のコードベースを容易に参照できるようにするための運用の一部であったと考えられます。

前提知識の解説

Mercurial (Hg)

Mercurial(マーキュリアル、略称Hg)は、Gitと同様に分散型バージョン管理システム(DVCS)の一つです。Linus TorvaldsがGitを開発するきっかけとなったBitKeeperの代替として、Matt Mackallによって開発されました。

  • 分散型: 各開発者のローカルマシンに完全なリポジトリのコピーが存在し、ネットワーク接続なしでコミットやブランチの操作が可能です。
  • シンプルさ: Gitと比較して、コマンド体系がより直感的でシンプルであると評されることがあります。
  • 変更セット(Changeset): Mercurialでは、コミットを「変更セット」と呼びます。各変更セットには一意のハッシュIDが割り当てられます。
  • .hgtagsファイル: Mercurialでタグを管理するための特別なファイルです。リポジトリのルートに配置され、バージョン管理の対象となります。

Go言語プロジェクトは、初期にはMercurialを使用していましたが、後にGitに移行しました。このコミットは、そのMercurial時代の名残を示しています。

.hgtagsファイル

.hgtagsファイルは、Mercurialリポジトリにおいてタグ(tag)を管理するために使用されるファイルです。

  • 目的: 特定の変更セット(コミット)に、人間が読みやすい名前(タグ名)を関連付けるために使用されます。これにより、リリースバージョンや重要なマイルストーンなど、リポジトリの特定の時点を簡単に参照できるようになります。
  • 形式: 各行が「変更セットID タグ名」の形式で記述されます。変更セットIDは、そのタグが指すコミットの一意のハッシュ値です。
  • バージョン管理: .hgtagsファイル自体がリポジトリの一部としてバージョン管理されます。つまり、タグを追加したり削除したりすると、.hgtagsファイルが変更され、その変更がコミットとしてリポジトリの履歴に残ります。これにより、タグの履歴も追跡可能になります。
  • 自動更新: hg tagコマンドを使用してタグを作成すると、Mercurialは自動的に.hgtagsファイルを更新し、その変更をコミットします。

Go言語のリリースプロセス(当時の「週次リリース」)

現在のGo言語は、年に2回のメジャーリリース(例: Go 1.x)と、それらのバグ修正やセキュリティパッチを含むマイナーリリース(例: Go 1.x.y)という、比較的安定したリリースサイクルを採用しています。

しかし、Go言語の初期の開発段階では、より迅速なフィードバックと進捗共有のために、より頻繁なスナップショットや「週次リリース」のような形式が採用されていた時期がありました。これは、開発が活発に進められている段階で、最新の変更を試したいユーザーや開発者向けに、定期的に安定した(または比較的安定した)コードベースを提供するための仕組みでした。

このコミットに見られるweekly.2011-11-01のようなタグは、その週次リリースの運用の一部であり、特定の日付の時点でのコードベースをマークするために使われていました。weeklyというタグは、その時点での最新の週次リリースを指す汎用的なタグとして機能していたと考えられます。

技術的詳細

このコミットは、Mercurialのタグ付け機能の直接的な利用を示しています。Mercurialでは、hg tag <tagname>コマンドを実行すると、現在の作業ディレクトリのHEAD(最新のコミット)に対してタグが作成され、その情報が.hgtagsファイルに追記されます。そして、この.hgtagsファイルの変更自体が新しいコミットとして記録されます。

このコミットでは、以下の2つのタグが追加されています。

  1. e69e528f2afc25a8334cfb9359fa4fcdf2a934b6 weekly.2011-11-01
    • これは、e69e528f2afc25a8334cfb9359fa4fcdf2a934b6という変更セットID(コミットハッシュ)にweekly.2011-11-01というタグを関連付けています。これは、2011年11月1日時点の週次リリースを明示的に示すものです。
  2. e69e528f2afc25a8334cfb93599fa4fcdf2a934b6 weekly
    • これも同じ変更セットIDにweeklyというタグを関連付けています。これは、その時点での「最新の週次リリース」を指す汎用的なタグとして機能します。これにより、ユーザーは常にweeklyタグをチェックアウトすることで、最新の週次スナップショットにアクセスできました。

同じ変更セットIDに対して複数のタグを付与することはMercurialでは一般的な操作であり、特にこのように日付付きの具体的なタグと、常に最新を指す汎用的なタグを併用することで、利便性を高めていました。

コアとなるコードの変更箇所

--- a/.hgtags
+++ b/.hgtags
@@ -90,3 +90,5 @@ acaddf1cea75c059d19b20dbef35b20fb3f38954 release.r58.2
 6d7136d74b656ba6e1194853a9486375005227ef weekly.2011-10-18
 941b8015061a0f6480954821dd589c60dfe35ed1 weekly.2011-10-25
 7c1f789e6efd153951e85e3f28722fc69efc2af2 weekly.2011-10-26
+e69e528f2afc25a8334cfb9359fa4fcdf2a934b6 weekly.2011-11-01
+e69e528f2afc25a8334cfb9359fa4fcdf2a934b6 weekly

コアとなるコードの解説

上記のdiffは、.hgtagsファイルに2行が追加されたことを示しています。

  • +e69e528f2afc25a8334cfb9359fa4fcdf2a934b6 weekly.2011-11-01
  • +e69e528f2afc25a8334cfb9359fa4fcdf2a934b6 weekly

これらの行は、e69e528f2afc25a8334cfb9359fa4fcdf2a934b6というMercurialの変更セットID(コミットハッシュ)に対して、それぞれweekly.2011-11-01weeklyという2つのタグが割り当てられたことを意味します。

この変更は、Go言語のソースコード自体には影響を与えません。これは、リポジトリの履歴における特定の時点にラベルを付けるための、純粋なバージョン管理上の操作です。これにより、開発者やユーザーは、このコミットハッシュを直接指定することなく、weekly.2011-11-01またはweeklyというタグ名を使って、2011年11月1日時点のGo言語のコードベースを簡単に取得できるようになります。

関連リンク

参考にした情報源リンク