Using digital media masters
Master files -
either original sources or as close as possible -
are precious and should be carefully tracked.
Digital media files -
e.g. photos, videos, music -
are often large and binary encoded,
which poses special challenges for their tracking.
Git-annex
Digital media masters are tracked with git and git-annex.
Git is a version control system -
a repository for historic versions of file contents of a folder.
Git-annex is an extension to git,
better handling large files.
Paths
You are recommended to use path suffix "annex"
for media master projects.
Examples:
- ~/public_annex/home-videos
- ~/private_annex/friends-snoring
- ~/shared_annex_family/xmas_photos
Create
To turn a folder into a git repository,
go into the folder,
and initialize its git and git-annex databases:
git init
git annex init
To use git-annex only for large files (git for smaller ones),
add e.g. the following to .gitattributes
(and (save)[#Save] that file):
* annex.largefiles=(largerthan=100kb)
Alternatively,
(clone)[#Clone] an existing project.
Status
To check status of metadata, use git:
git status
To check status of file content storage, use git-annex:
git annex info
Save
To "take a snapshot" of one of more files
for git-annex archival,
first mark which files are involved
and then archive their (changes to) content:
git annex add foo bar
git annex add baz
git commit -m "Update foo bar, and add baz."
Alternatively you can update (but not add)
in one go:
git commit -m "Update foo bar." foo bar
Clone
To collaborate on a shared git repository,
first create a local clone from the shared location,
and then FIXME:
git clone git://[[!template id=githost]]/example
git annex FIXME
Then from time to time syncronize:
git annex sync --content --all
Alternatively (e.g. on slow/expensive network),
syncronize only metadata and only with nearest clones:
git annex sync --fast
Publish
To publish a git repository initially created locally,
first create a new empty git and git annex publicly,
then tell your local git where its new origin will be,
and finally push your local git and git annex into its new public location:
ssh [[!template id=githost]] git init --bare --shared /srv/git/[[!template id=githost]]/example.git
ssh [[!template id=githost]] GIT_DIR=/srv/git/[[!template id=githost]]/example.git git annex init
git remote add origin [[!template id=githost]]:/srv/git/[[!template id=githost]]/example.git
git push --set-upstream origin master
git annex sync --content --all
References
- [media-master][Source of this document]
[media-master]: https://source.redpill.dk/media-master.
"Digital media master material"