web-dev-qa-db-fra.com

Est-il possible de lister tous les dépôts existants en utilisant git?

Pour cloner un référentiel git, vous devez avoir le nom du référentiel. Lorsque vous travaillez avec de nombreux référentiels, il peut être difficile de retenir tous les noms. Je me demande donc s’il est possible de répertorier tous les référentiels existants sur le serveur distant à l’aide d’une commande git.

22
Cyclonecode

Vous devez soit avoir un accès Shell à la machine hébergeant le démon git et voir les paramètres utilisés pour appeler git-démon, soit utiliser l'interface Git Web (navigateur de référentiel) appelée GitWeb .

Référez-vous également cette question existante

Il existe un autre moyen, mais il a besoin de l'aide des administrateurs du serveur de votre entreprise. Git propose une interface Web navigable appelée "GitWeb" qui peut être configurée pour afficher tous les projets servis par git.

Les détails sont expliqués dans GitWeb README - la clé de configuration qui vous intéresse est appelée "GITWEB_PROJECTROOT":

GITWEB_PROJECTROOT The root directory for all projects shown by gitweb. Must be set correctly for gitweb to find repositories to display. See also "Gitweb repositories" in the INSTALL file for gitweb.

Vous pourriez peut-être avoir une conversation avec vos administrateurs - Gitweb peut être un grand bénéfice pour tous les développeurs.

Autant que je sache, cela doit être fait sur la machine qui exécute git-daemon. Vous devez soit vérifier les arguments où git-daemon a été appelé, soit éventuellement vérifier /etc/inetd.conf

8
IUnknown

Comme j'avais accès à la machine distante dans Shell, j'ai fini par écrire un petit script fabric qui pouvait être exécuté à partir du terminal pour répertorier tous les référentiels distants:

#!/bin/python

from fabric.api import run, env
from fabric.colors import green 

env.hosts = ['<hostname>'];
env.user = '<user>';
env.password = '<password>';

def lr():
  "Lists all remote repositories"
  print(green("listing remote repos"))
  run('cd /var/git; ls -al')

Je peux maintenant lister tous les dépôts distants en émettant la commande suivante depuis le terminal:

fab lr
0
Cyclonecode

Cela dépend fortement de la manière dont ces référentiels sont accédés. Il n’existe donc pas de réponse simple et uniforme:

  • Si les dépôts sont servis par git-daemon et/ou gitweb, vous pouvez consulter la configuration pour voir où elle conserve ses dépôts et répertorier le contenu de ce répertoire.
  • Si les référentiels sont accessibles via ssh, ils peuvent être situés n'importe où dans le système de fichiers. Vous devriez pouvoir les trouver en recherchant tous les répertoires du système contenant un fichier nommé HEAD (par exemple, locate HEAD | grep \/HEAD$), mais cela pourrait produire des faux positifs et affichera également les pensions qui sont uniquement des répertoires de travail locaux et qui ne sont pas partagées ou ont été sauvegardées. cloné à partir d'une autre source.
  • Si les dépôts sont gérés par gitlab , ils ne sont pas du tout dans le système de fichiers. Vous devez donc utiliser l'interface Web de gitlab pour les lister. Notez que certains dépôts peuvent être masqués de cette liste si vous n'êtes pas autorisé à y accéder.
0
Dave Sherohman