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
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.
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.
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).
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)
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
.
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
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'
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
.
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 .
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
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
}
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.
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
Repo nom complet:
git config --get remote.Origin.url | grep -Po "(?<=git@github\.com:)(.*?)(?=.git)"