1

SVN の「ブランチ」がリビジョンの安価なコピー (ハード リンク) を使用していることを読みました。ここにリンクがあります。http://svnbook.red-bean.com/en/1.7/svn.branchmerge.using.html 「ブランチの作成」の章でそれについて説明しています。

しかし、この本には、「Subversion に関する限り、これら 2 つのコミットは、異なるリポジトリの場所にある異なるファイルに影響を与えた」とも書かれています。「ブランチの操作」の章。

それらは矛盾していると思います。ブランチがトランク内のリビジョンへのハード リンクである場合、ブランチへのコミットは、ブランチ自体は言うまでもなく、トランクに影響を与える必要があります。

「2 つのコミットが異なるリポジトリの場所にある異なるファイルに影響を与える」ことはどのように可能でしょうか?

4

2 に答える 2

2

ええ、SVNはハードリンクに似たものを使用して、同じリビジョンのファイルを参照します。しかし、ファイルを変更するとすぐに、そのハード リンクから切り離されて、その特定のファイルのリビジョンが作成されます。分岐の場合、ほとんどの場合、数百のファイルのうち数個のファイルのみを変更します。したがって、「安価なコピー」とは、分岐を時間とストレージの両方で効率的にすることです。

あなたが指摘したドキュメントが言うように:

Subversion のリポジトリは特別な設計になっています。ディレクトリをコピーするとき、リポジトリが巨大になることを心配する必要はありません — Subversion は実際にはデータを複製しません。代わりに、既存のツリーを指す新しいディレクトリ エントリを作成します。経験豊富な Unix ユーザーであれば、これがハード リンクの背後にある同じ概念であることに気付くでしょう。

コピーされたディレクトリの下にあるファイルとディレクトリにさらに変更が加えられると、Subversion はこのハード リンクの概念を可能な限り採用し続けます。オブジェクトの異なるバージョンを明確にする必要がある場合にのみ、データを複製します。

于 2013-01-21T02:53:55.993 に答える
1

「svn copy」の直後のブランチは、実際にはリビジョンへのハードリンクです。

しかし、そのブランチに何かがコミットされると、「バブルアップ」メソッドによって新しいリビジョンが作成されます。そのため、そのブランチは単純なハードリンクではなくなりました。

「バブルアップ」に関するドキュメントは非常に役立ちます。

于 2013-01-22T12:19:33.693 に答える