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
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.) |
||
---|---|---|
Annex | ||
Backend | ||
Build | ||
Command | ||
Common | ||
debian | ||
doc | ||
Git | ||
Logs | ||
Messages | ||
Remote | ||
Types | ||
Upgrade | ||
Utility | ||
.gitattributes | ||
.gitignore | ||
Annex.hs | ||
Backend.hs | ||
CHANGELOG | ||
Checks.hs | ||
CmdLine.hs | ||
Command.hs | ||
Common.hs | ||
Config.hs | ||
configure.hs | ||
Crypto.hs | ||
git-annex-shell.hs | ||
git-annex.cabal | ||
git-annex.hs | ||
git-union-merge.hs | ||
Git.hs | ||
GitAnnex.hs | ||
GPL | ||
Init.hs | ||
INSTALL | ||
Limit.hs | ||
Locations.hs | ||
Makefile | ||
mdwn2man | ||
Messages.hs | ||
Options.hs | ||
README | ||
Remote.hs | ||
Seek.hs | ||
Setup.hs | ||
test.hs | ||
Types.hs | ||
Upgrade.hs |
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/>