Gitユーザーは、Subversionにはすべてのソースコードがローカルに存在しないと言うのはなぜですか?


23

私はSOで読んだことだけを続けるので、許してくれますが、Subversionに対するGitの主な利点の1つは、Gitがすべてのソースコードをローカルで開発者に提供することであり、サーバー。

SVNとTortoiseSVNの使用が制限されているため、すべてのソースコードを入手できました。たとえば、私はウェブサイトを持っています。SVNにアップロードします。私はまだ自分のウェブサイトをローカルで実行していますよね?誰かが変更を送信し、接続していない場合は、サーバーに再接続するまで、Gitを使用しているかどうかは関係ありません。

わかりません。この1つの点を除いて、一方と他方の再ハッシュを要求していません。


2
すべてのソースコードをローカルに持っているのではなく、リポジトリ全体の履歴をローカルに持っているということです。これにより、サーバー同期以外のすべてのリポジトリ相互作用がはるかに高速になります。
ストーンメタル

回答:


69

あなたが質問している前提は本当に間違っています:

Subversionに対するGitの主な利点の1つは、Gitがすべてのソースコードを開発者にローカルに提供することです

SubversionとGitの両方で、ソースコードをローカルに持っています。Gitを使用すると、ソースコードとローカルマシン上のリポジトリの両方を使用できます

こんな感じです。

Subversion:

あなたのコード<->リポジトリ

Git:

コード<->ローカルリポジトリ<->リモートリポジトリ(... <->別のリモートリポジトリなど)

この構造から得られる利点の1つは、ソース管理を使用し、他のチームメンバー(リモートリポジトリを共有するメンバー)の作業を妨げることなく、ローカルリポジトリにローカルの変更をコミットできることです。

Subversionを使用すると、他の人のビルドを壊すリスクを負うか、ソース管理なしで長期にわたるローカル開発に苦しむ必要があります。

一方、Gitを使用すると、これらの変更をローカルリポジトリにコミットし、ログや差分、または変更を表示できます。チームと共有する準備ができていると感じた場合にのみ、ローカルから変更をプッシュします。リモートリポジトリへのリポジトリ。


10
これは非常に良い答えであり、「...他の人のビルドを壊すリスク、またはソース管理なしで長期にわたるローカル開発に苦しむ...」
チャールズスプレーベリー

1
@cspray:ありがとう!他の利点もあると確信していますが、それがSvnでの最大の苦痛です。
ゴランジョヴィック

git FTW(あと8つ...)
トレバーボイドスミス

2
@DanNeely:実際にそうです-OPは彼がどこかで読んだ主張について尋ねましたが、答えはそれは単に真実ではないということです(私の答えの最初の部分を参照)。2番目の部分は、主張をした人がおそらく何を言いたいのか、そしてその理由を説明するだけです。
ゴランジョヴィック

1
@Giorgio:試してみてください:)真剣に、私はこれを何の問題もなく行うことができたとは思いません(完全に手動でマージすることは別として、ツールの目的を無効にします)
Goranジョヴィック

17

GitまたはMercurialは、リポジトリ全体をすべてのリビジョンと名前付きブランチとともにローカルに保存します。Subversionは1つだけを保存します-通常はヘッドリビジョンです。したがって、GitとMercurialを使用すると、ネットワークがSVNで故障した場合でも、更新した最後のリビジョンに制限されている場合でも、完全なリポジトリ(つまり、現在のソースコードその履歴)にアクセスできます。


1
@Murphありがとう。それは本質的に私が意味したものでした。明確にしようとしました。
アメンティ

サーバーへのネットワーク接続があるかどうかだけの問題ではありません。ローカルIOは、ネットワークIOよりもはるかに高速で遅延が少ないため、履歴の検査やファイルの非難がはるかに高速になります(TrotiseSVNの警告「しばらくお待ちください。数分かかることがあります。真剣に!」)。トレードオフは、すべての履歴をローカルに保持すると、より大きなリポジトリでより多くのディスク容量が必要になる場合があることです。これはラップトップでは問題になる可能性があります。追加のドライブを追加するだけで、銀行を壊さない小型のSSDを補うことはできません。
ダン・ニーリー

DanNeelyさんのコメントは、2012年におそらく合理的だったが、4年後には、SSDのいずれかのかなりの部分を占めることができるgitのプロジェクトを見つけることはほぼ不可能です@
イゴールStoppa

7

簡単な答えは次のとおりです。gitではすべてのソースコードがあり、subversionではソースコードの最新バージョンがすべてあります。

Gitは、リポジトリの履歴全体のコピーをローカルに保持します。Subversionでは、履歴全体がサーバー上にあります。


2

あなたが得ているかもしれないことは、SVNでは、すべてのアクションがサーバーとの通信を必要とすることですが、GITはそうではありません。SVNを使用して、分岐する場合は、サーバー上で分岐し、その分岐をプルダウンします。GITを使用すると、「サーバー」に気付かれることなくローカルブランチを作成できます。

SVNとGITの両方を備えたソースコードを持っていると言っても間違いありませんが、GITを使用すれば、ソースコードを含む集中サーバーも必要ありません。GITを使用すると、ソースコードを持っているのはあなただけかもしれませんが、一般的なVCS​​の場合と同じ機能をすべて実行できます。

GITに対する議論を聞いたことがありますが、これはあなたの質問に役立つかもしれません、あなたは中央リポジトリにコミットする必要はないので、あなたがコミットしてサーバーにプッシュするまでソースコードを所有していると言いますあなたが持っています。SVNを使用する場合、バージョン管理を行う唯一の方法はサーバーにコミットすることですが、GITを使用するとすべてをローカルマシンに保持でき、問題が発生した場合は「すべてを失う可能性があります」コミットしておらずHDDもクラッシュした場合、SVNでのすべての変更を失います。


1

中央リポジトリにコミットする必要がないため、ソースコードを所有している場合は、コミットしてサーバーにプッシュするまでソースコードを所有していると言います。SVNを使用する場合、バージョン管理を行う唯一の方法はサーバーにコミットすることですが、GITを使用するとすべてをローカルマシンに保持でき、問題が発生した場合は「すべてを失う可能性があります」コミットしておらずHDDもクラッシュした場合、SVNでのすべての変更を失います。

毎日プッシュする場合、リスクは小さいはずです。しかし、毎日SVNサーバーにコミットすることを余儀なくされた場合、1日の終わりに、すべての変更を小さなステップに分けない単一の大きな変更セットですべてを行うことができます。gitでは、複数の小さなコミットを行うことをお勧めします。プッシュするときに、マージが必要な場合は、マージしてプッシュしてみてください。現時点でマージできない場合は、サーバー上の新しいブランチまたは別のリポジトリにプッシュできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.