web-dev-qa-db-ja.com

TFSには、Gitでの分岐/分岐に相当する容量がありますか?

私たちはGitでの分岐と分岐について話し合っており、チームメイトはTFVC(以下TFSと呼びます)にそのようなものがあるかどうか尋ねました。別の方法で管理されていますが、私は説明しました(シェルフセット、ブランチ、クローン、ワークスペース)。結局のところ、これらの用語の正確な関係を理解することはできませんでした。また、定義やガイドをグーグルで調べても、確実に確立することはできませんでした。 Git内での私の能力は限られていることを認めることができますし、彼らもそれほど熱くないと思います。

TFSでの作業中にプロジェクトの管理に制限があると感じたことは一度もないので、Gitのものには同等のものがあると想定しています。ただし、Gitが私が知らない新しいトリックを導入する可能性があります。私がGitがTFSですでに可能であるのと同じ概念をより簡単またはより信頼できる方法でのみ提供することを意味するのではないことに注意してください。

TFSには、Gitでの分岐/分岐に相当する容量がありますか?それはなんと呼ばれていますか?

4

ブランチはTFVCとGitの両方に存在しますが、動作は根本的に異なります。

TFVCのブランチは、基本的にはチェックインできる豪華なフォルダーです。 TFVCで新しいブランチを作成することは、コピーアンドペースト操作です。新しいTFVCブランチへの最初のチェックインは、親ブランチから新しい子ブランチにすべてのファイルをコピーするため、膨大です。それ以降、チェックインは、ブランチが存在するフォルダーにスコープすることができます。子から親へ、および親ブランチから子へマージできます。

Gitのブランチは、コミットへのポインタにすぎません。新しいブランチを作成するには、.git/refs/headsフォルダーに新しいテキストファイルを作成するだけです。テキストファイルの名前は、ブランチの名前です。テキストファイルの内容はGitコミットIDです。この操作はネットワークを必要とせず、ファイルをコピーする必要もありません。これが、Gitでブランチを作成することがTFVCよりも桁違いに速い理由です。

Gitでブランチにコミットすると、新しいバージョンコントロールレコードが書き込まれ、ブランチポインターが新しいコミットIDに進みます。 GitのコミットIDは、前のコミットのIDに基づいて生成されます。これは、1つのコミットが前のコミットを指すリンクリストに似たデータ構造を作成します(例: 有向非循環グラフ )。これにより、Gitのブランチがコミットを互いに共有できるようになります。 TFVCはこれを行いません。

実用的な観点から、TFVCはフォークをサポートしていません。チェックインごとにTFVCリポジトリのチェックインをコピーするツールは存在しますが、チェックインが発生した日付と時刻を書き換えます。 Gitリポジトリの「フォーク」のように履歴を正確に複製するわけではありません。ちなみに、リポジトリの「フォーク」は、GitHubが思いついたアイデアです。 「フォーク」は、まったく別のグループの人々のためにGitリポジトリを複製するための素晴らしい方法です。これにより、複数の寄稿者グループがそれぞれのリポジトリを完全に制御できるようになり、ブランチを超えて作業を分離する別の方法として機能します。

チームが作業を別のフォークに組み込みたい場合、チームは互いに「プルリクエスト」を発行します。これはGit用語でのコードレビューであり、バージョン管理外のワークフローです。

Git For Ages 4 And Up は、コミット、ブランチの作成、プッシュ、プルなどのGitの基本を理解している場合に視聴できる素晴らしいビデオです。違いは説明しませんがTFVCとGit、1時間と40分のビデオは、 Tinkertoys を使用してGitが内部で何をするかを説明するのに優れています。

3
Greg Burghardt