217 votes

Comment obtenir le nom du dépôt Git dans un autre dépôt Git ?

Lorsque vous travaillez dans un répertoire Git, comment pouvez-vous obtenir le nom du dépôt Git dans un dépôt 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

1voto

Nevik Rehnel Points 5446

Malheureusement, il semble que Git ne dispose pas d'une telle commande intégrée. Mais vous pouvez facilement l'ajouter vous-même avec des alias Git et un peu de magie shell.

Comme l'a souligné 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, on utilise git config alias.root '!echo "$(git rev-parse --show-toplevel)"' . Après cela, vous pouvez utiliser git root pour voir le dossier racine du référentiel dans lequel vous vous trouvez actuellement.

Si vous souhaitez utiliser un autre nom de sous-commande que root il suffit de remplacer la deuxième partie de alias.root dans la commande ci-dessus avec ce que vous voulez.

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

1voto

whirlwin Points 3018

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

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

Exemple

1voto

MD XF Points 7062

Voici une fonction bash qui imprimera le nom du dépôt (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 imprime le chemin d'accès complet au fichier .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 fichier .git/description de votre dépôt actuel. Si vous avez correctement nommé votre référentiel, il affichera un nom. Sinon, il affichera Unnamed repository; edit this file 'description' to name the repository.

cat ${gitdir}/description

Si le repo a été correctement nommé, alors imprimez le contenu.

else

Sinon...

echo "Unnamed repository!"

Dites à l'utilisateur que le repo n'a pas été nommé.


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

1voto

Fabrice Jammes Points 948

Celui-ci fonctionne assez bien avec git-2.18.2 et peut être lancé depuis un dépôt cible extérieur à git :

basename -s .git $(git --git-dir=/<project-path>/.git remote get-url origin)

0voto

tamouse Points 687

Voici 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 pour pouvoir introduire le nom de la télécommande s'il n'est pas d'origine.

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
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X