Trouver le nom du référentiel d'origine à partir duquel vous avez cloné dans Git

Réponses:

91

Dans la racine du référentiel, le .git/configfichier contient toutes les informations sur les référentiels et les branches distants. Dans votre exemple, vous devriez rechercher quelque chose comme:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = server:gitRepo.git

De plus, la commande Git git remote -vaffiche le nom et l'URL du référentiel distant. Le référentiel distant "d'origine" correspond généralement au référentiel d'origine, à partir duquel la copie locale a été clonée.

allait
la source
16
Vous pouvez également utiliser git remote show originpour voir beaucoup plus d'informations sur cette télécommande.
Cascabel
1
On dirait que ces deux méthodes sont dans la réponse sont équivalentes - il semble git remote -vjuste lire et écrire .git/config.
flow2k
103
git config --get remote.origin.url
Straff
la source
2
D'accord; c'est mieux car il ne nécessite pas de connexion / authentification au serveur distant git. OP a demandé "en utilisant votre référentiel local" mais git remote show originappelle le réseau.
Travis Wilson
1
Ceci enveloppé dans un nom de base car la réponse de Casey fonctionne bien
Jonathan Drapeau
29

Il s'agit d'une commande rapide Bash, que vous recherchez probablement, n'imprimera qu'un nom de base du référentiel distant:

Où vous allez chercher de :

basename $(git remote show -n origin | grep Fetch | cut -d: -f2-)

Alternativement où vous poussez pour :

basename $(git remote show -n origin | grep Push | cut -d: -f2-)

Surtout, l' -noption rend la commande beaucoup plus rapide.

Casey
la source
11

J'utilise ceci:

basename $(git remote get-url origin) .git

Ce qui renvoie quelque chose comme gitRepo. (Supprimez le .gità la fin de la commande pour renvoyer quelque chose comme gitRepo.git.)

(Remarque: il nécessite la version 2.7.0 ou ultérieure de Git)

Adzenith
la source
2

Je suis tombé sur cette question en essayant d'obtenir le organization/repo chaîne d'un hôte git comme github ou gitlab.

Cela fonctionne pour moi:

git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'

Il utilise sedpour remplacer la sortie de la git configcommande par simplement le nom de l'organisation et du dépôt.

Quelque chose comme github/scientistserait mis en correspondance par la classe de caractères [[:graph:]]dans l'expression régulière.

Le \1dit à sed de tout remplacer par uniquement les caractères correspondants.

jhnstn
la source
typo la fin dit .get au lieu de .git ---- git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'
MSillence
Merci @MSillence, corrigé.
jhnstn le
0
git remote show origin -n | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'

Il a été testé avec trois styles d'URL différents:

echo "Fetch URL: http://user@pass:gitservice.org:20080/owner/repo.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'
echo "Fetch URL: Fetch URL: [email protected]:home1-oss/oss-build.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'
echo "Fetch URL: https://github.com/owner/repo.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'
haolun
la source
1
Expliquez ce que vous avez fait, comment répondre
Maher
Ajoutez peut-être plus d'informations, par exemple sur la dépendance Ruby et sur quelle plate-forme elle a été testée (y compris les informations de version).
Peter Mortensen
0

Cela fonctionnera pour obtenir la valeur.

#!/usr/bin/env bash
repoSlug="$(git config --get remote.origin.url | cut -d/ -f5 | cut -d. -f1)"
echo ${repoSlug}
Joehep
la source
0

Version PowerShell de la commande pour le nom du dépôt git:

(git config --get remote.origin.url) -replace '.*/' -replace '.git'
Victor
la source