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

4097

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

Tim
la source
163
Avec git 2.7 (Q4 2015), ce git remote get-url originsera possible. Voir ma réponse ci
VonC
21
git remote get-url originne fonctionne pas pour moi - peut-être déconseillé? git remote show originbien travaillé.
Klik
47
git remote -vvous donner beaucoup d'informations, y compris cela.
Thorbjørn Ravn Andersen
git remote get-url origin --pushfonctionne bien, apparemment pas déprécié et fournit de belles informations brèves ( git remote show originpeut être très verbeux) qv git help remote.
NeilG

Réponses:

5760

Si vous souhaitez uniquement l'URL distante ou si vous n'êtes pas connecté à un réseau pouvant atteindre le référentiel distant:

git config --get remote.origin.url

Si vous avez besoin d'une sortie complète et que vous êtes sur un réseau pouvant atteindre le référentiel distant où réside l'origine:

git remote show origin

Lors de l'utilisation git clone(depuis GitHub, ou tout autre référentiel source d'ailleurs) le nom par défaut de la source du clone est "origine". L'utilisation git remote showaffichera les informations sur ce nom distant. Les premières lignes devraient montrer:

C:\Users\jaredpar\VsVim> git remote show origin
* remote origin
  Fetch URL: [email protected]:jaredpar/VsVim.git
  Push  URL: [email protected]:jaredpar/VsVim.git
  HEAD branch: master
  Remote branches:

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

JaredPar
la source
2
Utilisez git config comme décrit ci-dessous à la place si vous utilisez jgit avec amazon-s3.
barryku
6
Bien que cela ne soit pas pertinent pour l'objectif de la question d'origine, veuillez noter que si vous tentez d'obtenir "l'URL de transmission" et que plusieurs URL sont saisies pour la télécommande spécifiée, vous devrez soit utiliser git remote show origin(éventuellement avec l'indicateur -n fourni par @ Casey), ou avec git remote -vcomme suggéré par @Montaro et @rodel.
Incroyable
Dans quel fichier est-ce écrit? Je pensais que le .gitconfigdossier l'aurait, mais je ne l'ai pas vu dans le mien.
2014
1
@ayjay ´~/.gitconfigest global pour tous les gitréférentiels, cela vient ici de la configuration locale qui est généralement dedans .git/config(cependant pour les sous-modules git la réponse est un peu plus difficile). Notez que strace git config --get remote.origin.urlc'est votre ami.
Tino
1
Mais l'URL d'origine ne doit pas nécessairement être l'URL de la télécommande actuellement utilisée. Pour afficher l'URL réellement utilisée, vous auriez alors besoin de cette solution: stackoverflow.com/a/40630957/1069083
rubo77
620

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

git config --get remote.origin.url
Cascabel
la source
38
Ceci est la bonne réponse. C'est beaucoup plus rapide et cela fonctionne même, si l'url distante n'est plus disponible ( git remote show originmontre juste "conq: le référentiel n'existe pas.").
apfelbox
5
Ce n'est pas tout à fait la bonne réponse à cause de l'option config url.<base>.insteadOf. Voir ma réponse - git a une commande à cet effet.
Carl Suster
2
@arcresu Cool, +1 pour vous! À ma défense, cette commande n'a été ajoutée qu'en mars 2011 et n'a été documentée qu'en septembre 2012.
Cascabel
1
@Catskul Only --git-dir est pertinent (la configuration est dans le répertoire git, indépendamment de l'emplacement de l'arborescence de travail), et cela fonctionne pour moi. Êtes-vous sûr d'avoir spécifié le chemin d'accès au répertoire .git réel, pas son répertoire parent?
Cascabel
553

Tu peux essayer:

git remote -v

Il imprimera toutes les URL fetch / push de vos télécommandes.

Montaro
la source
255

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 pourgit-ls-remote :

--get-url

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

Comme souligné par @Jefromi, cette option a été ajoutée dans la v1.7.5 et n'est pas documentée avant la v1.7.12.2 (2012-09).

