2010-12-08 3 views
0

リモートリポジトリへのネットワークリンクが非常に遅い(repoSlowと呼ぶ)ので、メイン開発用リポジトリ(repo1と呼ぶ)にしばらくの間フェッチする。2度目のリモートからgitをフェッチする

時には、repo1を別のディレクトリのrepo2にクローンしてテストなどを行う場合があります。 repo1の状態を失うことなく他のブランチ上に置くことができます(オブジェクトファイルとライブラリに関しても、シンプルな隠しはできません)。

repo2へのrepoSlowの状態を取得するために、私は通常repo1に隠し、チェックアウトし、repo1からrepo1までのすべてのブランチ(私が興味がある)をマージしてrepo2にフェッチします。

煩雑な手順やその他の点に加えて、時にはrepo1でマージしたくないということがあります。別のローカルブランチ名にチェックアウトすると、大きな命名の混乱が生じます。

実際にリモートのリモートをフェッチする簡単かつ直接的な方法はありますか?

私は、より良いワークフローは、裸の(またはミラー化された?)ローカルリポジトリにクローンを複製し、それを複数回複製することだと思いますが、gitの理解を深めるために、私は元の質問を維持します。

答えて

0

あなたはそうです。統合ポイントとしてローカルのベアレポにクローンし、repo1とrepo2をそれからクローンするのが最善でしょう。

しかし、元の質問に答えるには、リモートのリモートを直接フェッチする方法はないと私は考えています。 Repo1から複製を作成した後、repo2をrepo2のリモートとして追加するだけで済みます。これを行うと、repo1からクローン化しなかったものをrepoSlowからフェッチするだけで済みます。これは、完全な履歴を取得するよりもはるかに速くなければなりません。これを行うには

は、ちょうどrepo2内から次のコマンドを実行します。

git remote add upstream git://example.com/path/to/repo/slow.git 
git remote update 

今、あなたはrepo2で2つのリモコンを持っている必要があります。 origin repo1を参照し、upstream(またはそれを呼び出したいもの)は、repoSlowを指しています。

0

あなたはrepo2にこのような構成を行うことができます。

[remote "origin"] 
     fetch = +refs/heads/*:refs/remotes/origin/* 
     fetch = +refs/remotes/origin/*:refs/remotes/ancestor/* 

をこれがrepo1の枝をフェッチ(およびorigin/*としてそれらをミラー)だけでなく、その起源のrepo1の追跡ブランチをフェッチするためにだけでなく、repo2(およびミラーを伝えますこれらの変更をrepo2にも取り込むことができるように、repoSlowからの変更をフェッチするためにrepo1で "git fetch"を行うだけで、ローカルブランチを変更する必要はありません。

関連する問題