web-dev-qa-db-fra.com

URL du référentiel Git - Syntaxe SSH sans chemin absolu

J'exécute un serveur de référentiel git accessible via SSH, sur un port personnalisé (par exemple, 12345). J'ai constaté que dans ce cas, les URL du référentiel doivent être spécifiées à l'aide de la syntaxe SSH:

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

Je souhaite le configurer de telle sorte qu'il soit possible aux utilisateurs de cloner des référentiels sans spécifier le chemin absolute.

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

J'ai étudié le sujet et trouvé les options suivantes:

  1. Supprimez le port personnalisé de l'URL et demandez aux utilisateurs de l'ajouter à leur ~/.ssh/config fichier (solution de dernier recours plutôt qu'une solution).
  2. Supprimez SSH et utilisez git-daemon et spécifier son --base-path paramètre (toujours une solution de contournement ...)
  3. Utilisez un utilitaire tel que gitosis ou gitolite - mais ne serait-il pas excessif de l'utiliser uniquement à cette fin? La gitose est abandonnée, gitolite est un logiciel assez volumineux ...

Tout ce que je veux, c'est une URL "plus jolie" SSH avec un port personnalisé (pour pouvoir distribuer tout le git clone commande et n'exige rien de plus de l'utilisateur distant). Laquelle des solutions ci-dessus serait la plus viable dans mon cas?

52
Neo

Si vous utilisez la forme alternative de ssh URL, vous n'avez pas besoin d'un chemin absolu. Par exemple...

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

... va cloner le dépôt repos/myrepo.git par rapport à mon répertoire personnel, bien que cela ne permette pas l’utilisation d’un autre port. Cependant, vous pouvez aussi utiliser ~ sous l'une ou l'autre forme pour indiquer le répertoire de base de l'utilisateur, par exemple:

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

Incidemment, malgré son interruption, gitosis fonctionne très bien et le code est à la fois petit et facile à comprendre. Il offre un ensemble utile de contrôles d’accès et de gestion en libre service des référentiels. Je ne le négligerais pas complètement.

72
larsks

Je fais cela, pas exactement ce que vous avez demandé, mais fermez et avec de plus beaux liens:

créer un chemin comme

/srv/git 

où vous placez vos projets git

ensuite faire un lien symbolique à la maison:

ln -s /srv/git $HOME

ensuite, vous pouvez avoir des liens plus courts

git clone user@server:git/myproject.git

si vous avez un seul projet, vous pouvez vous débarrasser de git/part dans l'URL

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

suivant

git clone user@server:myproject.git

marchera. Bien sûr, le .git à la fin de l'URL provient uniquement de la création du nu avec .git dans le nom. Notez également que ssh: // part n’est pas nécessaire: le @ implique qu’il s’agit d’une URL ssh pour git.

Mise à jour: permettez-moi d'ajouter une note de bas de page: après la plus récente version norme de hiérarchie des systèmes de fichiers j'utilise maintenant /srv/git comme emplacement du référentiel.

6
user1708042