Переключить все мои репозитории git на глубину 20, чтобы сэкономить место?

Я знаю, что git clone --depth=20 часто много намногоменьше, чем 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?

0
29.06.2020, 13:34
2 ответа

Навскидку я мог бы сделать следующее (поместить все в одну строку, удалить \):

$ 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до и после, чтобы увидеть, сколько места сэкономлено.

Проблемы:

0
18.03.2021, 23:23

Согласно моему ответу здесь — на основе других ответов — 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 превратился в

0
18.03.2021, 23:23

Теги

Похожие вопросы