gitは、複数のコミットの前に削除されたストレージ履歴から大きなサブディレクトリを削除します。

gitは、複数のコミットの前に削除されたストレージ履歴から大きなサブディレクトリを削除します。

このリポジトリには、数ヶ月前にコミットから削除した大容量ファイルの大きなサブディレクトリがあり、リポジトリから永久に削除したいと思います。 huge サブディレクトリはダウンロードにはありませんが、オブジェクト ディレクトリは非常に大きいです。

チェックアウト/複製には時間がかかります。これは、.git/objectsディレクトリが大きいためだと思います。

repo
    <files to keep>
        <massive subdirectory>

複数のサブディレクトリを削除したいと思います。

https://stackoverflow.com/questions/10067848/remove-folder-and-its-contents-from-git-githubs-history

上記のリンクには、このスクリプトに入れたプロセスの長い説明があります。

    #!/bin/bash

    if [ -z "$1" ]; then
      echo "missing argument: subdirectory to remove"
      exit
    fi

    git filter-branch --tree-filter 'rm -rf $1' --prune-empty HEAD
    git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
    echo $1/ >> .gitignore
    git add .gitignore
    git commit -m 'Removing $1 from git history'
    git gc
    git push origin master --force

明らかなエラーなしで実行し、リポジトリを複製し、.git/objectsディレクトリのサイズが縮小しないことを発見しました。

スクリプトに何か抜けたものがありますか?はい何が欠けていますか?最新バージョンのgitでは、これらのニーズに合ったより直接的な機能を導入していますか?

別の方法がありますか?

ベストアンサー1

この答えはindex-filter私にとって効果的で、他の人はそうではありませんでした。

https://stackoverflow.com/a/32886427/4386557

おすすめ記事