Невозможно удалить большие архивы из моей истории Git Repo (через ветку фильтра git) - PullRequest
0 голосов
/ 12 июня 2019

Следующие 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...