132 votes

Parcourir et afficher des fichiers dans un dépôt Git sans clonage

Existe-t-il un moyen de parcourir et d’afficher des fichiers dans un dépôt Git sans le cloner au préalable? Je peux faire ceux de svn en utilisant les commandes:

svn ls / path / to / repo 
svn cat / path / to / repo / fichier-en-repo

Je peux supposément utiliser git show mais en faisant:

git show / chemin / à / repo
git show HEAD: / chemin / vers / repo

résulter à

fatal: pas un dépôt git

88voto

jkp Points 20410

La commande que vous voulez, c'est git-ls-à distance qui vous permet d'obtenir quelques informations sur les dépôts distants, mais tu ne peux pas afficher l'historique ou de la liste de répertoires ou quelque chose de ce niveau: pour l'essentiel, il ne vous permet de voir les objets à distance à un très haut niveau (vous pouvez voir les dirigeants actuels et balises, par exemple).

Le seul vrai moyen de faire ce que vous voulez (si j'ai bien compris) serait d'utiliser ssh pour exécuter une commande à distance et de retourner les résultats, par exemple:

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

Ce que vous voulez serait joli fonctionnalité s'ils pouvaient ajouter, mais de ce que j'ai lu c'est pas très facile depuis l'obtention de l'histoire etc a besoin de beaucoup d'informations locales à git, et à ce stade, vous pourriez aussi bien avoir fait un git fetch.

24voto

Jakub Narębski Points 87537

Git est distribué système de contrôle de version, alors que la Subversion est centralisée (client-serveur) système de contrôle de version. Ils fonctionnent différemment; vous y habituer. Merci de lire ma réponse d'expliquer les conséquences de cette différence de git équivalent de svn status -u question sur StackOverflow.

De me répéter un peu: dans un système de contrôle de version (comme CVS ou Subversion) presque toutes les commandes sont traitées sur le serveur, et de les impliquer réseau. Très peu de commandes sont effectuées localement. Notez que pour avoir de bonnes performances de "svn status" et "svn diff" la Subversion des magasins de copie primitive " des extraits de la version du client, de ne pas avoir à impliquer le transfert de réseau pour ces opérations communes (ce qui signifie que Subversion = 2 x la taille de répertoire de travail au moins).

Dans la répartition de système de contrôle de version (comme Git, Mercurial ou Bazar), où vous avez locales copie (clone) de l'ensemble du référentiel, presque toutes les commandes sont effectuées sur le client. Veery quelques commandes nécessitent la connexion réseau à un autre dépositaire (au serveur).

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

  • Vous pouvez dresser la liste de toutes les références sur la distance avec "git ls-distance <URL>".
  • Vous pouvez obtenir un instantané (d'une partie) de stockage (si le serveur distant est activé) avec
    "git archive --remote=<URL> TÊTE".
  • Vous pouvez cloner seulement quelques derniers commits (dite "superficielle clone") avec
    "git clone --depth=1 <URL>".
  • Si le serveur git fournit l'interface web de référentiel, vous pouvez l'utiliser pour naviguer.

17voto

Jerome Baum Points 331

Désolé, mais consultez http://git-scm.com/book/fr/Git-Internals-Transfer-Protocols pour plus d'informations sur la procédure à suivre pour certains protocoles de transport. Notez que cela ne fonctionnera pas pour git standard sur SSH.

Pour git sur SSH, un git côté serveur mis à jour devrait vous permettre d'archiver git directement à partir de la télécommande, ce que vous pourriez par exemple diriger vers "tar t" pour obtenir la liste de tous les fichiers d'un commit.

2voto

Anne van Rossum Points 518

C'est sans doute considéré comme sale par certains, mais une solution très pratique en cas de dépôts github est juste pour faire 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/"

Le rendre exécutable et accessible des cours: chmod a+x git-ls; sudo cp git-ls /usr/local/bin. Maintenant, vous avez simplement à le faire fonctionner comme vous le souhaitez:

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

Savoir qu'il y a un git instaweb utilitaire pour vos fichiers locaux. Pour avoir la capacité de afficher les fichiers et un serveur qui n'a à mon avis pas détruire tout de la nature décentralisée des caractéristiques de git.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X