Question Est-il possible d'obtenir le répertoire racine git en une seule commande?


Mercurial a un moyen d'imprimer le répertoire racine (qui contient .hg) via

hg root

Existe-t-il quelque chose d'équivalent dans git pour obtenir le répertoire contenant le répertoire .git?


489
2018-06-05 20:15


origine


Réponses:


Oui:

git rev-parse --show-toplevel

803
2018-06-05 20:29



le man page pour git-config (en dessous de Alias) dit:

Si l'extension d'alias est préfixée par un point d'exclamation, elle sera traitée comme un shell   commander. Par exemple, définir "alias.new =! Gitk --all --not ORIG_HEAD", l'invocation "git   new "équivaut à exécuter la commande shell" gitk --all --not ORIG_HEAD ". Notez que shell   commandes seront exécutées à partir du répertoire de niveau supérieur d'un référentiel, qui ne peut pas   nécessairement être le répertoire courant.

Donc, sous UNIX, vous pouvez faire:

git config --global --add alias.root '!pwd'

86
2017-12-11 18:33



A --show-toplevel seulement récemment ajouté à git rev-parse ou pourquoi personne n'en parle?

Du git rev-parse page de manuel:

   --show-toplevel
       Show the absolute path of the top-level directory.

81
2017-09-10 18:14



Que diriez-vous "git rev-parse --git-dir"?

F:\prog\git\test\copyMerge\dirWithConflicts>git rev-parse --git-dir
F:/prog/git/test/copyMerge/.git

le --git-dir l'option semble fonctionner.

De git rev-parse page de manuel:

--git-dir

    Show $GIT_DIR if defined else show the path to the .git directory.

Vous pouvez le voir en action dans ce git setup-sh scénario.


36
2018-06-05 21:01



Si vous êtes déjà dans le niveau supérieur ou pas dans un dépôt git cd $(git rev-parse --show-cdup) vous ramènera à la maison (juste un CD). cd ./$(git rev-parse --show-cdup) est une façon de régler cela.


26
2018-06-15 07:07



Pour écrire une réponse simple ici, afin que nous puissions utiliser

git root

pour faire le travail, configurez simplement votre git en utilisant

git config --global alias.root "rev-parse --show-toplevel"

et alors vous pourriez vouloir ajouter ce qui suit à votre ~/.bashrc:

alias cdroot='cd $(git root)'

de sorte que vous pouvez simplement utiliser cdroot pour aller en haut de votre repo.


23
2018-05-03 09:17



Pour calculer le chemin absolu du répertoire racine git actuel, disons pour une utilisation dans un script shell, utilisez cette combinaison de readlink et de git rev-parse:

gitroot=$(readlink -f ./$(git rev-parse --show-cdup))

git-rev-parse --show-cdup vous donne le bon nombre de ".." s pour obtenir à la racine de votre cwd, ou la chaîne vide si vous êtes à la racine. Ensuite, ajoutez "./" pour traiter la casse vide et utilisez readlink -f traduire en un chemin complet.

Vous pouvez également créer un git-root commande dans votre PATH en tant que script shell pour appliquer cette technique:

cat > ~/bin/git-root << EOF
#!/bin/sh -e
cdup=$(git rev-parse --show-cdup)
exec readlink -f ./$cdup
EOF
chmod 755 ~/bin/git-root

(Ce qui précède peut être collé dans un terminal pour créer git-root et définir des bits d'exécution, le script réel est dans les lignes 2, 3 et 4.)

Et alors vous seriez capable de courir git root pour obtenir la racine de votre arbre actuel. Notez que dans le script shell, utilisez "-e" pour que le shell se ferme si la rev-parse échoue afin que vous puissiez obtenir le statut de sortie et le message d'erreur si vous n'êtes pas dans un répertoire git.


16
2018-06-09 19:48