Carl Suster
la source
2
bon: cela fournirait également la même chose pour les versions précédentes> git remote -v | grep fetch | awk '{print $ 2}'
ravi.zombie
1
Je pense que la plupart des autres réponses sont davantage une démonstration des commandes git et une exposition sur l'histoire de git. C'est la seule réponse qui ne suppose pas que votre amont est appelé origin.
Mike D
Il s'agit du remplacement le plus direct de l'ancienne remote get-urloption. C'est un remplacement sans rendez-vous.
Klaatu von Schlacker
111

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

git remote get-url origin

(joli pendentif de git remote set-url origin <newurl>)

Voir commit 96f78d3 (16 sept. 2015) de Ben Boeckel ( mathstuf) .
(Fusionné par Junio ​​C Hamano - gitster- en commit e437cbd , 05 oct.2015 ) :

à distance: ajouter la sous-commande get-url

L'expansion insteadOffait partie de ls-remote --urlet il n'y a aucun moyen de se développer pushInsteadOfégalement.
Ajoutez une get-urlsous - commande pour pouvoir interroger les deux ainsi qu'un moyen d'obtenir toutes les URL configurées.

get-url:

Récupère les URL d'une télécommande.
Les configurations pour insteadOfet pushInsteadOfsont 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 les URL fetch.
  • Avec ' --all', toutes les URL de la télécommande seront répertoriées.

Avant git 2.7, vous aviez:

 git config --get remote.[REMOTE].url
 git ls-remote --get-url [REMOTE]
 git remote show [REMOTE]
VonC
la source
4
Après 5 ans, beaucoup de choses ont changé et cela devrait être la réponse acceptée maintenant. Mais ajoutez peut-être aussi la syntaxe pré-2.7.
msp
58

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

(Ce qui suit a été essayé pour le référentiel Linux officiel)

Moins d'informations:

$ 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)
non-polarité
la source
4
Remarque git config --get remote.origin.urlrécupère l'URL d'origine qui a été définie avec git remote add ...ou git remote set-url ...tandis que git ls-remote --get-url originrécupère l'URL qui est réellement utilisée pour accéder à la télécommande - qui peut être différente en présence de git config --global url.XXX.insteadOf YYY. Les deux sorties peuvent donc différer! Notez également que git ls-remote --get-url(sans origin) ne récupère pas nécessairement origin, à la place, il affiche le suivi en amont, il échouera donc par exemple dans l'état HEAD détaché.
Tino
24

Je pense que vous pouvez le trouver sous .git/configet remote["origin"]si vous n'avez pas manipulé cela.

meder omuraliev
la source
22

Réponse courte:

$ git remote show -n origin

ou, une alternative aux scripts rapides purs:

$ git config --get remote.origin.url

Quelques informations:

  1. $ git remote -vimprimera toutes les télécommandes (pas ce que vous voulez). Vous voulez de l'origine, non?
  2. $ git remote show originbeaucoup mieux, ne s'affiche que originmais prend trop de temps (testé sur la version 1.8.1.msysgit.1 de git).

Je me suis retrouvé avec:, $ git remote show -n originqui semble être le plus rapide. Avec -nelle ne récupérera pas les têtes distantes (branches AKA). 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 appliquer | grep -i fetchaux 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é.

Casey
la source
22

Pour moi, c'est le moyen le plus simple (moins de frappe):

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

en fait, je l'ai dans un aliasappelé squi fait:

git remote -v
git status

Vous pouvez ajouter à votre profil avec: alias s='git remote -v && git status'

Code Knox
la source
17

Je ne me souviens jamais de tous les paramètres des commandes Git, donc je mets juste un alias dans le ~/.gitconfigfichier qui a plus de sens pour moi, 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 alors 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

Je recommande également fortement git-extras qui a une git info commande qui fournit des informations beaucoup plus détaillées sur les branches distantes et locales.

Ce qui serait cool
la source
J'aime beaucoup ça!
Alfie
15

L'URL Git sera à l'intérieur du fichier de configuration Git. La valeur correspond à la clé url.

Pour Mac et Linux, utilisez les commandes ci-dessous:

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

