
나는 이것이 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
전후에 얼마나 많은 공간을 절약했는지 확인하세요.
질문:
댓글을 통해 해결되었습니다. @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는