スペースを節約するために、すべてのGitリポジトリを深さ20に切り替えますか?

スペースを節約するために、すべてのGitリポジトリを深さ20に切り替えますか?

私はこれがgit clone --depth=20 <repo>しばしば多くを知っています。たくさんgit clone.公式文書--depth

私のストレージフォルダに少し狂ってしまったようです。fd 管路到着wcそしてdu、出力:

$ declare -r ALL_GIT="$(fd -HIFt d '.git')"
$ echo "$ALL_GIT" | wc -l
1528
$ echo "$ALL_GIT" | du -hs
du: cannot access './freebsd/contrib/bmake/PSD.doc/tutorial.ms': Permission denied
du: cannot access './freebsd/contrib/bmake/PSD.doc/Makefile': Permission denied
du: cannot access './statsmodels/statsmodels/statsmodels/datasets/macrodata/src/macrodata.xls/macrodata.xls': Permission denied
44G .

すべての履歴を削除し、次の古いすべての孤児をクリーンアップするために使用できるコマンドはありますか20

答え1

私は次のことができると思いました(すべてを1行に入力して\を削除します)。

$ fd -HIFt d '.git' -x bash -c 'config_bk="$(mktemp)"; 
                                git_bk="$(mktemp -d)"; \
                                git clone --depth=20 "$0" "$git_bk"; \
                                mv "$0"/.git/config "$config_bk"; \
                                rm -rf "$0"/.git; \
                                mv "$git_bk"/.git "$0";
                                mv "$config_bk" "$0"/.git;' {//}

未検証! - 楽しみのために一つ作ってみてくださいdf前後にどのくらいのスペースを節約したかを確認してください。

質問:

答え2

ここの私の答えによると、(他の答えに基づいて)https://stackoverflow.com/a/62650346と@muruが述べたように、以下は有効です。

git pull --depth 20
git tag -d $(git tag -l)
git reflog expire --expire=all --all
git gc --prune=all

ディスク全体で実行してスペースを節約したいですか? - そしてこれを実行してみてくださいfd注文する:

fd -HIFt d '.git' -x bash -c 'pushd "$0" && ( git pull --depth 20; git tag -d $(git tag -l); git reflog expire --expire=all --all; git gc --prune=all ) && popd' {//}

または単なる一般find:

find -type d -name '.git' -exec bash -c 'pushd "${0%/*}" && ( git pull --depth 20; git tag -d $(git tag -l); git reflog expire --expire=all --all; git gc --prune=all ) && popd' {} \;

これは私にとって何を意味しますか? - それでは、前述の44Gは

関連情報