Unfortunately, git-annex is completely broken in Windows right now:

  • In a direct mode repository, git annex add stages the git-annex link, but then git annex sync stages the file content into git, so the file content gets committed to git.
  • In a v7 repository (with or without adjusted branches), git annex add stages the git-annex link, but git status then shows the file as modified from what was staged, and git diff --cached shows a diff from the git-annex link to the file content. And git commit -a commits the file content to git, not to git-annex.

Something has bitrotted. Note that git-annex in Windows Subsystem for Linux does not have these problems and seemed to work fairly well last time I tried it. --Joey

These seem surprisingly related in some way, given that direct mode is only being maintained and should not have changed its behavior at all. Perhaps there has been some change that is causing both problems?

In direct mode, git annex sync --content is running "git add -f" on each file in the work tree, including unmodified files and files that git annex add has staged annex links for already. That's stageDirect, apparently it falls through to the addgit action, that is supposed to only happen for not yet staged files that are dummy symlinks or something (this code is untouched since 2013). That suggests that catKey or toInodeCache returned Nothing which should not happen in this case.

So, the next step will be to build git-annex on Windows and instrument stageDirect to work out which thing it depends on has broken..

fixed --Joey