[インデックス 13770] ファイルの概要
このコミットは、GoプロジェクトのFAQドキュメント(doc/go_faq.html
)に、GoプロジェクトがMercurialを使用し、Gitを使用しない理由に関する新しいセクションを追加するものです。これは、Issue #4052の修正に対応しています。
コミット
- コミットハッシュ:
91f2a34ddcc07ee9f6bd11ba55d891dafb9eda5f
- Author: Rob Pike r@golang.org
- Date: Fri Sep 7 11:19:01 2012 -0700
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/91f2a34ddcc07ee9f6bd11ba55d891dafb9eda5f
元コミット内容
faq: mercurial vs. git
Fixes #4052.
R=golang-dev, bradfitz, iant, rsc
CC=golang-dev
https://golang.org/cl/6490092
変更の背景
この変更の背景には、Goプロジェクトがバージョン管理システムとしてMercurialを採用していることに対するコミュニティからの疑問や要望がありました。特に、Gitが広く普及し始めていた時期において、多くの開発者がGoプロジェクトもGitに移行することを望んでいました。
コミットメッセージにある Fixes #4052
は、この変更がGoプロジェクトのIssueトラッカーで報告された問題 #4052を解決するものであることを示しています。Issue #4052は「faq: why mercurial not git?」というタイトルで、GoプロジェクトがなぜMercurialを使用し、Gitを使用しないのかというFAQ項目を追加するよう求めるものでした。
このコミットは、Goプロジェクトの公式FAQにこの質問に対する明確な回答を提供することで、開発者の疑問を解消し、プロジェクトの決定に対する理解を深めることを目的としています。
前提知識の解説
バージョン管理システム (VCS)
バージョン管理システム(Version Control System, VCS)は、ソフトウェア開発において、ソースコードやその他のファイルの変更履歴を管理するためのシステムです。これにより、複数の開発者が同時に作業を進めたり、過去の任意の時点のファイルの状態を復元したり、変更内容を追跡したりすることが可能になります。
Git
Gitは、Linus Torvaldsによって開発された分散型バージョン管理システムです。その高速性、柔軟性、強力なブランチ・マージ機能により、現在では世界中で最も広く利用されているVCSとなっています。各開発者のローカルマシンに完全なリポジトリのコピーが存在するため、オフラインでの作業や高速な操作が可能です。GitHubやGitLabなどのプラットフォームがGitをベースにしています。
Mercurial
Mercurial(Hg)もまた、分散型バージョン管理システムです。Gitと同様に、各開発者がリポジトリの完全なコピーを持ちます。Mercurialは、Gitと比較して学習曲線が緩やかで、コマンド体系がより一貫していると評されることがあります。Google Codeのような初期のホスティングサービスでサポートされており、Goプロジェクトが開始された当時は有力な選択肢の一つでした。
Google Code
Google Codeは、Googleが提供していたオープンソースプロジェクトのホスティングサービスです。2006年に開始され、プロジェクトのソースコードホスティング、バグトラッカー、Wikiなどの機能を提供していました。Goプロジェクトが開始された2009年当時、Google CodeはSubversionとMercurialをサポートしており、Gitのサポートは後から追加されました。Google Codeは2015年に閉鎖され、多くのプロジェクトがGitHubなどの他のプラットフォームに移行しました。
codereview.appspot.com
codereview.appspot.com
は、Googleが開発したコードレビューツールです。これは、Googleの内部で使用されていたMondrianというコードレビューシステムをベースにしており、オープンソースプロジェクト向けに公開されました。Goプロジェクトは、このツールと連携するためにMercurialのプラグイン機構を利用していました。このツールは、変更セット(チェンジリスト)をアップロードし、レビュー担当者がコメントを付け、承認するプロセスを効率化するものでした。
技術的詳細
このコミットは、Goプロジェクトの公式FAQドキュメントであるdoc/go_faq.html
ファイルに、新しいHTMLセクションを追加します。具体的には、既存の「Pointers and Allocation」セクションの直前に、新しい<h3>
ヘッダーと2つの<p>
パラグラフが挿入されます。
追加されるセクションのタイトルは「Why does the project use Mercurial and not git?」です。
最初のパラグラフでは、GoプロジェクトがGoogle Codeでホストされており、プロジェクト開始時にGoogle CodeがSubversionとMercurialのみをサポートしていたことが説明されています。Mercurialが選択された理由として、codereview.appspot.com
の優れたコードレビューツールにプロジェクトを接続するための「codereview」プラグインを作成できるMercurialのプラグイン機構が挙げられています。
2番目のパラグラフでは、Goプロジェクトのソースコードを扱うプログラマーがGitへの移行を求めることがあるが、それは多大な労力を要し、既存のコードレビュープラグインの再実装も必要となることが述べられています。Mercurialがコードレビューサポートと共に現在機能していること、そしてGoプロジェクトがバージョン管理を主に線形かつ非ブランチ的に使用していることを考慮すると、Gitへの移行は価値がないと結論付けられています。
この変更は、純粋にドキュメントの追加であり、Goプロジェクトのコードベースやビルドプロセスに直接的な影響を与えるものではありません。しかし、プロジェクトの哲学や技術選定に関する重要な情報を提供することで、コミュニティの理解を深める役割を果たします。
コアとなるコードの変更箇所
--- a/doc/go_faq.html
+++ b/doc/go_faq.html
@@ -922,6 +922,32 @@ See the document
for more information about how to proceed.
</p>
+<h3 id=\"Why_does_the_project_use_Mercurial_and_not_git\">\
+Why does the project use Mercurial and not git?</h3>\
+\
+<p>\
+The Go project, hosted by Google Code at\
+<a href=\"http://code.google.com/p/go\">code.google.com/p/go</a>,\
+uses Mercurial as its version control system.\
+When the project launched,\
+Google Code supported only Subversion and Mercurial.\
+Mercurial was a better choice because of its plugin mechanism\
+that allowed us to create the \"codereview\" plugin to connect\
+the project to the excellent code review tools at \
+<a href=\"http://codereview.appspot.com\">codereview.appspot.com</a>.\
+</p>\
+\
+<p>\
+Programmers who work\
+with the Go project\'s source rather than release downloads sometimes\n+ask for the project to switch to git.\
+That would be possible, but it would be a lot of work and\n+would also require reimplementing the codereview plugin.\
+Given that Mercurial works today, with code review support,\
+combined with the Go project\'s mostly linear, non-branching use of\n+version control, a switch to git doesn\'t seem worthwhile.\
+</p>\
+\
<h2 id=\"Pointers\">Pointers and Allocation</h2>
<h3 id=\"pass_by_value\">\
コアとなるコードの解説
上記の差分は、doc/go_faq.html
ファイルに追加されたHTMLコンテンツを示しています。
+<h3 id=\"Why_does_the_project_use_Mercurial_and_not_git\">
- 新しいFAQセクションのタイトルを定義する
<h3>
タグです。id
属性は、ページ内リンクのターゲットとして機能します。
- 新しいFAQセクションのタイトルを定義する
+Why does the project use Mercurial and not git?</h3>
- セクションの具体的な質問内容です。
+<p>
- 最初の段落の開始タグです。
+The Go project, hosted by Google Code at
- GoプロジェクトがGoogle Codeでホストされていることを説明しています。
+<a href=\"http://code.google.com/p/go\">code.google.com/p/go</a>,
- Google Code上のGoプロジェクトへのリンクです。
+uses Mercurial as its version control system.
- GoプロジェクトがMercurialをバージョン管理システムとして使用していることを明記しています。
+When the project launched,
- プロジェクト開始時の状況を説明しています。
+Google Code supported only Subversion and Mercurial.
- Google Codeが当時SubversionとMercurialのみをサポートしていたことを示しています。
+Mercurial was a better choice because of its plugin mechanism
- Mercurialがより良い選択肢であった理由として、そのプラグイン機構を挙げています。
+that allowed us to create the \"codereview\" plugin to connect
codereview
プラグインを作成し、プロジェクトを接続できたことを説明しています。
+the project to the excellent code review tools at
- 優れたコードレビューツールへの接続について言及しています。
+<a href=\"http://codereview.appspot.com\">codereview.appspot.com</a>.
codereview.appspot.com
へのリンクです。
+</p>
- 最初の段落の終了タグです。
+<p>
- 2番目の段落の開始タグです。
+Programmers who work
- Goプロジェクトのソースコードを扱うプログラマーについて言及しています。
+with the Go project\'s source rather than release downloads sometimes
- リリースダウンロードではなく、ソースコードを扱う開発者からの意見についてです。
+ask for the project to switch to git.
- プロジェクトをGitに切り替えるよう求める声があることを示しています。
+That would be possible, but it would be a lot of work and
- Gitへの移行は可能だが、多大な労力を要することを説明しています。
+would also require reimplementing the codereview plugin.
codereview
プラグインの再実装も必要となることを示しています。
+Given that Mercurial works today, with code review support,
- Mercurialが現在コードレビューサポートと共に機能していることを前提としています。
+combined with the Go project\'s mostly linear, non-branching use of
- Goプロジェクトがバージョン管理を主に線形かつ非ブランチ的に使用していることを挙げています。
+version control, a switch to git doesn\'t seem worthwhile.
- これらの理由から、Gitへの移行は価値がないと結論付けています。
+</p>
- 2番目の段落の終了タグです。
このHTMLコードは、Goプロジェクトのバージョン管理システムに関する公式見解を明確に示し、なぜMercurialが選択され、なぜGitへの移行が検討されていないのかを説明しています。
関連リンク
- GitHubコミットページ: https://github.com/golang/go/commit/91f2a34ddcc07ee9f6bd11ba55d891dafb9eda5f
- Go CL (Change List): https://golang.org/cl/6490092
- Go Issue #4052: https://github.com/golang/go/issues/4052 (GitHubへの移行後も元のIssue番号が引き継がれています)
参考にした情報源リンク
- なし (提供されたコミット情報と一般的な知識に基づいて解説を生成しました。)