CI to automate build of cargo lockfiles on different Alpine releases for git-annex aports https://gitlab.alpinelinux.org/alpine/aports/-/tree/master/community/git-annex
Find a file
Joey Hess c99fb58909 merge: Use fast-forward merges when possible.
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.)
2011-11-06 15:22:40 -04:00
Annex merge: Use fast-forward merges when possible. 2011-11-06 15:22:40 -04:00
Backend use SHA256 by default 2011-11-04 15:51:01 -04:00
Build moved files around 2011-08-20 16:11:42 -04:00
Command tweak 2011-11-02 14:24:44 -04:00
Common rename 2011-10-05 16:02:51 -04:00
debian merge: Use fast-forward merges when possible. 2011-11-06 15:22:40 -04:00
doc merge: Use fast-forward merges when possible. 2011-11-06 15:22:40 -04:00
Git faster union merge of multiple branches into index 2011-10-07 13:36:48 -04:00
Logs Record uuid when auto-initializing a remote so it shows in status. 2011-11-02 14:18:21 -04:00
Messages avoid showing json lists of remotes when not in json mode 2011-09-02 16:44:04 -04:00
Remote do commit location changes to remote in copy --to 2011-10-27 18:03:36 -04:00
Types refactoring and cleanup 2011-10-30 00:28:22 -04:00
Upgrade sheesh. seriously? 2011-10-29 13:17:37 -04:00
Utility Pass -t to rsync to preserve timestamps. 2011-11-04 19:41:11 -04:00
.gitattributes decruft 2011-06-22 18:56:08 -04:00
.gitignore split groups of related functions out of Utility 2011-08-22 16:14:12 -04:00
Annex.hs The fromkey command now takes the key as its first parameter. The --key option is no longer used. 2011-10-31 12:56:07 -04:00
Backend.hs use SHA256 by default 2011-11-04 15:51:01 -04:00
CHANGELOG symlinks 2010-10-27 15:14:59 -04:00
Checks.hs cleanup 2011-10-31 12:15:38 -04:00
CmdLine.hs cleanup 2011-10-31 12:15:38 -04:00
Command.hs cleanup 2011-10-31 12:15:38 -04:00
Common.hs broke up Utility 2011-10-16 00:50:12 -04:00
Config.hs The fromkey command now takes the key as its first parameter. The --key option is no longer used. 2011-10-31 12:56:07 -04:00
configure.hs add git version check to configure 2011-10-12 00:28:33 -04:00
Crypto.hs minor syntax changes 2011-10-11 14:43:45 -04:00
git-annex-shell.hs refactoring and cleanup 2011-10-30 00:28:22 -04:00
git-annex.cabal releasing version 3.20111105 2011-11-05 15:55:19 -04:00
git-annex.hs renamed GitRepo to Git 2011-06-30 13:21:39 -04:00
git-union-merge.hs faster union merge of multiple branches into index 2011-10-07 13:36:48 -04:00
Git.hs reorganize log modules 2011-10-15 16:21:08 -04:00
GitAnnex.hs better command name 2011-10-31 15:18:41 -04:00
GPL symlinks 2010-10-27 15:14:59 -04:00
Init.hs Record uuid when auto-initializing a remote so it shows in status. 2011-11-02 14:18:21 -04:00
INSTALL symlinks 2010-10-27 15:14:59 -04:00
Limit.hs playing with >=> 2011-10-31 23:39:55 -04:00
Locations.hs clean Annex stuff out of Utility/ 2011-10-16 00:04:26 -04:00
Makefile propigate test suite failure 2011-10-06 11:12:03 -04:00
mdwn2man mwdn2man: Fix a bug in newline supression. Closes: #606578 2010-12-10 17:27:02 -04:00
Messages.hs minor syntax changes 2011-10-11 14:43:45 -04:00
Options.hs refactoring and cleanup 2011-10-30 00:28:22 -04:00
README add README 2011-05-13 19:20:54 -04:00
Remote.hs drop --from is now supported to remove file content from a remote. 2011-10-28 17:26:38 -04:00
Seek.hs refactoring and cleanup 2011-10-30 00:28:22 -04:00
Setup.hs cabal can now be used to build git-annex. 2011-06-30 14:55:03 -04:00
test.hs better command name 2011-10-31 15:18:41 -04:00
Types.hs break out non-log stuff to separate module 2011-10-15 17:47:03 -04:00
Upgrade.hs rename 2011-10-05 16:02:51 -04:00

git-annex allows managing files with git, without checking the file
contents into git. While that may seem paradoxical, it is useful when
dealing with files larger than git can currently easily handle, whether due
to limitations in memory, checksumming time, or disk space.

For documentation, see doc/ or <http://git-annex.branchable.com/>