Comment obtenez-vous le nom du repository Git dans un repository Git?

Lorsque vous travaillez dans un répertoire Git, comment pouvez-vous obtenir le nom du repository Git dans un référentiel Git? Y a-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 

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

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

La partie git rev-parse --show-toplevel vous donne le chemin d’access à ce répertoire et le nom de basename dépouille la première partie du chemin.

En général, vous ne pouvez pas faire cela. Git ne se soucie pas du nom de votre repository 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:

 git remote show origin 

Pour afficher beaucoup d’informations sur la télécommande d’origine à partir de laquelle vous avez cloné votre référentiel, elle contiendra l’URL du clone d’origine.

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

Il n’est pas nécessaire de contacter le référentiel pour obtenir le nom, et le nom du dossier ne reflète pas nécessairement le nom distant.

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

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

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

Les autres réponses ne fonctionneront toujours pas lorsque le nom de votre répertoire ne correspond pas au nom du référentiel distant (et il pourrait l’être). Vous pouvez obtenir le vrai nom du repository avec quelque chose comme ceci:

git remote show origin -n | grep "Fetch URL:" | sed -E "s#^.*/(.*)$#\1#" | sed "s#.git$##"

Fondamentalement, vous appelez git remote show origin , saisissez l’URL du référentiel dans le champ “Fetch URL:”, et réappelez-le pour obtenir la partie avec le nom: https://github.com/dragn/ neat-vimrc .git

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 vérifie que l’origine correspond à ssh://your/repo .

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 imprime le chemin complet du répertoire .git du référentiel courant. Il stocke le chemin dans $gitdir .

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

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

 cat ${gitdir}/description 

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

 else 

Autrement…

 echo "Unnamed repository!" 

Dites à l’utilisateur que le repo n’était pas nommé.


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

Malheureusement, il semble que Git ne dispose pas d’une telle commande. Mais vous pouvez facilement l’append vous-même avec des alias Git et de la magie de shell.

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

Si vous souhaitez l’utiliser régulièrement, il est probablement plus pratique de le définir comme un alias. Pour cela, utilisez 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 voulez 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 .

Si vous voulez tout le nom du repository GitHub («nom complet») – user / repository, et que vous voulez le faire avec Ruby …

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

Dans git v2.7.0 + , une sous get-url commande get-url été introduite dans git-remote commande git-remote .

POSIX:

 basename (git remote get-url origin) 

PowerShell:

 Split-Path -Leaf (git remote get-url origin) 

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

Voici la mienne:

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

pas mieux que les autres, mais je l’ai fait une fonction bash afin que je puisse déposer le nom distant si ce n’est pas l’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 } 

Vous pouvez utiliser: git remote -v

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

Gérez l’ensemble des référentiels (“télécommandes”) dont vous suivez les twigs. -v –verbose Soyez un peu plus bavard et affichez l’URL distante après le nom. REMARQUE: Cela doit être placé entre la télécommande et la sous-commande.