git-annex/doc/automatic_conflict_resolution.mdwn
Joey Hess 7189dfd77d git-annex (5.20131127) unstable; urgency=low
* webapp: Detect when upgrades are available, and upgrade if the user
    desires.
    (Only when git-annex is installed using the prebuilt binaries
    from git-annex upstream, not from eg Debian.)
  * assistant: Detect when the git-annex binary is modified or replaced,
    and either prompt the user to restart the program, or automatically
    restart it.
  * annex.autoupgrade configures both the above upgrade behaviors.
  * Added support for quvi 0.9. Slightly suboptimal due to limitations in its
    interface compared with the old version.
  * Bug fix: annex.version did not get set on automatic upgrade to v5 direct
    mode repo, so the upgrade was performed repeatedly, slowing commands down.
  * webapp: Fix bug that broke switching between local repositories
    that use the new guarded direct mode.
  * Android: Fix stripping of the git-annex binary.
  * Android: Make terminal app show git-annex version number.
  * Android: Re-enable XMPP support.
  * reinject: Allow to be used in direct mode.
  * Futher improvements to git repo repair. Has now been tested in tens
    of thousands of intentionally damaged repos, and successfully
    repaired them all.
  * Allow use of --unused in bare repository.

# imported from the archive
2013-11-27 18:41:44 -04:00

23 lines
1.3 KiB
Markdown

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 resoltuion 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.