Следующие tarballs:
./resources/godot.tar.gz
./resources/godot-haskell-gdwlroots.tar.gz
делают мое git-репо смехотворно большим (т. Е. 150 МБ +).Я попытался переместить их с помощью следующей команды:
pruneTarballs() {
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch ./resources/godot-haskell-gdwlroots.tar.gz" HEAD
git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch ./resources/godot.tar.gz" HEAD
git push origin --all --force
git push origin --tags --force
}
, но это не оказало нетривиального влияния на размер репо (все еще более 150 МБ)!Затем я запустил:
# Ensure all old refs are fully removed
rm -Rf .git/logs .git/refs/original
# Perform a garbage collection to remove commits with no refs
git gc --prune=all --aggressive
, и это также не уменьшило размер ниже 150 МБ.Для справки приведем текущее распределение репо:
$ du -sch .[!.]* * | sort -h
4.0K Consent.md
4.0K default_env.tres
4.0K export_presets.cfg
4.0K .gitignore
4.0K .gitmodules
4.0K icon.png
4.0K icon.png.import
4.0K Makefile
4.0K project.godot
8.0K README.org
16K utils
2.3M doc
3.0M addons
154M .git
159M total
РЕДАКТИРОВАТЬ: Затем я запустил (из КОНТРОЛЬНЫЙ СПИСОК ДЛЯ СЖИГАНИЯ ХРАНИЛИЩА ):
git reflog expire --expire=now --all
git gc --prune=now
и теперь размер .git
составляет 65 МБ (что все еще кажется очень высоким, но намного ниже, чем исходные 150 МБ).Контрольный список для сжатия хранилища также рекомендовал:
использовать --tag-name-filter cat -- --all
при вызове git-filter-branch
Но не ясно, как изменить исходную команду filter-команды ветвления соответственно:
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch ./resources/godot-haskell-gdwlroots.tar.gz" HEAD
git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch ./resources/godot.tar.gz" HEAD
Я также выполнил (согласно рекомендации CHECKLIST):
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d # This parsed as an incorrect command by git
, но git проанализировал его как неправильную команду, поэтому ничего не сделал,У кого-нибудь есть какие-либо предложения?
РЕДАКТИРОВАТЬ 2: Теперь, после совершения коммита и попытки нажать на GitHub, я получаю:
$ git push origin --all --force
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 8 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 446 bytes | 446.00 KiB/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/gdwlroots
remote: error: By default, updating the current branch in a non-bare repository
remote: is denied, because it will make the index and work tree inconsistent
remote: with what you pushed, and will require 'git reset --hard' to match
remote: the work tree to HEAD.
remote:
remote: You can set the 'receive.denyCurrentBranch' configuration variable
remote: to 'ignore' or 'warn' in the remote repository to allow pushing into
remote: its current branch; however, this is not recommended unless you
remote: arranged to update its work tree to match what you pushed in some
remote: other way.
remote:
remote: To squelch this message and still keep the default behaviour, set
remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To /home/george/./SimulaMakeGit
! [remote rejected] gdwlroots -> gdwlroots (branch is currently checked out)
error: failed to push some refs to '/path/to/my/repo.git'