Normally, git-annex repositories consist of symlinks that are checked into git, and in turn point at the content of large files that is stored in `.git/annex/objects/`. Direct mode gets rid of the symlinks. The advantage of direct mode is that you can access files directly, including modifying them. The disadvantage is that most regular git commands cannot safely be used, and only a subset of git-annex commands can be used. Repositories created by the [[assistant]] use direct mode by default. ## enabling (and disabling) direct mode Any repository can be converted to use direct mode at any time, and if you decide not to use it, you can convert back to indirect mode just as easily. Also, you can have one clone of a repository using direct mode, and another using indirect mode; direct mode interoperates. To start using direct mode: git annex direct To stop using direct mode: git annex indirect With direct mode, you're operating without large swathes of git-annex's carefully constructed safety net. So you're strongly encouraged to tell git-annex that your direct mode repository cannot be trusted to retain the content of a file (because any file can be deleted or modified at any time). To do so: git annex untrust . ## use a direct mode repository Perhaps the best way to use a direct mode repository is with the git-annex assistant. Otherwise, the main command that's used in direct mode repositories is `git annex sync`. This automatically adds new files, commits all changed files to git, pushes them out, pulls down any changes, etc. You can also run `git annex get` to transfer the content of files into your direct mode repository. Or if the direct mode repository is a remote of some other, regular git-annex repository, you can use commands in the other repository like `git annex copy` and `git annex move` to transfer the contents of files to the direct mode repository. You can use `git commit --staged`. (But not `git commit -a` .. It'll commit whole large files into git!) You can use `git log` and other git query commands. ## what doesn't work in direct mode In general git-annex commands will only work in direct mode repositories on files whose content is not present. That's because such files are still represented as symlinks, which git-annex commands know how to operate on. So, `git annex get` works, but `git annex drop` and `git annex move` don't, and things like `git annex status` show incomplete information. It's technically possible to make all git-annex commands work in direct mode repositories, so this might change. Check back to this page to see current status about what works and what doesn't. As for git commands, you can probably use some git working tree manipulation commands, like `git checkout` and `git revert` in useful ways... But beware, these commands can replace files that are present in your repository with broken symlinks. If that file was the only copy you had of something, it'll be lost. This is one reason it's wise to make git-annex untrust your direct mode repositories. Still, you can lose data using these sort of git commands, so use extreme caution.