2013-01-15 1 views
43

Sto eseguendo un server repository git accessibile tramite SSH, su una porta personalizzata (diciamo 12345). Ho scoperto che in questo caso gli URL del repository devono essere specificate utilizzando la sintassi SSH:URL repository Git - Sintassi SSH senza percorso assoluto

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

vorrei per impostare in modo tale che sarebbe stato possibile per gli utenti di clonare i repository senza specificare il assoluto percorso.

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

ho studiato l'argomento ed ha trovato le seguenti opzioni:

  1. rimuovere la porta personalizzato dal URL e rendere gli utenti aggiungerlo al file ~/.ssh/config (una soluzione di ultima istanza, piuttosto che un soluzione).
  2. goccia SSH e usare git-daemon e specificare la sua --base-path parametro (ancora una soluzione ...)
  3. usare un'utility come gitosis o gitolite - ma non sarebbe un peso inutile usarlo solo per questo scopo? Gitosis è interrotto, gitolite è piuttosto un enorme pezzo di software ...

Tutto quello che voglio è un URL SSH "più bella" con porta personalizzata (in modo da poter distribuire l'intero comando di git clone e richiedono niente di più dal telecomando utente). Quale delle soluzioni di cui sopra sarebbe la più praticabile nel mio caso?

+0

Gitolite non è in realtà così grande, ma è davvero ben gestito e abbastanza facile da configurare. Ho avuto i miei dubbi anche per la prima volta, ma sono stato felice di averlo. – jszakmeister

risposta

56

Se si utilizza il modulo alternativo di ssh URL non è necessario un percorso assoluto. Per esempio ...

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

... sarà clonare repository repos/myrepo.git relativo alla mia home directory, anche se questo non consente l'utilizzo di una porta alternativa. Tuttavia, è anche possibile utilizzare ~ sia in forma per indicare la directory home dell'utente, ad es .:

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

Per inciso, pur essendo interrotto, gitosis funzioni abbastanza bene, e il codice è sia piccolo e facile da capire. Offre un utile insieme di controlli di accesso e gestione self-service dei repository. Non lo scarterei completamente.

+4

È ancora possibile impostare una porta personalizzata per il primo esempio in SSH config. In realtà è così che preferisco farlo. Faccio riferimento al server remoto tramite un alias nei repository git e imposto tutti i parametri necessari nella configurazione SSH. Quindi, se decido di cambiare la configurazione del mio server in qualche modo, cambio semplicemente la configurazione SSH. – morgoth84

+0

Ho appena provato questo con git versione 2.7.4, e sembra che solo il secondo esempio funzioni. – untill

+0

Il primo esempio continua a funzionare con la versione di 'git' fino alla 2.9.3. Questa è solo una parte della sintassi standard. Se hai difficoltà potresti voler aprire una nuova domanda. – larsks

5

faccio questo, non è esattamente quello che hai chiesto, ma stretti e con collegamenti più bella:

creare un percorso come

/srv/git 

dove si posiziona si git progetti

prossimo fare una simbolica link a casa:

ln -s /srv/git $HOME 

successivo è possibile avere collegamenti più corti

git clone [email protected]:git/myproject.git 

se si dispone di un singolo progetto si può sbarazzarsi della git/parte nell'URL

prossimo

git clone [email protected]:myproject.git 

funzionerà. Ovviamente il .git alla fine dell'URL proviene solo dalla creazione del nudo con .git nel nome. Nota anche che ssh: // part non è necessaria: il @ implica che è un URL ssh per git.

Aggiornamento: consentitemi di aggiungere un sidenote: in seguito al più recente Filesystem Hierarchy Standard Ora utilizzo /srv/git come posizione del repository.