Pour Windows, ouvrez le fichier ci-dessous dans n'importe quel éditeur de texte et recherchez la valeur de la clé url.

project_dir/.git/config

Remarque: Cela fonctionnera même si vous êtes hors ligne ou si le serveur git distant a été arrêté.

Harikrishnan
la source
1
C'est ce qui a fonctionné pour moi une fois que le serveur distant qui hébergeait la caisse d'origine a été supprimé. Toutes les autres tentatives ont échoué: git remote get-url origin >> fatal: No such remote 'origin',git config --get remote.origin.url >>
jxramos
14

J'utilise essentiellement:

git remote get-url origin

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

maytham-ɯɐɥʇʎɐɯ
la source
12
git config --list

Cette commande donnera toutes les informations relatives à votre référentiel.

Kasthuri Shravankumar
la source
10

La télécommande en amont ne peut pas être appelée "origine", voici donc 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 des variables plus utiles, il y a:

$ git config -l
cagney
la source
9

Pour obtenir l'adresse IP / le nom d'hôte de origin

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

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

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

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d ":"
Stephen
la source
4
Car sshcela ne fonctionne qu'en l'absence de ~/.ssh/configqui réécrit le nom d'hôte ou l'alias.
Tino
9

Pour compléter les autres réponses: Si la télécommande a pour une raison quelconque été modifiée et ne reflète donc pas l' origine origine, la première entrée dans le reflog (la dernière entrée affichée par la commande git reflog) doit indiquer où le repo a été cloné de.

par exemple

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

(Gardez à l'esprit que le reflog peut être purgé, il n'est donc pas garanti que cela fonctionne.)

Jeremy
la source
1
C'est probablement le seul véritable moyen d'obtenir la télécommande "d'origine" si elle a été modifiée.
Justin Ohms
8

Avec git remote show originvous devez être dans le répertoire des projets. Mais si vous souhaitez déterminer les URL de n'importe où ailleurs, vous pouvez utiliser:

cat <path2project>/.git/config | grep url

Si vous avez souvent besoin de cette commande, vous pouvez définir un alias dans votre .bashrcou .bash_profileavec MacOS.

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

Il vous suffit donc d'appeler giturldans le dossier racine Git afin d'obtenir simplement son URL.


Si vous étendez cet alias comme ceci

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.

Sedat Kilinc
la source
8

Une manière simple consiste à ouvrir le .git/configfichier:

cat .git/config

Éditer:

vim .git/config ou

nano .git/config

Omar Makled
la source
1
Cela suppose que vous êtes sous Linux (?).
Peter Mortensen
7

Imprimez des URL de récupération à distance arbitrairement nommées:

git remote -v | grep fetch | awk '{print $2}'
Aron
la source
6

Si vous ne connaissez pas le nom de la télécommande en amont pour une branche, vous pouvez d'abord le rechercher en inspectant le nom de la branche en amont sur laquelle la branche actuelle a été construite. Utilisez git rev-parsecomme ceci:

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

Cela montre cette branche en amont qui était la source de la branche actuelle. 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-remoteet vous obtiendrez l'URL de la télécommande en amont qui est la source de la branche actuelle:

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

Il convient maintenant de noter que ce n'est pas nécessairement le même que le référentiel distant source à partir duquel le clonage a été effectué. Dans de nombreux cas, cependant, ce sera suffisant.

Christophe
la source
5
#!/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 [email protected]:your-username/your-repository.git
cd your-repository

git-remote-url origin

Production:

https://github.com/your-username/your-repository
ecwpz91
la source
5

Je préfère celui-ci car il est plus facile à retenir:

git config -l

Il répertorie toutes les informations utiles telles que:

user.name=Your Name
[email protected]
core.autocrlf=input
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=https://github.com/mapstruct/mapstruct-examples
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
Witold Kaczurba
la source
1

il suffit d'utiliser cette commande où votre dossier .git placé

git config --get remote.origin.url

si vous êtes connecté au réseau

git remote show origin

il vous montrera l'URL à partir de laquelle un référentiel Git local a été initialement cloné.

j'espère que cette aide

Ali Raza
la source