ホームページ >開発ツール >Git >git と svn の違いは何ですか?

git と svn の違いは何ですか?

青灯夜游
青灯夜游オリジナル
2021-11-26 15:27:2832507ブラウズ

違い: 1. SVN は集中型バージョン管理システムであるのに対し、Git は分散型バージョン管理システムです; 2. SVN はサイズが大きい元のファイルに従って保存されるのに対し、Git はサイズが大きい元のファイルに従って保存されます。メタデータ. 、サイズは非常に小さい; 3. Git のブランチ操作は他の開発者に影響を与えませんが、SVN は影響します。

このチュートリアルの動作環境: Windows 7 システム、Git バージョン 2.30.0、Dell G3 コンピューター。

svn と git の紹介

SVN (集中型バージョン管理システム)

SVN は Subversion の略で、オープンソースのバージョン管理システムです。 、ほとんどの一般的なオペレーティング システムをサポートします。オープンソースのバージョン管理システムとして、Subversion は時間の経過とともに変化するデータを管理します。このデータは中央リポジトリに配置されます。このアーカイブは通常のファイル サーバーとよく似ていますが、すべてのファイル変更を記憶します。このようにして、ファイルを古いバージョンに復元したり、ファイルの変更履歴を参照したりできます。 Subversion は、プログラム ソース コードを含むあらゆる種類のファイルの管理に使用できる汎用システムです。

ワークフロー

集中管理のワークフローは次のとおりです。

集中コード管理の核心は次のとおりです。すべての開発者は、新しい日の作業を開始する前にサーバーからコードを取得し、開発し、最後に競合を解決してコミットする必要があります。すべてのバージョン情報はサーバー上に配置されます。サーバーから切断されている場合、基本的に開発者は作業できないと言えます。以下は例です:

新しい 1 日の作業を開始します:

  • プロジェクト チームの最新のコードをサーバーからダウンロードします。

  • 自分のブランチに入り、作業し、1 時間ごとにサーバー上の自分のブランチにコードを送信します (多くの人がこの習慣を持っています。自分でコードを変更することがあるため)、最後に、前の 1 時間のバージョンに復元したい場合、または前の 1 時間に変更したコードを確認したい場合は、これを行う必要があります)。

  • もうすぐ非番時間が近づいています。ブランチをサーバーのメイン ブランチにマージしてください。その日の作業が完了し、サーバーに反映されます。

SVN は集中バージョン管理システムです

このアプローチは、特に昔ながらのローカル VCS と比較して、多くの利点をもたらします。今では、プロジェクト内の他のメンバーが何に取り組んでいるのかを誰もがある程度見ることができます。管理者は、各開発者の権限を簡単に制御することもできます。
すべてのものには良い面と悪い面の 2 つの側面があります。これを行うことの最も明白な欠点は、中央サーバーが単一障害点になることです。 1 時間ダウンした場合、この 1 時間は誰も更新、復元、比較などを送信できなくなり、共同作業することができなくなります。中央サーバーのディスクに障害が発生し、バックアップが作成されないか、バックアップのタイミングが十分でない場合、データが失われるリスクがあります。最悪のシナリオは、クライアントによって抽出された一部のスナップショット データを除いて、プロジェクト全体の変更履歴レコードがすべて完全に失われることですが、これは依然として問題であり、すべてのデータが抽出されたことを保証することはできません。
原則として、Subversion はファイルの内容の特定の違いのみを考慮します。毎回、どのファイルが更新されたか、どの行と内容が更新されたかが記録されます。

Subversion の機能

  • 各リポジトリには固有の URL (公式アドレス) があり、各ユーザーはこのアドレスからコードとデータを取得します。

  • コード更新を取得するには、この固有のリポジ​​トリに接続し、同期して最新のデータを取得することのみ可能です;

  • 送信にはネットワーク接続が必要です (非ローカル リポジトリ) ;

  • 送信には承認が必要です。書き込み権限がない場合、送信は失敗します。;

  • 送信は毎回成功するとは限りません。他の誰かがあなたより先に提出すると、「変更は古いバージョンに基づいています。最初に更新してから提出してください」というプロンプトが表示されます...など;

  • 競合の解決は競争です。送信速度の違い: 速い人は最初に送信しても何も起こりませんが、遅い場合は後で送信すると、面倒な競合解決が発生する可能性があります。

