Fixing git-annex repository
How to get out of trouble with git-annex
The most important thing is my collection of photos. Recently I was restructuring it. Moving files around and creating the uniform directory structure.
I should have been using git commands (like
git mv) to go about that restructuring. Unfortunately, I used regular
cp which meant I broke git-annex repository.
Let me explain how git-annex works.
By default when you add something to git-annex it will replace the file with a symlink. It will be pointing to a special place in
.git directory. It’s a simple and efficient solution.
If you move any of those symlinks with git commands everything will be fine.
In most cases touching them with non-git commands also doesn’t cause problems, as what matters for git-annex is where those links point to and not what they are named.
From the nature of symlinks if you move them in a directory hierarchy they will be broken because they will be pointing to the wrong thing.
And that’s exactly what I did.
At that point, normally, I would panic worried that I either lost my files or lost my work organizing it all. But I didn’t. Knowing that the files are safe in git-annex repository I could always revert the latest commit to getting the symlinks back. And if that would fail I had the copy of my disk from couple hours earlier, which meant that I could recover it from there.
After a little bit of googling I found the page on git-annex site with a hint how to fix my problem.
Turns out git-annex has a nifty command
git annex fix which would fix the symlinks. The only requisite for it to work was that the symlink needs to be known by git. Quick
git add for those files fixed that problem.
git add I run
git annex fix and all my photos were once again accessible.