c99fb58909
Thanks Valentin Haenel for a test case showing how non-fast-forward merges could result in an ongoing pull/merge/push cycle. While the git-annex branch is fast-forwarded, git-annex's index file is still updated using the union merge strategy as before. There's no other way to update the index that would be any faster. It is possible that a union merge and a fast-forward result in different file contents: Files should have the same lines, but a union merge may change their order. If this happens, the next commit made to the git-annex branch will have some unnecessary changes to line orders, but the consistency of data should be preserved. Note that when the journal contains changes, a fast-forward is never attempted, which is fine, because committing those changes would be vanishingly unlikely to leave the git-annex branch at a commit that already exists in one of the remotes. The real difficulty is handling the case where multiple remotes have all changed. git-annex does find the best (ie, newest) one and fast forwards to it. If the remotes are diverged, no fast-forward is done at all. It would be possible to pick one, fast forward to it, and make a merge commit to the rest, I see no benefit to adding that complexity. Determining the best of N changed remotes requires N*2+1 calls to git-log, but these are fast git-log calls, and N is typically small. Also, typically some or all of the remote refs will be the same, and git-log is not called to compare those. In the real world I expect this will almost always add only 1 git-log call to the merge process. (Which already makes N anyway.) |
||
---|---|---|
.. | ||
bugs | ||
design | ||
download | ||
encryption | ||
forum | ||
install | ||
news | ||
special_remotes | ||
templates | ||
tips | ||
todo | ||
upgrades | ||
use_case | ||
users | ||
walkthrough | ||
backends.mdwn | ||
bare_repositories.mdwn | ||
bugs.mdwn | ||
comments.mdwn | ||
contact.mdwn | ||
copies.mdwn | ||
design.mdwn | ||
distributed_version_control.mdwn | ||
download.mdwn | ||
encryption.mdwn | ||
feeds.mdwn | ||
forum.mdwn | ||
future_proofing.mdwn | ||
git-annex-shell.mdwn | ||
git-annex.mdwn | ||
git-union-merge.mdwn | ||
GPL | ||
index.mdwn | ||
install.mdwn | ||
internals.mdwn | ||
location_tracking.mdwn | ||
logo.png | ||
logo_small.png | ||
news.mdwn | ||
not.mdwn | ||
repomap.png | ||
special_remotes.mdwn | ||
summary.mdwn | ||
tips.mdwn | ||
todo.mdwn | ||
transferring_data.mdwn | ||
trust.mdwn | ||
upgrades.mdwn | ||
users.mdwn | ||
walkthrough.mdwn |