GIT (分散バージョン管理システム)

Git は、小規模または大規模なプロジェクトを機敏かつ効率的に処理するための、無料のオープンソース分散バージョン管理システムです。

Git はオープンソースの分散バージョン管理システムであり、小規模から非常に大規模なプロジェクトまでのバージョン管理を効果的かつ迅速に処理するために使用されます。 Git は、Linux カーネル開発の管理を支援するために Linus Torvalds によって開発されたオープン ソースのバージョン管理ソフトウェアです。

#分散型と集中型の最大の違いは、開発者がローカルで送信できることと、各開発者が複製 (git clone) によって完全な Git リポジトリをローカル マシンにコピーすることです。

ワークフロー

下の図は、古典的な git 開発プロセスです。

Git の機能特徴

一般開発者

の観点から見ると、git には次の機能があります。

  1. 完全な Git リポジトリ (コードとバージョン情報を含む) をサーバーから単一のマシンにクローンします。
  2. さまざまな開発目的に応じて、独自のマシン上でブランチを作成し、コードを変更します。
  3. 単一マシン上で作成したブランチにコードを送信します。
  4. 単一マシン上のブランチをマージします。
  5. サーバー上のコードの最新バージョンを取得し、それをメイン ブランチにマージします。
  6. パッチを生成し、メイン開発者にパッチを送信します。
  7. メイン開発者からのフィードバックを見て、メイン開発者が 2 人の一般開発者の間に競合 (両者間で協力して解決できる競合) があることに気付いた場合、最初に競合を解決するよう求められます。 、その後、競合を解決してもらいます。投稿者は 1 人です。リード開発者が自分で解決できる場合、または競合がない場合はパスします。
  8. 開発者間の競合を解決する一般的な方法は、開発者がプル コマンドを使用して競合を解決し、競合が解決された後にメインの開発者にパッチを送信することです。

メイン開発者 の観点から見ると (メイン開発者がコードを開発する必要がないと仮定して)、git には次の機能があります。

  1. View 一般開発者の提出状況をメール等で確認します。

  2. パッチを適用して競合を解決します (競合は自分で解決することも、再送信する前に開発者に解決を依頼することもできます。オープンソース プロジェクトの場合は、どのパッチを適用するかを決定する必要もあります)役に立つものとそうでないもの)。

  3. 結果を公開サーバーに送信し、すべての開発者に通知します。

Git は分散バージョン管理システムです

2005 年の誕生以来、Git はますます成熟し、完璧になってきました。オリジナルのデザインで目標を設定しました。高速で大規模プロジェクトの管理に非常に適しており、さまざまな複雑なプロジェクト開発ニーズに対応できる驚くべき非線形ブランチ管理システムも備えています。

SVN とは異なり、Git はバージョン履歴を記録し、ファイル データ全体が変更されたかどうかのみを考慮します。 Git は、ファイル内容の変更に関する差分データを保存しません。実際、Git は、変更されたファイルのスナップショットを取得し、それらを小型のファイル システムに記録することに似ています。更新が送信されるたびに、すべてのファイルのフィンガープリント情報がスキャンされ、ファイルのスナップショットが作成され、そのスナップショットを指すインデックスが保存されます。パフォーマンスを向上させるために、ファイルが変更されていない場合、Git はファイルを再保存せず、最後に保存されたスナップショットへの接続のみを作成します。

Git の機能

  1. Git 内の各クローンのリポジトリは同等です。任意のリポジトリをクローンして独自のリポジトリを作成でき、必要に応じて自分のリポジトリを他の人のソースとして使用することもできます。
  2. Git のすべての抽出操作は、実際にはコード リポジトリの完全なバックアップです。送信は完全にローカルで行われ、誰もあなたに許可を与える必要はありません。あなたはリポジトリのマスターであり、送信は常に成功します。
  3. 古いバージョンに基づいた変更でも正常に送信でき、送信すると古いバージョンに基づいて新しいブランチが作成されます。
  4. Git の送信は、作業に完全に満足するまで中断されません。他の人に PUSH するか、他の人にリポジトリを PULL してください。PULL プロセスと PUSH プロセス中にマージが発生します。自動的に解決できない競合は、これを手動で完了するように求められます。
  5. 競合の解決は、SVN のような提出コンテストのようなものではなくなりましたが、マージと競合の解決は必要に応じて実行されます。

