GIT はバージョン管理システムであるだけでなく、コンテンツ管理システム (CMS)、作品管理システムなどでもあります。 SVN の使用経験がある場合は、GIT が提供する概念や機能の一部に適応するために、精神的な変更を加える必要があります。したがって、この記事の主な目的は、GIT で何ができるのか、SVN との違いをより深いレベルで紹介することで、GIT を理解していただくことです。
1. GIT は分散されますが、SVN はそうではありません:
これは、GIT および他の非分散バージョン管理システム (SVN、CVS など) の中核です。 。 違い。この概念を理解できれば、半分まで到達したことになります。少し免責事項を付けておきますが、GIT は現在最初または唯一の分散バージョン管理システムではありません。 Bitkeeper、Mercurial など、分散モードで実行されるシステムもいくつかあります。ただし、GIT はこの点で優れた機能を備えており、より強力な機能を備えています。
GIT には、SVN と同様に、独自の集中リポジトリまたはサーバーがあります。ただし、GIT は分散モードで使用することを好みます。つまり、各開発者は、中央リポジトリ/サーバーからコードをチェックアウトした後、自分のマシン上に自分のリポジトリのクローンを作成します。飛行機内、地下室、エレベーター内など、インターネットにアクセスできない場所に閉じ込められた場合でも、ファイルの送信、履歴バージョン レコードの表示、プロジェクト ブランチの作成などを行うことができると言えます。あまり役に立たないと思われる方もいるかもしれませんが、突然ネットワークのない環境に遭遇した場合、これで大きな問題が解決されます。
同様に、この分散オペレーティング モードは、オープン ソース ソフトウェア コミュニティの開発への大きな贈り物でもあります。以前のようにパッチ パッケージを作成して電子メールで送信する必要はなくなり、A を作成するだけで済みます。プロジェクト チームにプッシュ リクエストを送信するブランチ。これにより、コードが最新の状態に保たれ、転送中に失われることがなくなります。 GitHub.com は非常に優れた事例です。
Subversion の将来のバージョンも分散モードに基づいているという噂が広まっています。しかし、少なくともそれはまだ見えていません。
2. GIT はコンテンツをメタデータごとに保存しますが、SVN はコンテンツをファイルごとに保存します:
すべてのリソース制御システムは、.svn などのフォルダー内のファイルのメタ情報を非表示にします。 .cvs など.git ディレクトリのサイズと .svn のサイズを比較すると、大きく異なることがわかります。 .git ディレクトリはマシン上のリポジトリのクローン バージョンであるため、タグ、ブランチ、バージョン レコードなど、中央リポジトリ上のすべてのものが含まれています。
3. GIT ブランチは SVN ブランチとは異なります:
ブランチは SVN では特別なものではなく、リポジトリ内の単なる別のディレクトリです。ブランチがマージされているかどうかを知りたい場合は、 svn propget svn:mergeinfo のようなコマンドを手動で実行して、コードがマージされているかどうかを確認する必要があります。この機能を指摘してくれたクラスメートの Ben に感謝します。したがって、一部の分岐が見逃されることがよくあります。
しかし、GIT ブランチの操作は非常にシンプルで楽しいものです。同じ作業ディレクトリから複数のブランチ間をすばやく切り替えることができます。マージされていないブランチを簡単に見つけることができ、これらのファイルを迅速かつ簡単にマージできます。
4. GIT にはグローバル バージョン番号がありませんが、SVN には次のものがあります:
これまでのところ、これが SVN と比較して GIT に欠けている最大の機能です。また、SVN バージョン番号は実際には、対応する時点のソース コードのスナップショットであることもわかります。これは CVS から SVN への進化における最大のブレークスルーだと思います。 GIT と SVN は概念的に異なるため、GIT のどの機能がそれらに対応するのかわかりません。手がかりがある場合は、コメントで共有してください。
更新: 一部の読者は、GIT の SHA-1 を使用してコード スナップショットを一意に識別できると指摘しました。これは、SVN の読みやすい数値のバージョン番号を完全に置き換えるものではありません。ただし、目的は同じである必要があります。
5. GIT のコンテンツの整合性は SVN より優れています:
GIT のコンテンツ ストレージは SHA-1 ハッシュ アルゴリズムを使用します。これにより、コード コンテンツの整合性が確保され、ディスク障害やネットワークの問題が発生した場合のリポジトリへの中断が軽減されます。ここに GIT コンテンツの整合性についての良い議論があります - http://stackoverflow.com/questions/964331/git-file-integrity
GIT と SVN の違いはこれら 5 つだけですか?もちろん違います。この5つはまさに「最も基本的」で「最も魅力的な」ものだと思います。
バージョン管理が必要な理由
Git と svn はどちらもプログラマーがコードを管理するために使用します。一人でプロジェクトを開発する場合、バージョン管理はまったく役に立ちませんよね。しかし、企業で開発を行う場合、一人でプロジェクトを担当することはほぼ不可能で、要件検討、UI設計、フロントエンド開発、バックエンド開発、テストに至るまで、全プロセスにおいて複数の人の協力が必要となります。チーム。現時点では、バージョン管理が特に重要です。
違い
git と svn の違いについて話しましょう:
svn は集中型バージョン管理システムであり、git は分散型バージョン管理システムです。
この文を聞いたことがある人も多いと思いますが、集中化と分散化とは何でしょうか。文字通り、svn ではサーバー上のプログラムを全員が変更するので、誰かが同じ部分を変更すると競合が発生します。したがって、一般的なチームは、プログラムの公開部分については、開発者の一意の識別をマークするか、上から A を追加し、下から B を追加することに同意します。
Git は、開発者が独自のブランチを作成するときに使用します。このブランチは、ソース コードをローカル マシンにコピーするのと同じです。その後の変更はすべてローカル コードです。サーバー コードはいつでも同期のために取得できます。Git は無数のブランチを作成できます。ブランチの場合、開発者は変更したコードを送信するだけで済むため、競合が発生する可能性ははるかに低くなります。
SVN はサーバーと直接対話しますが、git はプロジェクトをローカルにキャッシュしてからサーバーにプッシュします。
svn はインターネットに接続されているときに動作する必要がありますが、git はインターネットがなくても開発できます。
Svn は競合しやすいですが、git は競合しません。
svn はプロジェクト管理用に設計されており、git はコード管理用に設計されています。
svn は複数プロジェクトの並列開発に適しており、git は単一プロジェクトの開発に適しています。
svn は、プロジェクト マネージャーが複数のプロジェクトの全体的な開発を調整する社内企業に適しており、git は、複数の人がネットワークを通じて同じプロジェクトを開発する場合に適しています。
git と github
この 2 つの関係を反映する文を作成します
mio は git を使用して github にプロジェクトを送信しました
つまり: git はツールであり、github はプラットフォームです。
最後に
前に誰に聞いたか分かりませんが、技術ブログを書く意味は覚えることではなく、教えることです。この文章は本当に意味が通じます。今私が書いている言葉はとても稚拙で素人のようですが、一生懸命頑張ります。
一つのことが理解できて初めて、他のいくつかは、使用するときにのみ実現できます。
1) 主要な違いは、Git は分散されるのに対し、Svn は分散されないことです。これを理解すれば簡単に始められると思いますが、現時点で分散バージョン管理システムは Git だけではなく、Mercurial などもありますので、ほぼ同じです。そうは言っても、Svn と同様に、Git には独自の集中リポジトリとサーバーがありますが、すべての開発者が自分のコンピュータにローカル リポジトリを持っているため、ネットワークがなくてもコミットできるため、Git は分散開発の傾向が強いです。レコード、プロジェクト ブランチの作成、その他の操作を実行するには、ネットワークが再び接続されるまで待ってからサーバーにプッシュします。
上記から見ると、Git は非常に優れているように見えますが、Git は複雑さを追加します。最初は少し混乱するかもしれません。2 つのリポジトリ (ローカル リポジトリとリモート リポジトリ) を構築する必要があり、多くの手順があるためです。さらに、どの命令がローカル リポジトリにあり、どの命令がリモート リポジトリにあるかを把握する必要があります。
2) Git はコンテンツをメタデータとして保存しますが、SVN はコンテンツをファイルとして保存します: .git ディレクトリはマシン上のリポジトリのクローン バージョンであり、中央リポジトリのすべてのコンテンツが含まれているためです。タグ、ブランチ、バージョンレコードなど。 .git ディレクトリのサイズと .svn のサイズを比較すると、大きく異なることがわかります。
3) Git にはグローバル バージョン番号がありませんが、SVN にはあります。これは、これまでのところ、SVN と比較して Git に欠けている最大の機能です。
4) Git のコンテンツの整合性は SVN の整合性より優れています。GIT のコンテンツ ストレージは SHA-1 ハッシュ アルゴリズムを使用します。これにより、コード コンテンツの整合性が確保され、ディスク障害やネットワークの問題が発生した場合のリポジトリへの中断が軽減されます。
5) Git をダウンロードすると、オフライン状態のすべてのログが表示されますが、SVN は表示されません。
6) 最初に非常に面倒なのは、コミットする前に SVN を更新する必要があることです。マージを忘れるとエラーが発生します。この状況は git では比較的まれです。
7) 新しいディレクトリのクローンを作成します。たとえば、ディレクトリに 5 つのブランチがある場合、SVN は 5 つのバージョンのファイルを同時にコピーします。これは、同じアクションを 5 回繰り返すことを意味します。 Git はファイルの各バージョンの要素を取得し、メイン ブランチ (マスター) のみをロードします。私の経験では、クローンには約 10,000 のコミット (コミット)、5 つのブランチ、各ブランチには約 1500 のコミットがあります。SVN ファイルには約 1500 かかります。一時間! Git にかかる時間はわずか 1 分です。
8) リポジトリ: SVN は指定された中央リポジトリを 1 つだけ持つことができます。この中央リポジトリに問題がある場合、リポジトリが修復されるか、新しいリポジトリが確立されるまで、すべての作業メンバーは麻痺します。 Git は無制限のリポジトリを持つことができます。より正確に言えば、すべての Git はリポジトリであり、違いはアクティブ ディレクトリ (Git Working Tree) があるかどうかです。メイン リポジトリ (GitHub に配置されたリポジトリなど) に問題が発生した場合でも、作業メンバーはローカル リポジトリにコミットして、メイン リポジトリが復元されるのを待つことができます。作業メンバーは他のリポジトリにコミットすることもできます。
9) ブランチ (Branch) SVN では、ブランチは完全なディレクトリです。そして、このディレクトリには完全な実際のファイルが含まれています。スタッフ メンバーが新しい支店を立ち上げたいと考えた場合、それは「全世界」に影響を与えることになります。誰もがあなたと同じブランチを持ちます。自分のブランチが妨害行為 (セキュリティテスト) に使用されると、感染症のようなものになり、ブランチを変更すると、他の人がブランチを切り直してダウンロードし直す必要があり、非常に血なまぐさい行為になります。 Git を使用すると、各作業メンバーは自分のローカル リポジトリに無制限のブランチを開くことができます。例: 自分のプログラムを破壊して (セキュリティ テスト)、これらの変更されたファイルを将来の使用のために保存しておきたい場合は、ブランチを開いて好きなことを実行できます。他のスタッフの邪魔になる心配もありません。マージしてメイン リポジトリにコミットしない限り、職場の誰も影響を受けません。このブランチが必要なくなったら、ローカル リポジトリから削除するだけです。痛くも痒くもない。
Git ブランチ名には別の名前を使用できます。例: 私のローカル ブランチの名前は OK ですが、メイン リポジトリの名前は実際には master です。
最も注目すべき点は、Git の任意のコミット ポイントでブランチを開くことができることです。 (1 つの方法は、gitk –all を使用して送信レコード全体を観察し、任意の時点でブランチを開くことです。)
10) 送信 (コミット) SVN では、完成した製品を送信すると、中央リポジトリに直接記録されます。完成した製品に重大な欠陥が見つかった場合、その発生を阻止することはできません。ネットワークがダウンしている場合は、まったく送信できません。 Git の送信は完全にローカル リポジトリ内でのアクティビティです。そして、メイン リポジトリに「git Push」するだけです。 Gitの「プッシュ」は実際には「同期」(Sync)を行っています。
最後にまとめると、
SVN の特徴はとにかくシンプルなので、コードを置く場所だけ必要な場合に利用すればOKです。
Git の機能のバージョン管理は、ネットワークに依存せずに何でも行うことができ、ブランチとマージのサポートが強化されています (もちろん、これは開発者が最も懸念していることです)。しかし、私はそれをもっと上手に使ってほしいと思っています。時間をかけて試してみる必要があります。
以上がGITとSVNの違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。