I've felt for a while that git-annex needed better support for managing the contents of past versions of files that are stored in the annex. I know some people get confused about whether git-annex even supports old versions of files (it does, but you should use indirect mode; direct mode doesn't guarantee old versions of files will be preserved). So today I've worked on adding command-line power for managing past versions: a new `--all` option. So, if you want to copy every version of every file in your repository to an archive, you can run `git annex copy --all --to archive`. Or if you've got a repository on a drive that's dying, you can run `git annex copy --all --to newdrive`, and then on the new drive, run `git annex fsck --all` to check all the data. In a bare repository, `--all` is default, so you can run `git annex get` inside a bare repository and it will try to get every version of every file that it can from the remotes. The tricky thing about `--all` is that since it's operating on objects and not files, it can't check `.gitattributes` settings, which are tied to the file name. I worried for a long time that adding `--all` would make annex.numcopies settings in those files not be honored, and that this would be a Bad Thing. The solution turns out to be simple: I just didn't implement `git annex drop --all`! Dropping is the only action that needs to check numcopies (move can also reduce the number of copies, but explicitly bypasses numcopies settings). I also added an `--unused` option. So if you have a repository that has been accumulating history, and you'd like to move all file contents not currently in use to a central server, you can run `git annex unused; git annex move --unused --to origin`