14

かなり大きくなっているいくつかの大きなバイナリ ファイル (tif、jpg、pdf) を格納するためのリポジトリがあります。作成、削除、名前変更されたファイルもかなりの数あり、個々のコミット履歴は気にしません。ブランチもタグもないリポジトリを扱っているため、この質問はやや単純化されています。

システムから履歴の一部を削除してスペースを節約する簡単な方法があるかどうか知りたいです。

git メーリング リストで古いスレッドを見つけましたが、これを使用する方法 (つまり、$drop とは何か) が実際には指定されていません。

git filter-branch --parent-filter "sed -e 's/-p $drop//'" \
        --tag-name-filter cat -- \
        --all ^$drop 
4

5 に答える 5

10

最初のコミットを 1 回.git行うだけで、いつでも削除してやり直すことができます。git initもちろん、これによりすべてのコミット履歴が削除されます。

于 2012-10-12T18:57:49.023 に答える
10

この回答に従って、履歴を縮小できると思います。

github gist の特定のリビジョンを削除するには?

履歴のどのポイントを保持するかを決定します。

pick <hash1> <commit message>
pick <hash2> <commit message>
pick <hash3> <commit message>   <- keep
pick <hash4> <commit message>
pick <hash5> <commit message>
pick <hash6> <commit message>   <- keep
pick <hash7> <commit message>
pick <hash8> <commit message>
pick <hash9> <commit message>
pick <hash10> <commit message>  <- keep

次に、各「キープ」の後の最初のものを「ピック」のままにし、残りを「スカッシュ」とマークします。

pick   <hash1> <commit message>
squash <hash2> <commit message>
squash <hash3> <commit message>   <- keep
pick   <hash4> <commit message>
squash <hash5> <commit message>
squash <hash6> <commit message>   <- keep
pick   <hash7> <commit message>
squash <hash8> <commit message>
squash <hash9> <commit message>
squash <hash10> <commit message>  <- keep

次に、エディターを保存して終了し、リベースを実行します。各「保持」ポイントで、メッセージ エディターがポップアップし、前の「選択」から「保持」コミットまでの範囲の結合されたコミット メッセージが表示されます。その後、最後のメッセージを保持するか、実際にそれらを組み合わせて、すべての中間状態を保持せずに元の履歴を文書化できます。

そのリベースの後、中間ファイル データは引き続きリポジトリに残りますが、参照されなくなります。git gc実際にそのデータを取り除くことができます。

于 2012-10-12T21:13:50.470 に答える
3

$drop は変数です(探したいもの)

不要なファイルをクリーンアップしてローカル リポジトリを最適化したい場合は、コマンドgit gcを確認する必要があります。

git pruneも別のオプションです。これは、到達可能なブランチ内のどのオブジェクトからも指されなくなったオブジェクトを削除するためです。

これがお役に立てば幸いです。

于 2012-10-12T19:06:18.410 に答える
2

Git 履歴から大きなファイルを見つけて削除したい場合、Pro Gitにはオブジェクトの削除というセクションがあり、このプロセスをガイドします。少し複雑ですが、削除したファイルを履歴から削除し、残りの履歴はそのままにしておくことができます。

于 2012-10-13T04:25:14.160 に答える