svn と git の違い

  • SVN は集中バージョン管理システムです。不正確な比喩があります: SVN = バージョン管理バックアップ サーバー SVN使用するとアーカイブ倉庫に少し似ています。ファイルの並列読み取りと書き込みをサポートし、コードのバージョン管理をサポートします。その機能には、取得、インポート、更新、分岐、名前変更、復元、マージなどが含まれます。

    Git は分散バージョン管理システムで、操作コマンドには clone、pull、push、branch、merge、push、rebase があり、プログラム コードのバージョン管理を得意としています。

  • GIT には、SVN と同様に、独自の集中リポジトリまたはサーバーがあります。ただし、GIT は分散モードで使用することを好みます。つまり、各開発者は、中央リポジトリ/サーバーからコードをチェックアウトした後、自分のマシン上に自分のリポジトリのクローンを作成します。

    飛行機内、地下室、エレベーター内など、インターネットに接続できない場所に閉じ込められた場合でも、ファイルを送信したり、閲覧したりすることができると言えます。履歴バージョン レコードを作成し、プロジェクト ブランチを作成します。あまり役に立たないと思われる方もいるかもしれませんが、突然ネットワークのない環境に遭遇した場合、これで大きな問題が解決されます。

  • Git は非常に小さいメタデータの形式でファイルを保存しますが、SVN はサイズが大きい元のファイルの形式でファイルを保存します。

    GIT はコンテンツをメタデータとして保存しますが、SVN はコンテンツをファイルとして保存します。すべてのリソース制御システムは、ファイルのメタ情報を .svn、.cvs などのフォルダーに隠します。

    .git ディレクトリのサイズと .svn のサイズを比較すると、両者の間には大きな差があることがわかります。 .git ディレクトリはマシン上のリポジトリのクローン バージョンであるため、タグ、ブランチ、バージョン レコードなど、中央リポジトリ上のすべてのものが含まれています。

  • ブランチは SVN では特別なものではなく、リポジトリ内の単なる別のディレクトリです。ブランチがマージされているかどうかを知りたい場合は、 svn propget svn:mergeinfo のようなコマンドを手動で実行して、コードがマージされているかどうかを確認する必要があります。

    しかし、GIT ブランチの操作は非常にシンプルで楽しいものです。同じ作業ディレクトリから複数のブランチ間をすばやく切り替えることができます。マージされていないブランチを簡単に見つけることができ、これらのファイルを迅速かつ簡単にマージできます。

  • GIT にはグローバル バージョン番号がありませんが、SVN にはあります。これが、SVN と比較して GIT に欠けている最大の機能です。また、SVN バージョン番号は実際には、対応する時点のソース コードのスナップショットであることもわかります。これは CVS から SVN への進化における最大のブレークスルーだと思います。 GIT と SVN は概念的に異なるため、GIT のどの機能がそれらに対応するのかわかりません。手がかりがある場合は、コメントで共有してください。

  • GIT のコンテンツの整合性は SVN より優れています。GIT のコンテンツ ストレージは SHA-1 ハッシュ アルゴリズムを使用します。これにより、コード コンテンツの整合性が確保され、ディスク障害やネットワークの問題が発生した場合のリポジトリへの中断が軽減されます。

  • ブランチ操作の影響

    Git のブランチ操作は他の開発者には影響しませんが、SVN は影響します。新しいブランチを作成すると、全員が同じ情報を得ることができます。あなたも同じ支店です。

svn と git のメリットとデメリット

SVN のメリットとデメリット

SVN は中国語のサポートが充実しており、操作が簡単です使い方に難しいことはなく、アーティスト、製品担当者、テスター、実装担当者が簡単に始めることができます。ユーザーインターフェースが統一されており、機能が充実しており、操作が便利です。

Git の利点と欠点

