web-dev-qa-db-fra.com

Comment obtenir le nom du référentiel Git dans un référentiel Git?

Lorsque vous travaillez dans un répertoire Git, comment pouvez-vous obtenir le nom du référentiel Git dans un référentiel Git? Existe-t-il des commandes Git?

# I did check out bar repository and working in somewhere 
# under bar directory at this moment such as below.

$ git clone git://github.com/foo/bar.git
$ cd bar/baz/qux/quux/corge/grault # and I am working in here!
$ git xxx # <- ???
bar
89
gipcompany

Eh bien, si, pour le nom du référentiel, vous voulez dire le nom du répertoire racine Git (celui qui contient le répertoire .git), vous pouvez exécuter ceci:

basename `git rev-parse --show-toplevel`

La partie git rev-parse --show-toplevel vous donne le chemin d'accès à ce répertoire et basename enlève la première partie du chemin.

102
Fuad Saud

En général, vous ne pouvez pas faire cela. Git ne se soucie pas du nom de votre référentiel git. Par exemple, vous pouvez renommer le répertoire contenant votre référentiel (un avec le sous-répertoire .git), et git ne le remarquera même pas - tout continuera à fonctionner.

Cependant, si vous l'avez cloné, vous pouvez utiliser la commande suivante:

git remote show Origin

pour afficher de nombreuses informations sur la télécommande d'origine à partir de laquelle vous avez cloné votre référentiel, qui contiendra l'URL de clone d'origine.

Si, toutefois, vous avez supprimé le lien vers la télécommande d'origine à l'aide de git remote rm Origin ou si vous avez créé ce référentiel à l'aide de git init, ces informations sont tout simplement impossibles à obtenir - elles n'existent nulle part.

94
mvp

Il n'est pas nécessaire de contacter le référentiel pour obtenir le nom, et le nom du dossier ne correspondra pas nécessairement au nom distant.

J'ai trouvé que c'était le moyen le plus précis et le plus efficace d'obtenir le nom actuel du référentiel:

basename -s .git `git config --get remote.Origin.url`

Cela devrait fonctionner à partir de Git 1.8.1.5. Auparavant, la commande maintenant obsolète git-repo-config aurait fonctionné (dès Git 1.7.5).

44
TastyWheat

Dans git v2.7.0 + , une sous-commande get-url a été ajoutée à la commande git-remote.

POSIX Shell:

basename $(git remote get-url Origin)

PowerShell:

Split-Path -Leaf (git remote get-url Origin)
6
vulcan raven

Je pense que c'est un meilleur moyen d'identifier sans ambiguïté un clone d'un référentiel.

git config --get remote.Origin.url et en vérifiant que l'origine correspond à ssh://your/repo

4
OLIVER.KOO

Un peu en retard pour cette question, mais si vous:

cat /path/to/repo/.git/config

Vous verrez l'URL du référentiel qui inclura le nom de repon:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "Origin"]
    url = https://github.com/your_git_user_name/your_git_repo_name.git
    fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
    remote = Origin
    merge = refs/heads/master
3
jonnyjandles

Si vous voulez le nom complet du référentiel GitHub ('nom complet') - utilisateur/référentiel, et que vous voulez le faire avec Ruby ...

git remote show Origin -n | Ruby -ne 'puts /^\s*Fetch.*:(.*).git/.match($_)[1] rescue nil'
1
nroose

Malheureusement, il semble que Git ne possède pas de telle commande. Mais vous pouvez facilement l’ajouter vous-même avec des alias Git et de la magie de Shell.

Comme indiqué par cette réponse , vous pouvez utiliser git rev-parse --show-toplevel pour afficher la racine de votre dossier Git actuel.

Si vous voulez l'utiliser régulièrement, il est probablement plus pratique de le définir comme un alias. Pour cela, utilisé git config alias.root '!echo "$(git rev-parse --show-toplevel)"'. Ensuite, vous pouvez utiliser git root pour voir le dossier racine du référentiel dans lequel vous vous trouvez.

Si vous souhaitez utiliser un autre nom de sous-commande que root, remplacez simplement la deuxième partie de alias.root dans la commande ci-dessus par ce que vous voulez.

Pour plus de détails sur les alias dans Git, voir aussi la page de manuel git config .

1
Nevik Rehnel

Voici une fonction bash qui imprimera le nom du référentiel (s'il a été correctement configuré):

__get_reponame ()
{
    local gitdir=$(git rev-parse --git-dir)

    if [ $(cat ${gitdir}/description) != "Unnamed repository; edit this file 'description' to name the repository." ]; then
        cat ${gitdir}/description
    else
        echo "Unnamed repository!"
    fi
}

Explication:

local gitdir=$(git rev-parse --git-dir)

Ceci exécute git rev-parse --git-dir, qui affiche le chemin complet du répertoire .git du référentiel actuel. Il stocke le chemin dans $gitdir.

if [ $(cat ${gitdir}/description) != "..." ]; then

Ceci exécute cat ${gitdir}/description, qui imprime le contenu du .git/description de votre référentiel actuel. Si vous avez correctement nommé votre référentiel, un nom apparaîtra. Sinon, il imprimera Unnamed repository; edit this file 'description' to name the repository.

cat ${gitdir}/description

Si le référentiel a été correctement nommé, imprimez le contenu.

else

Autrement...

echo "Unnamed repository!"

Indiquez à l'utilisateur que le référentiel n'a pas été nommé.


Quelque chose de similaire est implémenté dans ce script .

1
MD XF

Cette approche utilisant git-remote a bien fonctionné pour moi avec les télécommandes HTTPS:

$ git remote -v | grep "(fetch)" | sed 's/.*\/\([^ ]*\)\/.*/\1/'
                                                |  |        | |
                                                |  |        | +---------------+
                                                |  |        | Extract capture |
                                                |  +--------------------+-----+
                                                |Repository name capture|
                                                +-----------------------+

Exemple 

0
whirlwin

Voilà le mien:

git remote --verbose | grep Origin | grep fetch | cut -f2 | cut -d' ' -f1

pas mieux que les autres, mais j'en ai fait une fonction bash afin de pouvoir laisser tomber le nom distant si ce n'est pas Origin.

grurl () {
  xx_remote=$1
  [ -z "$xx_remote" ] && xx_remote=Origin
  git remote --verbose | grep "$1" | grep fetch | cut -f2 | cut -d' ' -f1
  unset xx_remote
}
0
tamouse

Vous pouvez utiliser: git à distance -v

Documentation: https://git-scm.com/docs/git-remote

Gérez l'ensemble des référentiels ("télécommandes") dont vous suivez les branches . -v --verbose Soyez un peu plus prolixe et montrez les URL distantes après le nom. NOTE: Ceci doit être placé entre remote et la sous-commande.

0
David

De plus, je constate qu’il existe des informations sur le repo dans le répertoire .git. Donc, vous pouvez simplement regarder le fichier FETCH_HEAD dans le terminal pour voir le nom du repo:

Exemple:

cd your_project_folder/.git
more FETCH_HEAD

Sortie:

672e38391557a192ab23a632d160ef37449c56ac        https://bitbucket.org/fonjeekay/some_repo

Et https://bitbucket.org/somebituser/some_repo.git est le nom de votre référentiel

0
fonjeekay

Repo nom complet:

git config --get remote.Origin.url | grep -Po "(?<=git@github\.com:)(.*?)(?=.git)"
0
Lemonada