initremote type=git probe uuid

rather than matching path of an existing remote to find the uuid.

The main benefit of this is that locations not using ssh:// will work
now, including both paths and host:/path

The other benefit is that it's a simpler interface, no need to have an
existing remote with the same url and some other name. Although that
will still work of course.

This does rely on tryGitConfigRead working when given a Git.Repo that is
not a remote. Luckily, it works fine that way.

Also, tryGitConfigRead will auto-init a local repo that has a git-annex
branch. I did not enable auto-init of ssh repos though.

The uuid discovery actually happens twice; initremote discovers it,
and uses it to store the special remote config, but does not set it in the
git remote it creates. So the next run of git-annex does uuid discovery
again, and caches it that time. This could be improved for a tiny
speedup, but I didn't want to complicate things for that in this
commit.

Sponsored-by: Dartmouth College's DANDI project
This commit is contained in:
Joey Hess 2022-06-09 13:16:50 -04:00
parent 2f509e529e
commit 14584e7a38
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
5 changed files with 33 additions and 35 deletions

View file

@ -7,29 +7,12 @@ git-annex and git will use the remote the same as any normal git remote,
but its url will be recorded in the repository. One benefit of doing this
is it allows [[git-annex init|git-annex-init]] to autoenable the remote.
First you need a regular git remote with the url that you want to use for
the special remote.
git remote add tmpremote ssh://...
Then, to set up the special remote:
To set up such a special remote:
git annex initremote myremote type=git location=ssh://... autoenable=true
The location must be the same url as the existing git remote.
Now `git annex init` in each clone of the repository will autoenable myremote.
Note that the name of the git remote (`tmpremote` above) has to be
different than the name you later use for the special remote,
since [[git-annex initremote|git-annex-initremote]] will refuse to use the name of an existing
remote. To work around that, you could finish by removing `tmpremote` and
enable the special remote:
git remote remove tmpremote
git annex enableremote myremote
This only works for git repositories that have a git-annex uuid set,
because git-annex thinks about special remotes in terms of their uuid. So
it cannot be used with a git remote hosted somewhere that does not have
git-annex installed.
because special remotes have to have a uuid. So it cannot be used
with git repositories that are not git-annex repositories.