공간을 절약하기 위해 모든 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

다음과 같은 작업을 수행할 수 있다는 생각이 들었습니다(모든 것을 한 줄에 입력하고 \를 제거).

$ 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는

관련 정보