switch - git list tags remote



exportation git depuis le dépôt distant github (7)

J'aimerais exporter depuis le référentiel distant github, sans le cloner. Semblable à svn export, je ne veux pas obtenir de dossier .git avec. Je peux le contourner en clonant et en supprimant le dossier .git. Je me demande s'il y a un moyen plus propre?

Je l'ai lu quelque part, vous pouvez utiliser l'archive git pour y parvenir.

Cependant, j'ai eu les erreurs suivantes ..

$ git archive --format=tar [email protected]:xxx/yyy.git master | tar -xf -

Invalid command: 'git-upload-archive 'xxx/yyy.git''
You appear to be using ssh to clone a git:// URL.
Make sure your core.gitProxy config option and the
GIT_PROXY_COMMAND environment variable are NOT set.
fatal: The remote end hung up unexpectedly

Toute aide est la bienvenue. Merci.


Grâce au support Subversion de GitHub, vous pouvez utiliser svn export pour obtenir le projet sans aucun fichier de contrôle de version:

svn export https://github.com/user/project/trunk

Notez le format de l'URL:

  • L'URL de base est https://github.com/
  • USERNAME/PROJECTNAME sans .git
  • /trunk ajouté à la fin

De cette façon, vous pouvez aussi obtenir des branches et des sous-répertoires.

Cela crée un répertoire avec les fichiers exportés. Il n'est pas possible de créer directement un fichier tar / zip, vous devez le faire en deux étapes (export + zip). C'est une limitation de svn export elle-même.

Comme @Jon souligné, cela créera l'exportation dans un répertoire nommé trunk par défaut. Vous pouvez spécifier un nom différent si vous préférez:

svn export https://github.com/username/projectname/trunk projectname

Vous pouvez utiliser cette technique pour exporter n’importe quel sous-répertoire du projet. Par exemple, si vous ne voulez que some/path , vous pouvez faire:

svn export https://github.com/username/projectname/trunk/some/path local-dir-name

Vous pouvez également obtenir des chemins à partir de branches et de balises. Le noeud final https://github.com/username/projectname se comporte parfaitement comme un référentiel Subversion avec une mise en page normale. Vous trouverez donc des branches dans https://github.com/username/projectname/branches et des balises dans https://github.com/username/projectname/tags .

Avant d’exporter par erreur quelque chose de grand, il est bon de vérifier d’abord le contenu du chemin. Vous pouvez le faire en utilisant svn ls , par exemple:

svn ls https://github.com/username/projectname/

Normalement, cela devrait vous donner:

branches/
tags/
trunk/

Vous pouvez explorer le référentiel de manière itérative de cette façon.


J'ai déjà rencontré ce même problème auparavant, et AFAICT, cela ne semble fonctionner qu'avec Bitbucket, par exemple

ysim:~/repos$ git archive --format=tar --prefix=alembic/ --remote=ssh://[email protected]/zzzeek/alembic.git master | tar -xf -
ysim:~/repos$ ls
alembic

Mais j’ai trouvé une solution de contournement pour GitHub en utilisant wget - ainsi, dans la nouvelle interface de GitHub, vous trouverez un bouton indiquant "Download ZIP" (Télécharger le fichier ZIP) au bas de la barre latérale droite; faites un clic droit dessus et copiez l'adresse du lien.

Ensuite, dans la ligne de commande (j'ai eu l'idée d' here ):

wget -qO- -O tmp.zip <zipball url> && unzip tmp.zip && rm tmp.zip

Cela va le décompresser dans un répertoire appelé quelque chose comme repo-master/ .

Si vous le souhaitez, vous pouvez également alias this dans votre .gitconfig afin que vous n'ayez pas à vous souvenir / à taper tout cela, par exemple

export = "! f() { wget -qO- -O tmp.zip \"$1\" && unzip tmp.zip && rm tmp.zip; }; f"

Vous pouvez donc faire quelque chose comme ceci dans la coque:

ysim:~/repos$ git export https://github.com/ysim/verbinski/archive/master.zip
ysim:~/repos$ ls
verbinski-master

Pour des raisons inconnues (du moins pour moi), GitHub ne supporte pas cela .

We don’t support people running git-archive against our servers.

Cela semble idiot, puisque via SVN, vous le pouvez, mais ... j'ai voté en faveur de la réponse de @Janos .


Pour une exportation normale :

$ git archive master | tar -x -C /path/to/destination

Pour une archive zip :

$ git archive --format zip --output /path/to/destination/file.zip master

Bien sûr, pour que cela fonctionne, vous devrez d'abord le cloner localement, il n'y a pas de solution propre .


Si vous avez besoin d'une archive d'un commit sur github, je pense que c'est le moyen le plus simple:

Supposons que le nom de votre référentiel est https://github.com/arielgabizon/librustzcash

et l'identifiant de validation est 4be41ca6160c16abfd983c8c878b6ea04105b224

Il suffit d'aller dans votre navigateur à l'adresse https://github.com/arielgabizon/librustzcash/archive/4be41ca6160c16abfd983c8c878b6ea04105b224.tar.gz

et, au moins sur Google Chrome, le téléchargement du fichier commencera.


Si vous en avez besoin pour les commits nommés (c'est-à-dire les branches et les balises), vous pouvez utiliser git clone --depth=1 combiné avec git archive

Il faut savoir que git clone --depth=1 clone tous les top commits sur toutes les branches et balises (pas seulement master ). Ainsi, après avoir effectué un clone aussi superficiel, vous pouvez entrer dans le répertoire local et créer une git archive --format=tar tag_to_be_exported .

Donc, si vous voulez exporter le tag release1.1

git clone --depth=1 [email protected]:xxx/yyy.git
cd yyy
git archive --format=tar release1.1 -o release1.1.tar

Si bien que vous avez besoin d'exporter des identifiants de commit non nommés, cela peut être une bonne solution.


Une façon d'y parvenir est d'utiliser le support SVN offert par GIT.

Les étapes à suivre pour effectuer cette opération sont (pour Cent os);

yum install git

yum install subversion

Ensuite, pour effectuer une exportation sélective, utilisez la syntaxe suivante:

svn export  <git repository>/<source folder> <empty target folder>  --no-auth-cache --force --username <active directory username>

Si vous n'utilisez pas le paramètre --no-auth-cache lorsque vous êtes invité à enregistrer le mot de passe, saisissez "non" pour des raisons de sécurité, sinon il sera enregistré sans chiffrement.

Lors de la traduction de la notation GIT en notation SVN, le mappage suivant s'applique; remplacer "tree / master" par "trunk" pour le maître remplacer "tree / branch_name" par "branches / branch_name" pour les branches

Cela fonctionne pour les fichiers et les répertoires.





github