Как навсегда удалить коммит в git (приложение)?

Я начал использовать datalad, оболочку для приложения git, для контроля версий и сроков действия в моей лаборатории. Он отлично работает, за исключением того, что папка .git может незаметно увеличиваться в размерах, особенно при переходе назад и вперед по истории git для повторения определенных шагов. Например, иногда я делаю коммит, понимаю, что мне нужно что-то исправить, поэтому откатываю его с помощью затем сделайте дополнительные коммиты оттуда. Это делает фиксацию, которая ранее была HEAD, осиротевшей, поэтому она не отображается в но все связанные с ним файлы по-прежнему будут в приложении, и если у вас есть коммит-ша, вы все равно можете Это. Как я могу навсегда удалить эти осиротевшие коммиты, чтобы они и связанные с ними файлы не занимали место на диске? Я старался но это, казалось бы, ничего не дало.

Например:

      datalad create test
cd test
# create new branch
git branch tmp
git checkout tmp
# build up a git history to play with
echo a > f
datalad save -m a
datalad run -i . -o . bash -c "echo aa > f"
datalad run -i . -o . bash -c "echo aaa > f"
# cat all annexed files (where symlinks point)
find .git/annex/objects -type f | xargs -I{} cat {}
# prints out:
# a
# aaa
# aa
# remove last 2 commits
git reset --hard HEAD~2
# make another commit from 2 commits ago
datalad run -i . -o . bash -c "echo b > f"
# print out git annex'd files again
find .git/annex/objects -type f | xargs -I{} cat {}
# should print
# a
# aaa
# b
# aa
# everything is still there, despite the git reset --hard
git checkout master
git branch -D tmp
git gc --prune=now --aggressive
# check what's there again
find .git/annex/objects -type f | xargs -I{} cat {}
# everything is still in the annex, even after deleting the branch and running git gc!

1 ответ

Решено на neurostars: https://neurostars.org/t/how-to-permanently-delete-a-commit-in-git-annex/18235

git gcпозаботится об удалении коммитов из .git/objectsно прикрепленные файлы под .git/annex/objectsдействительно будет сохраняться. Для вложенных файлов вы можете использовать git Annex unused, чтобы найти вложенные файлы, которые больше не используются в указанных вами ссылках (например, вы можете удалить данные для промежуточных шагов между помеченными «выпусками»), а затем использовать git annex drop --unused. Обратите внимание, что ветка git-annex по-прежнему сохранит это в своей истории. Поэтому, если вы будете делать это тысячи раз, это может быть неполное решение, и вы можете дополнить его git annex forgetзабыть историю аннексии напрочь

Другие вопросы по тегам