Parcourir et afficher les fichiers dans un repository git sans cloner

Existe-t-il un moyen de parcourir et d’afficher des fichiers dans un repository git sans le cloner d’abord? Je peux faire ceux de svn en utilisant les commandes:

 svn ls / path / to / repo 
 svn cat / path / to / repo / file-in-repo

Je peux supposer utiliser git show mais en train de faire:

 git show / path / to / repo
 git show HEAD: / path / to / repo

résultat à

 fatal: Pas un repository git

La commande que vous voulez est git ls-remote ce qui vous permet d’obtenir des informations sur les repositorys distants, mais vous ne pouvez pas afficher les répertoires d’historique ou de liste, ou tout autre élément de ce niveau: vous pouvez voir les HEADs et les tags actuels par exemple).

La seule façon réelle de faire ce que vous voulez (si je comprends bien) serait d’utiliser ssh pour exécuter une commande distante et renvoyer les résultats, par exemple:

 ssh me@otherhost "cd repo && git log -n 10" 

Ce que vous voulez, ce serait de belles fonctionnalités s’ils pouvaient l’append, mais de ce que j’ai lu, ce n’est pas très facile car obtenir de l’historique, etc., nécessite beaucoup d’informations pour être local. .

Jetez un coup d’œil à http://git-scm.com/book/en/Git-Internals-Transfer-Protocols pour plus d’informations sur la façon de procéder sur certains protocoles de transport. Notez que cela ne fonctionnera pas pour git standard sur SSH.

Pour git via SSH, un git côté serveur à jour devrait vous permettre d’archiver directement à partir de la télécommande, que vous pourriez ensuite diriger vers “tar t” pour obtenir une liste de tous les fichiers d’un commit donné.

Git est un système de contrôle de version dissortingbué , tandis que Subversion est un système de contrôle de version centralisé (client-serveur). Ils travaillent différemment habituer à cela. Veuillez lire ma réponse en expliquant les conséquences de cette différence sur l’ équivalent de svn status -u question sur StackOverflow.

Me répéter un peu: dans un système de contrôle de version centralisé (comme CVS ou Subversion), presque toutes les commandes sont traitées sur le serveur et impliquent le réseau. Très peu de commandes sont effectuées localement. Notez que pour avoir de bonnes performances de “svn status” et “svn diff”, Subversion stocke la “copie vierge” de la version extraite sur le client, pour ne pas impliquer le transfert réseau pour ces opérations communes (cela signifie que taille du répertoire de travail au moins).

Dans le système de contrôle de version dissortingbué (comme Git, Mercurial ou Bazaar), où vous avez une copie locale (clone) de tout un référentiel, presque toutes les commandes sont exécutées sur le client . Très peu de commandes nécessitent une connexion réseau à un autre référentiel (au serveur).

Le nombre de commandes que vous pouvez exécuter sur le serveur est limité.

  • Vous pouvez lister toutes les références à distance avec ” git ls-remote “.
  • Vous pouvez obtenir un instantané de (partie) du référentiel (si le serveur distant l’a activé) avec
    ” git archive –remote = HEAD”.
  • Vous ne pouvez cloner que quelques derniers commits (appelés “clone superficiel”) avec
    ” git clone –depth = 1 “.
  • Si le serveur fournit une interface Web git au référentiel, vous pouvez l’utiliser pour naviguer.

GitHub est compatible avec svn donc vous pouvez utiliser svn ls

 svn ls https://github.com/user/repository.git/twigs/master/ 

BitBucket supporte l’archive git pour que vous puissiez télécharger l’archive tar et lister les fichiers archivés. Ce n’est pas très efficace mais ça marche:

 git archive --remote=git@bitbucket.org:repository HEAD directory | tar -t 

Pas exactement, mais un moyen de contourner.

Utiliser l’API de développeur GitHub

  1. En ouvrant cela, vous obtiendrez les commits les plus récents.

    https://api.github.com/repos/learningequality/ka-lite/commits

    Vous pouvez obtenir les détails de validation spécifiques en joignant le hachage de validation à la fin de l’URL ci-dessus.

  2. Tous les fichiers (Vous avez besoin de sha pour l’arbre principal)

    https://api.github.com/repos/learningequality/ka-lite/git/trees/7b698a988683b161bdcd48a949b01e2b336b4c01

J’espère que cela peut aider.

Cela est probablement considéré comme sale par certains, mais une solution très pratique dans le cas des référentiels github consiste simplement à créer un script, par exemple “git-ls”:

 #!/bin/sh remote_url=${1:? "$0 requires URL as argument"} curl -s $remote_url | grep js-directory-link | sed "s/.* title=\"\(.*\)\".*/\1/" 

Rendez-le exécutable et accessible bien sûr: chmod a+x git-ls; sudo cp git-ls /usr/local/bin chmod a+x git-ls; sudo cp git-ls /usr/local/bin . Maintenant, il vous suffit de l’exécuter comme vous le souhaitez:

 git-ls https://github.com/mrquincle/aim-bzr git-ls https://github.com/mrquincle/aim-bzr/tree/master/aim_modules 

Sachez également qu’il existe un utilitaire git instaweb pour vos fichiers locaux. Avoir la possibilité d’afficher des fichiers et avoir un serveur comme celui-là, à mon avis, ne détruit aucune des caractéristiques décentralisées inhérentes à git.

Si vous connaissez la twig distante que vous souhaitez vérifier, vous pouvez trouver les dernières informations via:

 git ls-tree -r  --name-only