Trailing slash conflicts with url.<base>.insteadOf

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hey everyone,

I ran into an edge case with the url.<base>.insteadOf option and
trailing slashes.

I can clone a git repo with a trailing slash.
    $ git clone https://github.com/NiceGuyIT/git-test-parent/
    Cloning into 'git-test-parent'...
    remote: Enumerating objects: 4, done.
    remote: Counting objects: 100% (4/4), done.
    remote: Compressing objects: 100% (3/3), done.
    remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
    Receiving objects: 100% (4/4), done.

Cloning with SSH and a trailing slash fails. This is expected.
    $ git clone ssh://git@xxxxxxxxxx/NiceGuyIT/git-test-parent/
    Cloning into 'git-test-parent'...
    ERROR: Repository not found.
    fatal: Could not read from remote repository.

    Please make sure you have the correct access rights
    and the repository exists.

Inside a repo, I can add a submodule with a trailing slash using HTTPS.
    $ cd git-test-parent
    $ git submodule add https://github.com/NiceGuyIT/git-test-child/
    Cloning into
'/home/user/Projects/git-test/git-test-parent/git-test-child'...
    remote: Enumerating objects: 4, done.
    remote: Counting objects: 100% (4/4), done.
    remote: Compressing objects: 100% (3/3), done.
    remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
    Receiving objects: 100% (4/4), done.
    $ cat .gitmodules
    [submodule "git-test-child"]
            path = git-test-child
            url = https://github.com/NiceGuyIT/git-test-child/

Adding a submodule with a trailing slash using SSH faills. Again, this
is expected.
    $ cd git-test-parent
    $ git submodule add ssh://git@xxxxxxxxxx/NiceGuyIT/git-test-child.git/
    Cloning into
'/home/user/Projects/git-test/git-test-parent/git-test-child'...
    ERROR: Repository not found.
    fatal: Could not read from remote repository.

    Please make sure you have the correct access rights
    and the repository exists.
    fatal: clone of
'ssh://git@xxxxxxxxxx/NiceGuyIT/git-test-child.git/' into submodule
path '/home/user/Projects/git-test/git-test-parent/git-test-child'
failed

The edge case comes from Golang's FAQ[1] why it uses HTTPS to clone a
repo. Specifically, how to
authenticate against private repos when using `go get`. I'm using the
2nd option which uses git's
`url.<base>.insteadOf` configuration to replace HTTPS URLs with SSH
urls. I added this to my
`~/.gitconfig`.
    [url "ssh://git@xxxxxxxxxx/"]
        insteadOf = https://github.com/

With this option configured, adding a submodule via HTTPS with a
trailing slash fails. The fact this
fails is not that surprising.
    $ git submodule add https://github.com/NiceGuyIT/git-test-child/
    Cloning into
'/home/user/Projects/git-test/git-test-parent/git-test-child'...
    ERROR: Repository not found.
    fatal: Could not read from remote repository.

    Please make sure you have the correct access rights
    and the repository exists.
    fatal: clone of 'https://github.com/NiceGuyIT/git-test-child/'
into submodule path
'/home/user/Projects/git-test/git-test-parent/git-test-child' failed

The problem comes from working with other git repos where they do not
have this option configured
and add submodules with a trailing slash. As shown above, the trailing
slash is included in
`.gitmodules`. `git clone --recursive` will fail if submodules were
added with trailing slashes and
you have `insteadOf` configured to replace HTTPS with SSH. I ran into
this problem[2] when trying to
`git submodule update --init --recursive` and having it fail on some
repos but not all repos.

I'm using git version 2.26.2 on openSUSE Leap 15.1. I don't have the
capacity to test a newer
version or compile the latest version. I've added a submodule with a
trailing slash to
the above project. To reproduce this, add the `insteadOf` option
mentioned above to your
`~/.gitconfig` and perform a recursive clone. The parent repo will be
cloned but not the submodules.
    git clone --recursive https://github.com/NiceGuyIT/git-test-parent

Is it possible to remove trailing slashes on HTTPS URLs before doing
the URL rewrite?

Thank you for providing great software!

David


[1]: https://golang.org/doc/faq#git_https
[2]: https://github.com/purpleidea/mgmt/issues/602#issuecomment-640063867



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux