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:
- 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). - Drop SSH and use
git-daemon
and specify its--base-path
parameter (still a workaround...) - usar um utilitário como
gitosis
ougitolite
- 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?
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.
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.
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.