あるリポジトリからクローンをgitして、別のリポジトリにコピーするのは "安全"ですか?

だから私は、最近のクローンのリポジトリを持っている傾向があります(ローカルディスク上に頻繁に "非常に近い"ネットワーク上で作業する必要があります)。私のワークフローが本当に起点になりたいと思う「公式」のサーバーもありますが、頻繁に(過負荷や遠いネットワーク、あるいはその両方のために)非常に遅いです。

(このローカルリポジトリは公式サーバのクローンであり、1〜2週間先になる傾向がありますが、リポジトリは非常に大きく、古いVCSから10年ほどの履歴をインポートしているため、ローカルクローンとリモートからのフェッチがもっと速く)

もし私が git clone -o local/path/to/repo してから git remote add -f origin-for-offical-repo (*) gitクローンのためのURI-offical-repo は私に与えられたでしょうか?

私は、私のレポからのプッシュを異なるようにする微妙な違いに特に注意しています。また、このメソッドを使用してクローンを高速化する方法を使い始めると、このメソッドを使用して複数の世代にわたって「ローカル」レポが作成されている可能性があります。

(*)同じものに余分なリモート名 "local"とローカルサーバから公式サーバにプッシュされていないもの。

4

2 答え

短い答え:はい、おそらく。

長い答え:「起源」は、通常押したい場所の別名です。新しい宛先があなたが引っ張ったリポジトリ(または空のリポジトリ)に関連していて、そこへの書き込みアクセス権を持っている限り、安全でなければなりません。

注:私は本当にあなたの "擬似コード"コマンドの例が分かりやすいとは考えていません。しかし、 "起源"のためのURLを変更するクローニングの概念は、賢明な概念です。私はサーバーのアドレスが移動したときに自分でやった、または私の公開リポジトリの場所を変更することに決めました。

しかし、新しいオリジンが完全に空のリポジトリではなく、ローカルのリポジトリの古いクローンではない場合(ローカルのリポジトリよりも新しいコミットはありません)、

git push --mirror #e.g. implicitly to "origin"

あなたが完全な書き込みアクセス権を持っていれば、リモートのブランチを上書きして破棄することができます。 (これは、.git/configデータを1つのリポジトリから無関係のリポジトリに不用意にコピーして貼り付けると、自分自身で管理することができました。[幸いにもそれには最新のクローンがたくさんありました。私の画面上に削除メッセージがスクロールされたときに数秒間発汗する;)])

5
追加された
新しい起源は決して完全に空ではなく、ローカルのレポは常に新しい起源の古いクローンです(これを反映するように質問を更新しました)。私は "git push --mirror"はしませんが、 "git push"と "git push origin CURRENT-BRANCH"
追加された 著者 Stripes,

What you are doing looks to be fine but you might be looking for the --reference option that was added to git clone some time ago. If there is a local copy this makes it very quick to create a new clone using the reference repository packs and then just updating from the network. eg: git clone --reference ./oldercopy $url newcopy

あなたの現在のスキームについては、ツリーが関連している場合、リモートのURLを切り替えるのに問題はありません。それらが無関係であれば、すべてのやり方で不快なエラーメッセージが表示されます。

3
追加された
--referenceを使用し、参照されたリポジトリを削除するか(gcまたはフィルタを実行する)、Bad Thingsが発生する可能性があることは私の理解です。私は本当に悪いことを避けたい。
追加された 著者 Stripes,
私はこれをチェックした - あなたは正しいです。参照リポジトリが消えた場合、新しいクローンに問題があります。それは修正することができますが、それはかなり怖い探しています。
追加された 著者 patthoyts,