LINUX.ORG.RU

Я не понимаю git gc

 , ,


0

1
/tmp/test $ git init
Initialized empty Git repository in /tmp/test/.git/

/tmp/test master # $ git commit --allow-empty -m 'Commit #1'
[master (root-commit) 1dc2d41] Commit #1

/tmp/test master $ git co -b feature
Switched to a new branch 'feature'

/tmp/test feature $ git commit --allow-empty -m 'Commit #2'
[feature f35f72b] Commit #2

/tmp/test feature $ SHA=$(git rev-parse HEAD)

/tmp/test feature $ git co master
Switched to branch 'master'

/tmp/test master $ git show --pretty=oneline $SHA
f35f72b78586ca394dc9cccb33c7fab18d2aa373 Commit #2

sg302447 /tmp/test master $ git branch -D feature
Deleted branch feature (was f35f72b).

/tmp/test master $ git gc --aggressive
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), done.
Total 3 (delta 1), reused 2 (delta 0)

/tmp/test master $ git show --pretty=oneline $SHA
f35f72b78586ca394dc9cccb33c7fab18d2aa373 Commit #2

Почему Commit #2 все еще существует?

Ответ на: комментарий от EXL

Не, пока обьект можно достать из reflog, gc не может его тронуть

KennyMinigun ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Нет, он для людей (как раз в данном случае): люди делают ошибки, потому лучше дать возможность исправиться.

Вот если б он удалял, было бы для инопланетян, которые не ошибаются.

KennyMinigun ★★★★★
() автор топика
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от littlechris

Git выкинул твои данные на мороз по «своей» воли?

Git написан, чтоб хранить данные. С чем он прекрасно справляется. Удалить с концами — не задача программ класа VCS. Хочешь такое сделать — будь добр, постарайся (в данном случае почисти reflog)

KennyMinigun ★★★★★
() автор топика
Ответ на: комментарий от annulen

Дельное замечание. Я просто для убедительности :)

KennyMinigun ★★★★★
() автор топика
Ответ на: комментарий от KennyMinigun

неименованные ветки графа версий оно всего лишь игнорирует и удалит их в лучшем случае по истечению таймаута, в худшем — при очередном git-gc --auto.

littlechris ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.