Gitリポジトリの構造


15

これが重複する場合は申し訳ありませんが、私は見た。

Gitに移行します。Subversionでは、\ trunk、\ branches、および\ tagsフォルダを使用することに慣れています。

Gitを使用すると、ブランチを切り替えると作業ディレクトリの内容が置き換えられるため、以前の作業方法がGitに当てはまらないと仮定するのは正しいでしょうか?

私の推測では、gitignoreとreadme.txtを含むレポフォルダーがあり、それからレポを構成するプロジェクトのフォルダーがあります。

回答:


15

「トランク」が「マスター」に、「ブランチ」が「ヘッド」に、「タグ」が「タグ」になりますが、フォルダーはなりません。、それらはで、 refs」、リポジトリ内の別のネームスペースに存在するリビジョンへのラベル。

SubversionとGitの分岐方法は異なります。基本的なサブバージョンモデルは、単一のグローバルタイムラインを持つディレクトリツリーを持ち、分岐する場合は、サブツリーを別のディレクトリにコピーします。

一方、Gitには、それぞれがその親を定義するリビジョンを持つディレクトリツリーがありますが、各リビジョンは複数の親(マージ)と複数の子(ブランチ)を持つことができます。したがって、ブランチ用のディレクトリを持つ代わりに、独自に作成されたリビジョンを取得します。「refs」は、特定の「ブランチ」の最新リビジョンに関連付けられた名前です。

この違いは、分散バージョン管理の基本です。Git(および他の分散システム)には、履歴を線形に維持する中央権限がないため、複数のリポジトリで相互に知らなくてもリビジョンを個別に作成でき、システムはそれらに対応する必要があります。一般化により、一般的に分岐とマージがはるかに簡単になります。

Gitでは、リビジョンはどのブランチにもないことに注意してください。それらはただあり、ブランチにはそれらが含まれています。しかし、ブランチがマージされるか、完全に機能しなくなったことが判明したら、それを指す「ref」を削除し、それを完全に忘れることができます(古いトライアルを破棄すると、最終的にガベージコレクションされますgit gc)。これにより、以前の実験で誰が何をしていたのか誰も覚えていないので、あなたが古い実験に圧倒されるのを避けるのに役立ちます。


涼しい。タグ、ブランチ、その他のナンセンスなフォルダーは必要ありません。素敵。
ルークププレット

2
@LukePuplett:Subversionの分岐方法はかなりユニークです。それはPerforceから来ており、それがそれを持っている他の唯一のバージョン管理システムだと思います。Subversionがブランチを明確に区別しないという事実は、マージアルゴリズムを大幅に複雑にします。ある程度の柔軟性はありますが、その柔軟性は3方向のマージでは実際にはサポートできないため、理解しにくい多くのコーナーケースが発生します。
ジャン・ヒューデック

CVS(SVNの精神的な前身)でさえ、その(やや奇妙な)ブランチとタグは実際にはディレクトリというアプローチを使用しませんでした。私はCVSがうまく分岐したと言っているわけではありませんが、少なくともディレクトリだけでなく「適切な」概念を持っている場合はそうです。
ヨアヒムザウアー

@JoachimSauer:CVSがSubversionの精神的な前身であるかどうかはわかりません。彼らは「より良いCVS」を作るという使命に着手しましたが、彼らは主にPerforceからコンセプトを取り入れました。
Jan Hudec

@JanHudec:それは多分、Perforceについてあまり知りません。私が意図したのは、まさにその使命です。CVSの後継者になることです。
ヨアヒムザウアー

3

Gitは、SVNの2Dに表示されるのと同じデータの3Dビューであると考えてください。つまり、SVNを使用するとルートが分岐し、ツリーの新しいフォルダーとして表示されるコピーとして表示されます。Gitを使用すると、分岐すると、既存のツリーの上に「レイヤー」として表示されるコピーとして表示されます。違いを概念化するのは非常に簡単であることに気づいたら。

SVNを使用しても、Gitと同じように動作できます。ブランチ間の切り替えは、コードベースの単一ビューをブランチビューに置き換えます。これは、svn switchまたはgit checkoutを使用するかどうかに関係なく適用されます。

明らかに、そのフォルダーの場所へのブランチをチェックアウトすることでSVNでブランチのコピーを取得できます。これは、ディスク上の別の場所にgitリポジトリをクローンするのと同じです。

同じことがタグにも当てはまります-gitリビジョンにラベルを付けるか、リリース用にブランチを作成できます。SVNタグはブランチと同じで、「タグ」と呼ばれる唯一の規則です。SVNリポジトリのラベル(リビジョン番号を記録)を使用して、リリースのスナップショットを取得することもできます。

gitとsvnの違いは、ソース管理の基礎ではなく、チェックインとチェックアウトがどのように発生するかに関係しています。コードのビューは異なる場合があります(gitにブランチを含むコードツリーの単一のビューは表示されず、SVNで部分的なリポジトリをブランチできますが、これらは最終的に小さな違いです)

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