7

私のチームの誰かが大きなファイルをgitサーバーにプッシュし、チームの全員が大きなファイルを含むプロジェクトのクローンを作成しました。

http://help.github.com/removing-sensitive-data/のガイドに従いました。これは、ローカルソースツリーとリモートサーバーで機能します。ただし、別の人がリモートサーバーから新しいデータをフェッチすると、サーバーに新しいコミットをプッシュすることで、大きなファイルを簡単に再導入できます。

通常、チームメンバーは、自分のコミットを他の人と共有するために次のことを行います。

git fetch origin
git rebase origin/master
git push origin

'rebase'のステップで、古い大きなファイルが彼のローカルコミットに再導入されます。もちろん、直接的な方法は、大きなファイルを削除した後、チームの全員にプロジェクトの再クローンを作成するように要求することですが、全員が喜んでそうするわけではありません。私は、プロジェクト全体をすべての人のために再クローン化する以外の方法を見つけています。

助言がありますか?ありがとう。

4

3 に答える 3

3

フィルターツリーを見てください。ファイルを導入したコミットを編集する必要があります。それが完了すると、誰もが取得できます。これにより、リポジトリに非早送りリモートブランチが作成されます-問題のあるファイルを削除した後の各コミットは、今では異なります。現在の変更を新しいリモート ブランチの上にリベースすると、大きなオブジェクトがプッシュされなくなります。

別の方法はgit rebase --preserve-merges -i、問題のあるコミットを編集する場所を実行することです。

于 2011-03-14T16:27:30.077 に答える
0

大きなファイルを削除する実行時間が妥当な場合は、ファイルを削除するスクリプトを作成し、リベース後にスクリプトをローカルで実行するよう全員に指示し、フックを使用して再導入されていないことを確認できます。

于 2011-03-14T15:35:14.103 に答える
0

git filter-branchプロジットブックには、 (他の投稿で言及されているフィルターツリーではなく)を使用した精巧な例があります。章はこちら

オブジェクトの削除http://progit.org/book/ch9-7.html

于 2011-03-15T12:34:56.143 に答える