2017-01-15 4 views
0

私はgitを初めて使っています。私たちはTFS 2010からgitに切り替えるだけです。新しいマスターブランチと、リモートサーバー上のマスターからの3つの支店を作成しました。 VSプラグインをインストールし、リモートリポジトリをクローンしました。リモートリポジトリはすべてのマスターファイルをローカルリポジトリにダウンロードしました。gitを使うと、古いブランチを削除せずにVisual Studioのブランチをチェックアウトできますか?

他のリモートブランチから新しいローカルブランチを作成すると、マスターブランチのすべてのローカルファイルが削除され、新しくチェックアウトされたブランチのファイルに置き換えられます。再度チェックアウトすると、新しいブランチがローカルで削除され、マスターブランチに置き換えられます。

ローカルファイルを保持して、ブランチ間の切り替えが迅速に行われ、常にすべてのファイルを再ダウンロードする必要はありませんか?

+0

ブランチをチェックアウトするときにGitは何もダウンロードしません。それは本当に速い操作でなければなりません。ブランチに非常に大きなファイルを格納する可能性がありますか、またはローカルリポジトリが実際にマップされたネットワークデバイスである可能性はありますか? – giusti

答えて

3

あなたが望むブランチだけがダウンロードされるTFVCとは異なり、Gitはリポジトリ全体をローカルディスクにダウンロードします。このリポジトリから、チェックアウトしたバージョン/ブランチにあるファイルとともに作業フォルダを作成します。

ブランチから別のブランチに切り替えると、gitはローカルキャッシュとは異なるファイルだけを置き換えます。切り替え時にファイルが転送されません。

これは、TFVCとは異なり、同じリポジトリ(TFVCワークスペース)に同時に2つのブランチを開くことはできませんが、リポジトリを再度クローンする必要がありますリポジトリ全体のローカルコピー)を開き、2番目のリポジトリ内の別のブランチをチェックアウトします。 TFVCでは同じブランチに2つの異なるバージョンが必要な場合も同じことが言えます。これを行うには、2番目のワークスペースを作成する必要があります。

根本的な理由は、gitではブランチがバージョンへのポインタに過ぎないということです。ブランチ間の切り替えは、バージョン間の切り替えと同じです。 Gitにはリポジトリ内で行われたすべての変更がローカルコピーされているので、切り替えは高速かつ効率的です(もちろん、ある程度のサイズまで)。

+0

2つのブランチを1つのリポジトリでチェックアウトし、再度クローンする必要はありません。 'git worktree'を見てください。 – Philippe

+0

ニース、2015年までのVisual Studioはそれを理解しないでしょう。それはgitの機能はまだ少し限られています。 2017はそれをかなり変える予定です。 – jessehouwing

+0

ビジュアルスタジオはgitができることは決してできません。だから、時には、それ以外のことを受け入れるべきです;-) – Philippe

0

通常、gitはすべてのブランチをローカルに既に持っているので、ブランチがチェックアウトされている場合は追加ダウンロードはありません。

+0

さて、私にとっては何が起こっているのか分からない。私が「ブランチ1」をチェックアウトしてから「ブランチ2」をチェックアウトして、ディレクトリのWindowsエクスプローラを見ると、ブランチ1は消え、ブランチ2に置き換えられます。すべてのファイルを再ダウンロードするのに10分かかるとは思わなかった。 TFSでは、私が望むだけ多くのブランチをローカルにマップすることができました。そして、私が最新のものを引っ張ったときに、その違いをダウンロードします。ファイル構造全体を再ダウンロードするとは限りません。 – mrplainswalker

+1

もちろん、ブランチを変更するとファイルが置き換えられます。無ければ意味をなさないだろうか?しかし、ブランチもファイル状態のスナップショットなので、実際にダウンロードするためにジョギングします。 gitの分岐概念の詳細については、https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshellを参照してください。 – triplem

+0

私はOPが実際には[working/stage/commit](https://git-scm.com/book/en/v2/Getting-Started-Git-Basics#The-Three-States)という概念を欠いていると思います。ブランチをチェックアウトすると、Gitは単に作業領域を更新します。ブランチは削除されません。通常、2つのブランチを同時に使用する必要はありません。 Gitのワークフローでは、分岐とマージが頻繁に行われます。 OPは、Gitを最大限に活用するために慣れてきたいくつかの概念を「忘れて」しまうでしょう。 – giusti

0

リポジトリをクローンすると、すべてのブランチとすべてのファイルを含むすべての履歴がダウンロードされ、他のデータとともに「.git」フォルダに保存されます。

あなたはブランチをチェックアウトすると、ワークスペースがローカルファイルで更新されていない(何のダウンロードを!)

通常、チェックアウトはかなり速いです。そうでない場合は、ファイルに問題があります。

TFVCとは異なり、バイナリファイルまたは大きなファイルをコミットしないでください。 私のアドバイスは、それが本当にことはできません場合は、おそらくあなたは(TFSおよびその他のgitサーバでサポートされている)「のgit-LFS」を使用する必要があり、

(確実に「BFGレポクリーナー」を使用して)あなたの歴史をきれいにすべきであるということです。

しかし、あなたがTFVCで何をしたかのような2つの異なるディレクトリに2つの支店をチェックアウトしたい場合は、短期的には、おそらくあなたは「Gitのworktree」を見ている可能性が...

しかし、それはしませんgit :-(

関連する問題