1

バイナリ データでいっぱいのディレクトリをリモート サーバーに git-push したいと考えています。

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

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

リモートにログインして、スカッシュ操作をリモートで繰り返すことができるかもしれませんが、やりたいことを行うためのより良い方法はありますか? すべての適切なデータが既にサーバー上にあることを git に通知するにはどうすればよいですか?

4

2 に答える 2

1

まず、バイナリは VCS で管理するのが最適ではありません;)

次に、必要に応じて、リモート リポジトリにフックを設定して、特定のコミットを受信したときにスカッシュを実行することができます (特別なファイルだけを含むプッシュのように、以前のすべてのコミットをスカッシュできることを検証します)。
正確な実装についてはわかりませんが、同様の履歴を確保するために、git squash を含むソリューションはローカル側とリモート側の両方で実行する必要があるようです。

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

于 2010-11-24T15:55:57.597 に答える
0

よくわかりませんが、オブジェクトが既にある場合、gitはオブジェクトを送信しないと思います。技術的には、コミットにはバイナリ オブジェクトは含まれませんが、オブジェクトへの参照を含むツリーへの参照のみが含まれます。各オブジェクトは一意の ID (SHA) であるため、既にそれらを持っているかどうかを知る必要があります。したがって、通常、バイナリ オブジェクトを 2 回送信する必要はありません。

試してみるだけで、何もしなくても思い通りに動作するはずです。

于 2010-11-24T16:06:27.943 に答える