1. ホーム
  2. ギット

[解決済み】Linus TorvaldsがGitがファイルを "決して "追跡しないと言ったのは、どういう意味ですか?

2022-04-17 17:46:58

質問

Linus Torvaldsが、Gitはいくつのファイルを扱えるのかという質問に対して、彼の言葉を引用しています。 2007年、Googleで開催されたテックトーク (43:09):

<ブロッククオート

...Gitはあなたのコンテンツを追跡します。1つのファイルを追跡することは決してありません。Gitでは、ファイルを追跡することはできません。できるのは、1つのファイルを持つプロジェクトを追跡することです。しかし、あなたのプロジェクトが1つのファイルであれば、確かにそうすればよいのですが、1万個のファイルを追跡すると、Gitはそれらを個別のファイルとして見ることは決してありません。Gitはすべてを完全なコンテンツとして考えます。Gitのすべての履歴は、プロジェクト全体の履歴に基づいています...

(トランスクリプト こちら .)

それでも、飛び込んでみると Gitの本 最初に言われるのは、Git におけるファイルは、次のいずれかであるということです。 追跡 または 未追跡 . さらに、Gitの経験全体がファイルのバージョン管理に向いているように私には思えます。というのは git diff または git status の出力はファイル単位で表示されます。を使用する場合 git add もファイル単位で選択できるようになります。また、ファイル単位で履歴を確認することもでき、非常に高速です。

この文章はどのように解釈すればよいのでしょうか。ファイルの追跡という点で、GitはCVSのような他のソース・コントロール・システムとどう違うのでしょうか?

どのように解決するのですか?

CVSでは、履歴はファイル単位で追跡されていました。ブランチは、様々なリビジョンを持つ様々なファイルから構成され、それぞれが独自のバージョン番号を持つかもしれません。CVS は、RCS ( リビジョン管理システム というように、個々のファイルを追跡していました。

一方、Gitはプロジェクト全体の状態をスナップショットで取得します。ファイルは独立して追跡され、バージョン管理されません。リポジトリ上のリビジョンは、一つのファイルではなく、プロジェクト全体の状態を参照するのです。

Gitがファイルを追跡すると言った場合、それは単にプロジェクトの歴史に含まれることを意味します。Linusの講演では、Gitの文脈でファイルを追跡することに言及しているのではなく、CVSやRCSのモデルとGitで使われているスナップショット・ベースのモデルを対比していたのです。