私はこれが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
前後にどのくらいのスペースを節約したかを確認してください。
質問:
コメントで解決しました。 @stephen-kitt ありがとうございます。git clone
特定のコミットができないようです。このstackoverflowの質問を参照してください。特定のリビジョン/変更セットでgitリポジトリを複製する方法は?- ローカル専用のブランチ、コレクションなどが複数あるとどうなるかよくわかりません。
答え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は