web-dev-qa-db-fra.com

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

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

3175
Tim

Si vous voulez seulement l'URL distante ou l'intégrité référentielle a été brisée:

git config --get remote.Origin.url

Si vous avez besoin d'une sortie complète ou si l'intégrité référentielle est intacte:

git remote show Origin

Lors de l'utilisation de git clone (à partir de GitHub ou de tout autre référentiel 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 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, utilisez la première commande répertoriée dans cette réponse.

4535
JaredPar

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

git config --get remote.Origin.url
540
Cascabel

Tu peux essayer:

git remote -v

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

463
Montaro

Pour avoir la réponse:

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

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

--get-url

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

Comme l'a souligné @Jefromi, cette option a été ajoutée à v1.7.5 et n'a été documentée que jusqu'au v1.7.12.2 (2012-09).

216
Carl Suster

Avec Git 2.7 (version du 5 janvier 2015), vous avez une solution plus cohérente avec 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) .
(Fusion de Junio ​​C Hamano - gitster - dans commit e437cbd , 5 octobre 2015):

remote: ajouter la sous-commande get-url

Expanding insteadOf fait partie de ls-remote --url et il n’ya aucun moyen pour développer pushInsteadOf également.
Ajoutez une sous-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 d'une télécommande.
Les configurations pour insteadOf et 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 chercher des 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]
80
VonC

Pour résumer, il y a au moins quatre manières:

(Ce qui suit a été essayé pour le dépôt officiel Linux)

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)
48

Réponse courte:

$ git remote show -n Origin

ou, une alternative aux scripts rapides purs:

$ git config --get remote.Origin.url

Quelques infos:

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

Je me suis retrouvé avec: $ git remote show -n Origin, qui semble être le plus rapide. Avec -n, les têtes distantes ne seront pas récupérées (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 fetch aux trois versions pour afficher uniquement l'URL d'extraction.

Si vous avez besoin de vitesse pure, utilisez:

$ git config --get remote.Origin.url

Merci à @Jefromi pour l'avoir signalé.

19
Casey

Je pense que vous pouvez le trouver sous .git/config et remote["Origin"] si vous n’avez pas manipulé cela.

16
meder omuraliev

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

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

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

8
Harikrishnan

La télécommande en amont ne peut pas s'appeler "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 des variables plus utiles, il y a:

$ git config -l
8
cagney

Je ne me souviens jamais de tous les paramètres des commandes Git, aussi je viens de mettre un alias dans le fichier ~/.gitconfig qui me semble plus logique, pour que je puisse 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-uns de mes plus fréquemment utilisés:

[alias]
cd = checkout
ls = branch
lsr = branch --remote
lst = describe --tags
8
What Would Be Cool

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

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

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

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

git ls-remote --get-url Origin | cut -f 2 -d @ | cut -f 1 -d ":"
7
Stephen

J'utilise essentiellement:

git remote get-url Origin

Cela 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.

7

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

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

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

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

Il 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.

6
Sedat Kilinc

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 originale, la toute première entrée du journal (c'est-à-dire la dernière entrée affichée par la commande git reflog) devrait indiquer où le repo a été cloné à l'origine.

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é, cela ne garantit donc pas son efficacité.)

6
Jeremy

Une manière simple est d'ouvrir le fichier .git/config:

cat .git/config

Éditer:

vim .git/config ou

nano .git/config

6
Omar Makled

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

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

Si vous ne connaissez pas le nom de la connexion distante en amont d'une branche, vous pouvez d'abord le rechercher en consultant le nom de la branche en amont sur lequel la branche actuelle a été créée. Utilisez git rev-parse comme 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-remote et 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)

Notez maintenant 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, cela suffira.

4
Christopher
#!/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

Sortie:

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

Pour moi, c'est le moyen le plus facile (moins de taper):

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

en fait, j'ai cela dans une alias appelée s qui fait:

git remote -v
git status

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

1
Code Knox
git config --list

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

0