2017-02-25 9 views
0

私はリモートリポジトリのクローンを持っています。そのリポジトリの別のコピーが必要な場合、そのローカルクローンをクローンすると、originは最初のクローンを指しています。だから代わりに、私はちょうどcp -a first secondしかし、それは.git/objectsの完全なコピーを作るので、スペースの無駄です。どのようにgitクローンのストレージ効率

、どのように私は2番目のクローンを行うと、(なし、私はcp -a --reflinkを使用することができ、FSを実行していない)ストレージの効率と正確に同じ設定でそれを持つことができ

答えて

6

このタスクにはgit worktreeを使用できます。

Git worktreeは1つのリポジトリを使用し、異なるフォルダの任意のブランチをチェックアウトすることができます。

Gitはインクルードはジン反転2.5に追加され、git worktreeに改名された上で、後にした「新・WORKDIR」という名前の隠しコマンドだったcotribフォルダの下で、2007年以来、この能力を持っていました。

git worktree

git worktree私たちは、同じ時間に複数のブランチで作業できるようにする新しい作業フォルダを作成します。 3-statesは新しく新鮮なコピーであるが、各コピーは起点リポジトリを指す。これにより、git stashを使用する必要がなくなります。また、新しいリポジトリを複製する場合もあります。これらのワークツリーは同じワークショップのブランチをチェックアウトすることができます。チェリーピックまたはマージを行うことができます。

使用法:

git worktree add <second path> 

はあなたが同時に別のブランチで作業できるようにするコンピュータ上の別のフォルダを作成します。

これにより、リポジトリ自体に影響を与えることなく、新しいワークツリーの任意の実験を行うことができます。添付された画像には2つの別々の作業フォルダがありますが、どちらも1つのレポを使用してコンテンツを共有しています。2 worktree株式あなたがコミットすると、作成した既存のworktreeに追加し、特定のコミットまたはファイルをつかむためにgit cherry-pickを使用することができます同じ.gitフォルダ以来、今

enter image description here


enter image description here

+0

私は迷っています。それを終えた。 2つのコミットを行いました。今すぐ分離した頭に。 tempブランチを作成しました。引数なしでプッシュすることはできません。 –

+0

分離した頭部からの回復方法についてこの記事を読んでください。 http://stackoverflow.com/questions/34519665/how-to-move-head-back-to-a-previous-location-detached-head/34519716#34519716 – CodeWizard

+0

これは通常、worktreeが最初の場所? –

1

https://git.wiki.kernel.org/index.php/Git_FAQ#How_to_share_objects_between_existing_repositories.3F

既存のリポジトリ間でオブジェクトを共有するには?

echo "/source/git/project/.git/objects/" > .git/objects/info/alternates 

を行い、その後、 '-l' は、それが唯一のパックにローカルオブジェクトを置くことを意味する

git repack -a -d -l 

でそれをフォローアップ-file(厳密に言えば、それは からの任意の緩いオブジェクトを置きますtrあなたは完全に圧縮されたアーカイブを持っていますが、 はすでに代替の ツリーにパックされているオブジェクトを複製しません。

関連する問題