Comment puis-je déterminer l’URL à partir de laquelle un référentiel Git local a été cloné?

J’ai sorti un projet de GitHub il y a quelques jours. J’ai depuis découvert qu’il existe plusieurs fourches sur GitHub, et j’ai négligé de noter celle que j’ai prise à l’origine. Comment puis-je déterminer laquelle de ces fourches j’ai tirées?

Si vous ne voulez que l’URL distante, ou l’intégrité référentielle a été rompue:

 git config --get remote.origin.url 

Si vous avez besoin d’une sortie complète ou d’une intégrité référentielle intacte:

 git remote show origin 

Lors de l’utilisation de git clone (à partir de GitHub ou de tout repository source), le nom par défaut de la source du clone est “origin”. Utiliser git remote show affichera les informations sur ce nom distant. Les premières lignes doivent montrer:

 C:\Users\jaredpar\VsVim> git remote show origin * remote origin Fetch URL: git@github.com:jaredpar/VsVim.git Push URL: git@github.com:jaredpar/VsVim.git HEAD branch: master Remote twigs: 

Si vous souhaitez utiliser la valeur dans le script, vous devez utiliser la première commande répertoriée dans cette réponse.

Si vous le souhaitez à des fins de script, vous ne pouvez obtenir que l’URL avec

 git config --get remote.origin.url 

Tu peux essayer:

 git remote -v 

Il imprimera toutes les URL de récupération / d’envoi de vos télécommandes.

Pour obtenir la réponse:

 git ls-remote --get-url [REMOTE] 

C’est mieux que de lire la configuration; reportez-vous à la page de manuel relative à git-ls-remote :

–get-url

Développez l’URL du référentiel distant en tenant compte de tout paramètre de configuration "url..insteadOf" (Voir git-config(1) ) et quittez sans parler à la télécommande.

Comme indiqué par @Jefromi, cette option a été ajoutée à la version 1.7.5 et n’est pas documentée avant la version 1.7.12.2 (2012-09).

Avec Git 2.7 (sortie le 5 janvier 2015), vous disposez d’une solution plus cohérente utilisant git remote :

 git remote get-url origin 

(joli pendentif de git remote set-url origin )

Voir commit 96f78d3 (16 sept. 2015) de Ben Boeckel ( mathstuf ) .
(Fusion par Junio ​​C Hamano – gitster – dans commit e437cbd , 05 oct. 2015) :

remote: append la sous-commande get-url

Développer à la insteadOf fait partie de ls-remote --url et il n’y a aucun moyen de développer pushInsteadOf .
Ajoutez une sous get-url commande get-url pour pouvoir interroger les deux, ainsi qu’un moyen d’obtenir toutes les URL configurées.

 get-url: 

Récupère les URL pour une télécommande.
Les configurations de insteadOf et de pushInsteadOf sont développées ici.
Par défaut, seule la première URL est répertoriée.

  • Avec ‘ --push ‘, les URL push sont interrogées plutôt que de récupérer les URL.
  • Avec ‘ --all ‘, toutes les URL de la télécommande seront listées.

Avant git 2.7, vous aviez:

  git config --get remote.[REMOTE].url git ls-remote --get-url [REMOTE] git remote show [REMOTE] 

Pour résumer, il y a au moins quatre façons:

(Ce qui suit a été essayé pour le repository officiel de Linux)

Plus petite information:

 $ git config --get remote.origin.url https://github.com/torvalds/linux.git 

et

 $ git ls-remote --get-url https://github.com/torvalds/linux.git 

Plus d’information:

 $ git remote -v origin https://github.com/torvalds/linux.git (fetch) origin https://github.com/torvalds/linux.git (push) 

Encore plus d’informations:

 $ git remote show origin * remote origin Fetch URL: https://github.com/torvalds/linux.git Push URL: https://github.com/torvalds/linux.git HEAD branch: master Remote branch: master tracked Local branch configured for 'git pull': master merges with remote master Local ref configured for 'git push': master pushes to master (up to date) 

Réponse courte:

 $ git remote show -n origin 

ou une alternative pour les scripts rapides:

 $ git config --get remote.origin.url 

Quelques informations:

  1. $ git remote -v imprimera toutes les télécommandes (pas ce que vous voulez). Vous voulez l’origine non?
  2. $ git remote show origin beaucoup mieux, montre seulement l’ origin mais prend trop de temps (testé sur git version 1.8.1.msysgit.1).

J’ai fini avec: $ git remote show -n origin , qui semble être le plus rapide. Avec -n les têtes distantes (twigs AKA) ne seront pas récupérées. Vous n’avez pas besoin de ce type d’informations, non?

http://www.kernel.org/pub//software/scm/git/docs/git-remote.html

Vous pouvez postuler | grep -i fetch | grep -i fetch les trois versions pour afficher uniquement l’URL de récupération.

Si vous avez besoin de vitesse pure, utilisez:

 $ git config --get remote.origin.url 

Merci à @Jefromi de l’ avoir signalé.

Je pense que vous pouvez le trouver sous .git/config et remote["origin"] si vous ne le manipulez pas.

