URL - sintaxe do repositório Git sem localização absoluta

estou a correr um servidor de repositório git acessível através do SSH, numa porta personalizada (digamos 12345). Descobri que, neste caso, os URLs do repositório precisam ser especificados usando a sintaxe SSH:

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

Eu gostaria de configurá-lo de tal forma que seria possível para os usuários clonar repositórios sem especificar o caminho absoluto.

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

pesquisei o tema e encontrei as seguintes opções:

  1. remover o porto personalizado a partir da URL e fazer os usuários adicioná-lo ao seu arquivo ~/.ssh/config (uma solução de último recurso em vez de uma solução).
  2. Drop SSH and use git-daemon and specify its --base-path parameter (still a workaround...)
  3. usar um utilitário como gitosis ou gitolite - mas não seria um exagero usá-lo apenas para este fim? Gitosis é descontinuado, gitolite é uma peça de software bastante grande...

Tudo o que eu quero é um URL SSH "mais bonito" com porta personalizada (para que possa distribuir todo o git clone command and require nothing more from the remote user). Qual das soluções acima seria a mais viável no meu caso?

 57
Author: Neo, 2013-01-15

3 answers

Se usar a forma alternativa de ssh URLs, não precisa de um caminho absoluto. Por exemplo...

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

...irá clonar o repositório repos/myrepo.git em relação à minha pasta pessoal, embora isto não permita o uso de uma porta alternativa. No entanto, você também pode usar ~ em qualquer forma para indicar o diretório doméstico do usuário, por exemplo:

git clone ssh://[email protected]:12345/~/repository.git
A propósito, apesar de ter sido descontinuado, gitosis funciona muito bem, e o código é pequeno e fácil de entender. Oferece um conjunto útil de controlos de acesso e gestão de auto-serviço dos repositórios. Não o descartaria completamente.
 78
Author: larsks, 2013-01-16 00:04:22
Eu faço isto, não exactamente o que pediste, mas perto e com ligações mais bonitas:

Crie um caminho como

/srv/git 

Onde você coloca seus Projetos git

Em seguida, faça uma ligação simbólica para casa:

ln -s /srv/git $HOME

A seguir podes ter ligações mais curtas

git clone user@server:git/myproject.git

Se tiver um único projecto pode livrar-se do git/ part no url

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

Próximo

git clone user@server:myproject.git
Vai funcionar. Claro que sim .git no final da URL vem apenas de criar o bare com .git na nome. Note também que a parte SSH:// não é necessária: o @ implica que é um URL SSH para o git.

Actualizado: deixe-me adicionar uma nota lateral: seguindo a mais recente norma de Hierarquia do sistema de Ficheiros uso agora /srv/git como localização do repositório.

 7
Author: user1708042, 2017-09-14 09:31:03
Não sei se isto merece ser uma resposta completa, mas estou farto de discutir com regras de formatação específicas. Vim dizer:

Só quero acrescentar que isto parece ser uma alteração específica da versão, embora não tenha a certeza se é do lado do cliente ou do lado do servidor/repo-holder: tenho um ficheiro .git/config com montes de URLs como:

[remote "bob"]
    url = ssh://ME@MACHINE<strong>/~ME</strong>/repositories/REPO.git
    fetch = +refs/heads/*:refs/remotes/bob/* 
Todos funcionaram quando os montei ... em 2010, e ainda estavam a trabalhar da última vez que usei esses comandos, em 2016 ou assim. Agora, na versão 2.18.0, esses não funcionam, e eu preciso usar a notação :/~ME/foo ou :/~/foo. Ou seja, o que estás a tentar fazer nem sempre foi errado.
 0
Author: Eric Anderson, 2020-02-05 19:31:52