Subversionと Git:神話の暴言についての神話を暴く

Subversionと Git:Myths and Factsは、バージョン管理システムに関するいくつかの神話を払拭する主張しています。 私は彼らの「事実」を疑い、それらのいくつかをチェックしました。 チェックの結果は、サイトの権威が損なわれ、残りの申し立てについて懐疑的でした。

私が興味を持った理由について少し
私は比較的最近仕事を変えて、svnを使用する会社に入社しましたが、議論の中でgitへの切り替えがしばしばポップアップします。

このトピックの議論を目撃したことがあります。 同僚は同じサイトについて議論し 「石鹸の千枚通しを変えている」という結論に達しました。
私はこの対話の不本意な聞き手でしたが、どのようなサイトとその議論が私にとって興味深いものでしたか。 理解に行きました。

最初のステートメントから始めましょう


Gitリポジトリは、同等のSubversionリポジトリよりも大幅に小さい
偽 神話。

両方のバージョン管理システムで使用される特定のデルタ圧縮アルゴリズムは多くの詳細が異なりますが、一般的にSubversionとGitは同じ方法でデータを保存します。 これにより、同等のデータを持つSubversionリポジトリとGitリポジトリのサイズがほぼ同じになります。 多くのバイナリファイルを保存する場合を除き、SubversionリポジトリがGitリポジトリよりも大幅に小さくなる可能性がある場合(Subversionのxdeltaデルタ圧縮アルゴリズムはバイナリファイルとテキストファイルの両方で機能するため)。

以下は 、リポジトリのサイズを比較する例です。 結論-違いは重要ではありません。

異なる数のコミットと実際には異なるプライマリソース(これらのリポジトリの同期方法を知っている)に混乱しました。 また、これらの数値を取得するプロセスの説明の詳細レベルにも満足できませんでした。

それでは、実験を始めましょう!

SVNリポジトリを取得する


svnrdump.exe dump https://core.svn.wordpress.org/ > svndump
svnadmin create svn
svnadmin load svn < svndump 

svn. 213 , 79758 88 .

39864 . 1701 160 .


git svn clone -s --prefix "svn/" file:///%path%/svn git_from_svn 

, ( 32 ). git — svn ( , ).

, , .

, git_from_svn/.git: 208 7841 509 . git, , . 2 : “loose” object “packfile".

, :

git count-objects -v -H

:

count: 6826
size: 30.21 MiB
in-pack: 249852
packs: 25
size-pack: 145.51 MiB
prune-packable: 73
garbage: 0
size-garbage: 0 bytes

6826 (30.21 ) .


git gc
git count-objects -v -H

:

count: 0
size: 0 bytes
in-pack: 256605
packs: 1
size-pack: 104.54 MiB
prune-packable: 0
garbage: 0
size-garbage: 0 bytes

".git" 136 (945 , 255 ). .


, svn — bare : 106 M, 19 , 8 .


svn — 213 M (79 758 , 88 )
svn( pack) — 214 M (4 644 , 89 ) ( )
git svn — 208 M (7 841 , 509 )
git svn(pack) — 136 M (945 , 255 )
git bare(pack) — 106 M (19 , 8 )

( ).

, loose , . , . .


Branches are expensive in Subversion
False. A myth.

Branches in Subversion are implemented with Copy-On-Write strategy (referred to as ‘Cheap Copies’ in the svnbook). No matter how large a repository or project is, it takes a constant amount of time and space to make a branch. In fact, Subversion branches are extremely cheap beginning with version 1.0 and you can branch even for small bugfixes in a very busy and large project.

«».

– . , 0,01 . - svn, . , ( svn checkout). , .


svn checkout %local_path%/trunk

TotalSeconds: 14.0737539

git clone %local_path%

TotalSeconds: 21.8173709

Git . , git , svn — .


svn switch <local_path>/branches/4.7

TotalSeconds: 4.3741352

git checkout -B "4.7" "origin/4.7"

TotalSeconds: 1.2700857

, .

. .

PS: , « », , , , .

!

Update:
VBKesha , svnadmin pack.
svnadmin.exe pack svn
214 MB (4,644 Files, 89 Folders)
, .

Source: https://habr.com/ru/post/J320704/


All Articles