Added a comment: Walkthrough of a prudent retroactive annex.
This commit is contained in:
parent
5c848b7225
commit
27585f7569
1 changed files with 82 additions and 0 deletions
|
@ -0,0 +1,82 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="StephaneGourichon"
|
||||||
|
avatar="http://cdn.libravatar.org/avatar/8cea01af2c7a8bf529d0a3d918ed4abf"
|
||||||
|
subject="Walkthrough of a prudent retroactive annex."
|
||||||
|
date="2016-11-24T11:27:59Z"
|
||||||
|
content="""
|
||||||
|
Been using the one-liner. Despite the warning, I'm not dead yet.
|
||||||
|
|
||||||
|
There's much more to do than the one-liner.
|
||||||
|
|
||||||
|
This post offers instructions.
|
||||||
|
|
||||||
|
# First simple try: slow
|
||||||
|
|
||||||
|
Was slow (estimated >600s for 189 commits).
|
||||||
|
|
||||||
|
# In tmpfs: about 6 times faster
|
||||||
|
|
||||||
|
I have cloned repository into /run/user/1000/rewrite-git, which is a tmpfs mount point. (Machine has plenty of RAM.)
|
||||||
|
|
||||||
|
There I also did `git annex init`, git-annex found its state branches.
|
||||||
|
|
||||||
|
On second try I also did
|
||||||
|
|
||||||
|
git checkout -t remotes/origin/synced/master
|
||||||
|
|
||||||
|
So that filter-branch would clean that, too.
|
||||||
|
|
||||||
|
There, `filter-branch` operation finished in 90s first try, 149s second try.
|
||||||
|
|
||||||
|
`.git/objects` wasn't smaller.
|
||||||
|
|
||||||
|
# Practicing reduction on clone
|
||||||
|
|
||||||
|
This produced no visible benefit:
|
||||||
|
|
||||||
|
time git gc --aggressive
|
||||||
|
time git repack -a -d
|
||||||
|
|
||||||
|
Even cloning and retrying on clone. Oh, but I should have done `git clone file:///path` as said on git-filter-branch man page's section titled \"CHECKLIST FOR SHRINKING A REPOSITORY\"
|
||||||
|
|
||||||
|
This (as seen on https://rtyley.github.io/bfg-repo-cleaner/ ) was efficient:
|
||||||
|
|
||||||
|
git reflog expire --expire=now --all && git gc --prune=now --aggressive
|
||||||
|
|
||||||
|
`.git/objects` shrunk from 148M to 58M
|
||||||
|
|
||||||
|
All this was on a clone of the repo in tmpfs.
|
||||||
|
|
||||||
|
# Propagating cleaned up branches to origin
|
||||||
|
|
||||||
|
This confirmed that filter-branch did not change last tree:
|
||||||
|
|
||||||
|
git diff remotes/origin/master..master
|
||||||
|
git diff remotes/origin/synced/master synced/master
|
||||||
|
|
||||||
|
This, expectedly, was refused:
|
||||||
|
|
||||||
|
git push origin master
|
||||||
|
git push origin synced/master
|
||||||
|
|
||||||
|
On origin, I checked out the hash of current master, then on tmpfs clone
|
||||||
|
|
||||||
|
git push -f origin master
|
||||||
|
git push -f origin synced/master
|
||||||
|
|
||||||
|
Looks good.
|
||||||
|
|
||||||
|
I'm not doing the aggressive shrink now, because of the \"two orders of magnitude more caution than normal filter-branch\" recommended by arand.
|
||||||
|
|
||||||
|
# Now what? Check if precious not broken
|
||||||
|
|
||||||
|
I'm planning to do the same operation on the other repos, then :
|
||||||
|
|
||||||
|
* if everything seems right,
|
||||||
|
* if `git annex sync` works between all those fellows
|
||||||
|
* etc,
|
||||||
|
* then I would perform the reflog expire, gc prune on some then all of them, etc.
|
||||||
|
|
||||||
|
Joey, does this seem okay? Any comment?
|
||||||
|
|
||||||
|
"""]]
|
Loading…
Reference in a new issue