Configuring git annex for this
I wanted to use git-annex, so
$ git init $ git annex init "some useful name"
But I don't want every thing in annex, because Calibre use some text file to save some metadata, so I used:
$ git config annex.largefiles "include=* exclude=*.opf exclude=*.json"
then lets add everything
$ git annex add * $ git add * $ git commit -m "first commit"
Calibre need read and write access on the its database, so let unlock it:
$ git annex unlock metadata.db
On my other computer I only need to do
$ git clone $user@$host:Calibre\ library $ cd Calibre\ library $ git annex init "another useful name" $ git annex get . $ git annex unlock metadata.db
The problem is that every time you will
git annex sync, git annex
will lock again the metadata.db, so lets unlock it automatically. I
use git hooks, in
.git/hooks/post-commit I have
#!/bin/bash git annex edit metadata.db
don't forget to make this file executable
$ chmod a+x .git/hooks/post-commit
Day to day operation
$ git annex add .
Will put new file into the annex
$ git add .
Will take care of the files that should no go into annex
$ git annex sync
Will make the repositories exchange informations about all this, and make remote change local
$ git annex get .
Will make remote book locally available
You should not run calibre on the two computer simultaneously, or without syncing before it. If you do, you will have a conflict that git-annex will automatically solve by rename both of the file.
You can then either:
- Choose one. If no books have been changed or added on one of the
computer, to use the other
metadata.dbwill not make you loose any information
- rebuild it.
calibredb restore_databasewon't do it, but will tell you how to do it.
Checking the library
You can use
calibredb check_library to check you library is
correct. If you use git for it, it will always tell you that it is not
correct: there is this author ".git" it doesn't know about. Just don't
care about it.
Maybe this can be solved by using
vcsh but apparently
git annex it not well tested yet.
mr to automatically run all this, but some config could be
done (I believe) to have
git annex copy --auto do what it should.
There are also the git annex assistant for this kind of automatic synchronizations of contents, but I don't know if my automatic unlocking of one file will break this.
It might be interesting to find someway to unlock and lock the library only when running calibre, a simple script to launch calibre will do that. Note that each time you will lock and unlock, you will have a new commit in git.
You could also use direct mode in place of the auto unlock feature
git annex direct
Then remove the
post-commit git hook (or do not add it). Its a
simpler solution, but remember that interaction between git annex direct
repositories and plain git are complex and sometimes downright dangerous. See direct mode for details.
In particular, do not called
git add * in the above steps, as that will commit all books into git.