プログラムのソース コードに対して差別化されたバージョン管理を実行し、コード ベースが占めるスペースはほとんどありません。支店コード管理が容易。中国語はサポートされておらず、グラフィカル インターフェイスのサポートも貧弱で、使いにくいです。宣伝するのは簡単ではありません。

svn と git の適用スコープの違い

  • 適用できるオブジェクトが異なります。 Git は、オープンソース プロジェクトに携わる開発者に適しています。彼らは高度な専門知識を持っているため、使いやすさよりも効率を重視しています。 SVN は異なり、一般的な企業の開発チームに適しています。使いやすくなりました。

  • #使用される機会は異なります。 Git は、インターネットを介して複数の開発役割を持つ単一プロジェクトの開発に適しており、SVN は、プロジェクト マネージャーが調整する企業内での複数の並行プロジェクトの開発に適しています。

  • 権限管理戦略は異なります。 Git には厳密な権限管理がありませんが、アカウントを持っていれば、コードのエクスポート、インポート、さらにはロールバック操作を行うことができます。 SVN は厳密な権限管理を備えており、特定のサブディレクトリに対する権限をグループまたは個人ごとに制御できます。読み取り権限と書き込み権限を区別します。より厳密には、ロールバック操作はサポートされていません。コードが常にトレース可能であることを確認してください。

  • #ブランチの利用範囲が異なります。 Git では、ウェアハウス全体をブランチ化することしかできず、一度削除すると復元することはできません。 SVN では、ブランチは任意のサブディレクトリをターゲットにすることができます。これは本質的にコピー操作です。したがって、多くの階層ブランチを作成し、不要になったら削除し、将来必要になったときに古い SVN バージョンをチェックアウトするだけで済みます。
  • 3 番目の点に基づいて、Git は純粋なソフトウェア プロジェクト、通常は Linux カーネル、busybox などの一部のオープン ソース プロジェクトに適しています。それに対して、SVN は複数のプロジェクト管理を得意としています。たとえば、携帯電話プロジェクトの bsp/設計ドキュメント/ファイル システム/アプリケーション/自動コンパイル スクリプトを SVN ウェアハウスに保存したり、5 つの携帯電話プロジェクトのファイル システムを SVN に保存したりできます。 n (プロジェクト数)*m (コンポーネント数) のリポジトリを git に確立する必要があります。 SVN では、n または m までしか必要ありません。
  • Git はバージョン番号

    として 128 ビット ID を使用し、チェックアウト時にそれがどのブランチであるかを示す必要がありますが、SVN は増分するシリアル番号を使用します。世界的にユニークなバージョン番号を、より簡潔で理解しやすくしました。 gittag を使用してリテラルのエイリアスを作成することはできますが、結局のところ、それは特別なバージョンにのみ適用されます。

  • Git の典型的な開発プロセスであるトレーサビリティは、ブランチの確立、開発、ローカル マスターへの送信、ブランチの削除です。この結果、以前の変更の詳細は失われます。そして、詳細を失うことなく、SVN で同じことを実行します。ここに、git での典型的な作業方法を示す興味深いリンクがあります: (マスターをコアとして、常に新しいブランチを作成し、古いブランチを削除します)
  • 部分的な更新、部分的な復元。 SVN はフォルダーごとに .svn フォルダーを作成して管理するため、部分的な更新や復元も簡単に実現できます。特定の部分だけを更新したい場合は、svn を使用するとうまく実行できます。もちろん、git は過去のバージョンから復元することもできますが、部分的な復元は簡単にはできません。
  • SVN と Git ではどちらがプロジェクト管理に適していますか?

まず、私は研究開発チームのプロジェクト マネージャーです。SVN と Git の両方を使用したことがあります。SVN はプロジェクト管理に適しており、Git はコード管理にのみ適しています。

R&D チームのメンバーには、通常、要件分析、設計、アーティスト、プログラマー、テスト、実装、運用および保守が含まれます。各メンバーは、ドキュメント、設計コード、プログラム コードなどの作業の成果物を持っています。これらは、次のとおりである必要があります。プロジェクトごとに一元管理されます。 SVN はディレクトリごとに明確に分類して管理できるため、プロジェクト チームの管理が秩序正しく効率的な状態に保たれます。

推奨学習:「Git チュートリアル

以上がgit と svn の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。