[[!comment format=mdwn
 username="joey"
 subject="""comment 5"""
 date="2015-09-18T16:27:37Z"
 content="""
For all git-annex knows, the remote repository may be actively making
changes to its own git-annex branch. So, forcing pushes of it could lose
data, and are not a good idea, and so not done, whereas synced/git-annex
is force pushed.

If git-annex is indeed being run in the remote repository, it will eventually
try to merge the newly pushed synced/git-annex with its local git-annex
branch, notice the forget operation has started, and automatically handle
updating its git-annex branch appropriatly to be a child of the new
synced/git-annex branch. At that point, pushes of the git-annex branch will
work again.

Since your remote is on a hosting service that doesn't use git-annex, that
doesn't happen, and you'll need to force push to get that branch to update.
(Although it's somewhat optional to do so; other clients using that remote
with git-annex sync will pull down the synced/git-annex branch and keep
working fine even if you never force push the git-annex branch.)

Clearly all this is pretty complicated, but I don't see a good way to improve
the behavior, unless there's some way to detect that the remote repository
is not running git-annex, and so assume it's safe to auto-force-push that
branch. I suppose it could check to see if the remote repository has an
annex.uuid set, and if not, assume it's not using git-annex. But, if this
assumption turns out to be wrong (due to a race, or a problem communicating
the annex.uuid, etc), data loss could result.

Maybe a better fix would be to improve the note about this on git-annex
forget's man page, and perhaps also make git-annex sync print some helpful
message when it detects this situation.
"""]]