La télécommande en amont peut ne pas être appelée “origine”, alors voici une variante:

 remote=$(git config --get branch.master.remote) url=$(git config --get remote.$remote.url) basename=$(basename "$url" .git) echo $basename 

Ou:

 basename $(git config --get remote.$(git config --get branch.master.remote).url) .git 

Pour plus de variables utiles, il y a:

 $ git config -l 

Pour obtenir l’adresse IP / nom d’hôte d’ origin

Pour les référentiels ssh:// :

 git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d "/" 

Pour les repositorys git:// :

 git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d ":" 

Pour compléter les autres réponses: Si, pour une raison quelconque, la télécommande a été modifiée et ne reflète donc pas l’origine, la toute première entrée du renvoi (la dernière entrée affichée par la commande git reflog ) devrait indiquer à l’origine cloné de.

par exemple

 $ git reflog | tail -n 1 f34be46 HEAD@{0}: clone: from https://github.com/git/git $ 

(N’oubliez pas que le reflog peut être purgé, donc cela ne garantit pas le bon fonctionnement.)

L’URL Git sera dans le fichier de configuration Git. La valeur correspond à l’ url de la clé:

  cd project_dir cat .git/config | grep url | awk '{print $3}' 

Imprimer des URL de récupération distante nommées arbitrairement:

 git remote -v | grep fetch | awk '{print $2}' 

Avec git remote show origin vous devez vous trouver dans le répertoire des projets. Mais si vous voulez déterminer les URL de n’importe où ailleurs, vous pouvez utiliser:

 cat /.git/config | grep url 

Si vous avez souvent besoin de cette commande, vous pouvez définir un alias dans votre .bash_profile .bashrc ou .bash_profile avec MacOS.

 alias giturl='cat ./.git/config | grep url' 

Il vous suffit donc d’appeler giturl dans le dossier racine de Git pour obtenir simplement son URL.


Si vous étendez cet alias comme ça

 alias giturl='cat .git/config | grep -i url | cut -d'=' -f 2' 

vous obtenez uniquement l’URL simple sans le précédent

“url =”

dans

url = http://example.com/repo.git

vous obtenez plus de possibilités dans son utilisation:

Exemple

Sur Mac, vous pouvez appeler open $(giturl) pour ouvrir l’URL dans le navigateur standard.

Ou chrome $(giturl) pour l’ouvrir avec le navigateur Chrome sous Linux.

Un moyen simple consiste à ouvrir le fichier .git/config :

 cat .git/config 

Éditer:

vim .git/config ou

nano .git/config

Si vous ne connaissez pas le nom de la télécommande en amont pour une twig, vous pouvez commencer par vérifier le nom de la twig en amont sur laquelle la twig en cours a été construite. Utilisez git rev-parse comme ceci:

 git rev-parse --symbolic-full-name --abbrev-ref @{upstream} 

Cela montre que la twig en amont qui était la source de la twig en cours. Cela peut être analysé pour obtenir le nom distant comme ceci:

 git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | cut -d / -f 1 

Maintenant, prenez cela et dirigez-le vers git ls-remote et vous obtiendrez l’URL de la télécommande en amont qui est la source de la twig en cours:

 git ls-remote --get-url \ $(git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | cut -d / -f 1) 

Maintenant, il convient de noter que ce n’est pas nécessairement la même que le référentiel distant source à partir duquel vous avez cloné. Dans de nombreux cas, cela suffira.

J’utilise essentiellement:

 git remote get-url origin 

Il fonctionne pour la console de commande Git Bash ou la console de commande CMD sous Windows. Cela dit, cela fonctionne avec la version 2.x de Git.

Je ne peux jamais me souvenir de tous les parameters des commandes Git, donc je mets juste un alias dans le fichier ~/.gitconfig qui me semble plus ~/.gitconfig , donc je peux m’en souvenir et cela se traduit par moins de frappe:

 [alias] url = ls-remote --get-url 

Après avoir rechargé le terminal, vous pouvez simplement taper:

 > git url 

Voici quelques unes de mes plus fréquemment utilisées:

 [alias] cd = checkout ls = branch lsr = branch --remote lst = describe --tags 
 #!/bin/bash git-remote-url() { local rmt=$1; shift || { printf "Usage: git-remote-url [REMOTE]\n" >&2; return 1; } local url if ! git config --get remote.${rmt}.url &>/dev/null; then printf "%s\n" "Error: not a valid remote name" && return 1 # Verify remote using 'git remote -v' command fi url=`git config --get remote.${rmt}.url` # Parse remote if local clone used SSH checkout [[ "$url" == git@* ]] \ && { url="https://github.com/${url##*:}" >&2; }; \ { url="${url%%.git}" >&2; }; printf "%s\n" "$url" } 

Usage:

 # Either launch a new terminal and copy `git-remote-url` into the current shell process, # or create a shell script and add it to the PATH to enable command invocation with bash. # Create a local clone of your repo with SSH, or HTTPS git clone git@github.com:your-username/your-repository.git cd your-repository git-remote-url origin 

Sortie:

 https://github.com/your-username/your-repository