Git repository URL - SSH syntax without absolute path

GitSsh

Git Problem Overview


I'm running a git repository server accessible via SSH, on a custom port (let's say 12345). I have found that in this case the repository URLs need to be specified using SSH syntax:

git clone ssh://[email protected]:12345/absolute/path/to/repository

I'd like to setup it in such a way that it would be possible for users to clone repositories without specifying the absolute path.

git clone ssh://[email protected]:12345/repository.git

I have researched the topic and found the following options:

  1. Remove the custom port from the URL and make the users add it to their ~/.ssh/config file (a last-resort workaround rather than a solution).
  2. Drop SSH and use git-daemon and specify its --base-path parameter (still a workaround...)
  3. Use an utility like gitosis or gitolite - but wouldn't it be an overkill to use it for this purpose only? Gitosis is discontinued, gitolite is a quite huge piece of software...

All I want is a "prettier" SSH URL with custom port (so I can distribute the whole git clone command and require nothing more from the remote user). Which one of the above solutions would be the most viable in my case?

Git Solutions


Solution 1 - Git

If you use the alternate form of ssh URLs you don't need an absolute path. For example...

git clone [email protected]:repos/myrepo.git

...will clone repository repos/myrepo.git relative to my home directory, although this doesn't permit use of an alternate port. However, you can also use ~ in either form to indicate the user's home directory, e.g.:

git clone ssh://[email protected]:12345/~/repository.git

Incidentally, despite being discontinued, gitosis functions quite well, and the code is both small and easy to understand. It offers a useful set of access controls and self-service management of repositories. I wouldn't discount it completely.

Solution 2 - Git

I do this, not exactly what you asked, but close and with prettier links:

create a path like

/srv/git 

where you place you git projects

next make a symbolic link to home:

ln -s /srv/git $HOME

next you can have shorter links

git clone user@server:git/myproject.git

if you have a single project you can get rid of the git/ part in the url

ln -s /srv/git/myproject.git $HOME

next

git clone user@server:myproject.git

will work. Of course the .git at the end of the URL comes only from creating the bare with .git in the name. Note also that ssh:// part is not needed: the @ implies it is an ssh URL for git.

Updated: let me add a sidenote: following the most recent Filesystem Hierarchy Standard I use now /srv/git as repository location.

Solution 3 - Git

I'm not sure this really deserves to be a whole answer, but I'm sick of fighting with comment-specific formatting rules. I come to say:

I just want to add that this seems to be a version-specific change, though I'm not sure if it's client-side or server/repo-holder side: I have a .git/config file with lots of URLs like:

[remote "bob"]
    url = ssh://ME@MACHINE<strong>/~ME</strong>/repositories/REPO.git
    fetch = +refs/heads/*:refs/remotes/bob/* 

They all worked when I set them up ... in 2010, and were still working the last time I used those remotes, in 2016 or so.

Now, on version 2.18.0, those don't work, and I need to use the :/~ME/foo or :/~/foo notation. Which is to say that what you're trying to do no hasn't always been wrong.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNeoView Question on Stackoverflow
Solution 1 - GitlarsksView Answer on Stackoverflow
Solution 2 - Gituser1708042View Answer on Stackoverflow
Solution 3 - GitEric AndersonView Answer on Stackoverflow