Running git annex sync
or using the assistant involves merging
changes from elsewhere into your repository's currently checked out branch.
This could lead to a merge conflict, perhaps because the same file
got changed in two different ways. A nice feature is that these
merge conflicts are automatically resolved, rather than leaving
git in the middle of a conflicted merge, which would prevent further
syncing from happening.
When a conflict occurs, there will be several messages printed about the merge conflict, and the file that has the merge conflict will be renamed, with ".variant-XXX" tacked onto it. So if there are two versions of file foo, you might end up with "foo.variant-AAA" and "foo.variant-BBB". It's then up to you to decide what to do with these two files. Perhaps you can manually combine them back into a single file. Or perhaps you choose to rename them to better names and keep two versions, or delete one version you don't want.
The "AAA" and "BBB" in the above example are essentially arbitrary (technically they are the MD5 checksum of the key). The automatic merge conflict resolution is designed so that if two or more repositories both get a merge conflict, and resolve it, the resolved repositories will not themselves conflict. This is why it doesn't use something nicer, like perhaps the name of the remote that the file came from.
See also: git-annex-resolvemerge
How to customise git-annex conflict resolution behaviour, such that for example: change naming convention of conflicted files with suffix or prefix, move conflicted files to another directory structure, overwrite conflicted files from preferred content ...
git annex merge
will do what you want, as long as you have git-annex 4.20130709 or newer.As far as I observed, "git annex merge" only merges the "git-annex" branch. My wish is to have the conflict resolution from "git annex sync" in the "master" branch, but no automatic commit, such that the user can verify and possibly correct the merge. The proposed merge could go to the index. Consider the following scenario:
The point is that I really like the conflict resolution, but still want to force the user to check the result.
@Matthias you need to install git-annex 4.20130709 or newer. Then
git-annex merge
will do what you want. As I said before.As for committing the merge, you can always adjust the result after the fact and use
git commit --amend
.@joeyh: This must be a misunderstanding of what I want. I use version 5.20140320. I can't find a workflow where "git annex merge" changes my master branch, it only updates the git-annex branch.
Thinking again of it after some time, I am basically fine with "git annex sync". The only thing I am uncomfortable with is that the automatic merge is pushed without review.
@Matthias, here is an example of git-annex merge updating the master branch from the synced/master branch that was pushed to it earlier:
If you are having trouble with it somehow, I'd suggest filing a bug report.