2010-11-24 6 views
1

バイナリデータでいっぱいのディレクトリをリモートサーバに送りたい。git squashに続いてデータをプッシュ再送信する

これは数日かかることがありますので、ローカルでコミットして一度に1つのファイルをプッシュします(すべてを一度にコミットして、転送が中断された場合は最初から再開する必要があります)。

すべてが転送されたら、これらのすべてのコミットを1つにスカッシュしたいと思います。私がローカルに押しつぶしてから押すと、すべてのデータが再び送信されています!それは私の戦略の目的を破るものです。

リモートにログインし、リモートでスカッシュ操作を繰り返すこともできますが、私がやりたいことをするためのより良い方法があります。感知できるデータがすべてサーバ上にあることをgitに知らせるには?

答えて

1

、バイナリが最良のVCSで管理されていない第一;)

第二に、あなたがしなければならない、あなたがセットアップ何も含まないプッシュのような(コミット特定を受信したときにスカッシュを実行するためのリモートレポにフックをすることができれば前回のコミットがすべて潰れる可能性があることを検証する特別なファイル)。
正確な実装についてはわかりませんが、同様の履歴を確保するために、git squashを含むソリューションはローカル側とリモート側の両方で行われなければならないようです。

これは、リモートリポジトリへの他の貢献者からの他のコミットがあれば、非常に安全です。その後、あなたのローカルレポとリモート側で何が行われたのかを正確に同期させることは不可能になります...
リモート側のスカッシュの後に続くこのような特別なプッシュ後の唯一の他のアクションコースは、現在のブランチの名前を変更し、リモートブランチをプルして、ブランチのローカルバージョンをリモート側のものにリセットします。

+0

ありがとうございます!真実を伝えるために私の仕事はgitを使っています。なぜなら、名前の変更を追跡できるのは唯一のものだからです。自分のコレクションを整理して整理すると、gitはすべてをサーバーに再度アップロードしません)。それで、私は遠隔地でフックを設定する価値がないと思う、私は混乱した歴史を持って生きるだろう。 – rafak

0

私は確信していませんが、私はgitがそれらをすでに持っている場合、オブジェクトを送信しないと思います。技術的には、コミットにはバイナリオブジェクトは含まれず、オブジェクトへの参照を含むツリーへの参照のみが含まれます。それぞれのオブジェクトは一意のID(SHA)として認識されるので、すでに存在しているかどうかを知る必要があります。だから、通常、バイナリオブジェクトを二度目に送る必要はありません。

ただ試してみてください。何もせずに、あなたが望むように動作するはずです。

+0

それは私が思ったことですが、pushするとgitは送信していると言います(新しいsquashedされたコミットの親から多くのMBがあり、それに対応する時間がかかります)。しかし、リモートでディスクの使用状況をチェックすると、新しく送信されたデータが直ちにサーバー側で無視された場合と同じように(ほとんど)変わりません。 – rafak

+0

git push -thinを試してみましたか? – mb14

+0

はい、それは何も変わりません(そして、文書は--thinがデフォルトであると言います)。 – rafak

関連する問題