2009-06-30 14 views
7

私はgitサポートツールで認識されたバグを追跡するためにいくつかの作業をしています。実験的な目的でリポジトリをコピーしたいことがあります。私はハードリンクを元のリポジトリオブジェクトデータベースに作成して、同一のオブジェクトの複数のコピーを同じSHA値で格納するディスクスペースを浪費しないようにしたいと思います。 gitのクローンはうまくこれを達成し、残念ながら私はgitのクローンは私に元のリポジトリのように設定し、リポジトリの新しいコピーを与えるようにする方法を見つけるように見えることはできません。スペースを浪費することなくgitリポジトリをコピー/クローンするにはどうすればいいですか?

  1. クローンポイントバックコピーリポジトリへその原点として、私はそれがコピーされたリポジトリ
  2. クローンは1つのブランチのみで巻き上げると同じ起源を持つようにしたいが、私はそれがコピーされたリポジトリ

Iの枝のすべてを持ちたいですgit clone --mirrorを使ってこれを改善することもできますが、それは裸のリポジトリを作成するためだけに機能し、私が実験しているリポジトリ私がデバッグしようとしているサポートツールは、裸のリポジトリでは機能しません。

私は、元のオブジェクトデータベースへのハードリンクで新しいオブジェクトデータベースを作成し、元の.gitディレクトリから他のものをすべてコピーしてからgitチェックアウトを実行するための簡単なシェルループを作成することを考えました。これはエラーが発生しやすいほど複雑であり、私はこの種の低レベル手術を正しく実行するのに十分な知識がなく、微妙なエラーのあるリポジトリを構築すると懸念しています。理論的には、このアプローチは有効でしょうか?

もっと良い方法は、私が欲しいことをするためにクローンをgitに渡す方法ですか?

新しいリポジトリを作成する方法はありますか?オブジェクトデータベースが別のディレクトリにあることを伝えますが、基本的に元のリポジトリからオブジェクトデータベースを共有するように伝えますか?

上記のいずれにも該当しない場合は、大量のスペースを消費して時間がかかるcp -prのみが残っています。

答えて

5

私はあなたがこの「交互」を使用したとして知られているgitの用語で

git clone --reference=/path/to/existing/repo url 

を探していると思います。 git clone helpに記載されているように、このオプションには潜在的な問題がありますが、目的に合っている可能性があります。

また、ダスティンのヘルパーgit-alternatesに興味があります。

0

"git clone --mirror"を使用して、それを裸のリポジトリに変更します(repo.gitの名前をrepo/.gitに変更し、.git/configファイルをコピーし、 "git checkout HEAD" )。注:意図したとおりに動作するかどうかは確認していません。

0

--no-checkoutオプションを指定してgit cloneを使用します。 git pullの代わりにgit fetchを使ってgitリポジトリを更新し、チェックアウトを避けてください。

関連する問題