241 votes

Vérifier si le répertoire courant est un dépôt Git

J'écris une série de scripts pour la gestion de Git dans zsh.

Comment vérifier si le répertoire courant est un dépôt Git ? (Lorsque je ne suis pas dans un dépôt Git, je ne veux pas exécuter un tas de commandes et obtenir un tas de résultats de recherche. fatal: Not a git repository réponses).

0 votes

Avez-vous regardé le fichier de complétion bash (dans contrib/completion/git-completion.bash ) pour vous en inspirer ? J'utilise la commande __git_ps1 comme partie de mon invite bash. En fait, la plupart d'entre eux seront source dans zsh. La fonction __gitdir est probablement celle que vous voulez.

2 votes

@jabbie : pourquoi ne pas en faire une réponse ?

0 votes

Avez-vous vérifié les fonctions déjà présentes dans la distribution de zsh ?

176voto

jabbie Points 691

Copié du fichier de complétion bash, ce qui suit est une façon naïve de le faire

# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
# Distributed under the GNU General Public License, version 2.0.

if [ -d .git ]; then
  echo .git;
else
  git rev-parse --git-dir 2> /dev/null;
fi;

Vous pouvez soit envelopper cela dans une fonction, soit l'utiliser dans un script.

Condensé dans une condition d'une ligne appropriée pour bash y zsh

[ -d .git ] && echo .git || git rev-parse --git-dir > /dev/null 2>&1

3 votes

Pourquoi ne pas simplement utiliser git rev-parse ?

4 votes

@William Pursell Pourquoi bifurquer quand on n'en a pas besoin ? Principalement pour la vitesse dans le cas trivial.

0 votes

Ajout d'un simple $PWD de sorte que le chemin de sortie soit toujours absolu (comme la fonction git commande) : ([ -d .git ] && echo "$PWD/.git") || (git rev-parse --git-dir 2> /dev/null)

165voto

TM. Points 20051

Vous pouvez utiliser :

git rev-parse --is-inside-work-tree

Ce qui affichera 'true' si vous êtes dans un arbre de travail git repos.

Notez qu'il renvoie toujours la sortie vers STDERR si vous êtes en dehors d'un repo git (et n'imprime pas 'false').

Tiré de cette réponse : https://stackoverflow.com/a/2044714/12983

0 votes

C'est le moyen le plus simple de le vérifier.

4 votes

Ceci imprimera toujours faux pour un référentiel nu qui n'a pas d'arbre de travail.

0 votes

Cela ne tient pas compte du sous-répertoire. Je dois vérifier si git rev-parse --show-toplevel correspond au sous-dossier que je vérifie

55voto

William Pursell Points 56211

Utiliser git rev-parse --git-dir

if git rev-parse --git-dir > /dev/null 2>&1; then
  : # This is a valid git repository (but the current working
    # directory may not be the top level.
    # Check the output of the git rev-parse command if you care)
else
  : # this is not a git repository
fi

éditer : git-rev-parse supporte maintenant (à partir de la version 1.7.0) --show-toplevel donc vous pourriez faire if test "$(pwd)" = "$(git rev-parse --show-toplevel)" pour déterminer si le répertoire courant est le répertoire de premier niveau.

8voto

James Points 170

Je ne suis pas sûr qu'il y ait une façon publiquement accessible/documentée de faire cela (il y a quelques fonctions internes de git que vous pouvez utiliser/abuser dans la source git elle-même).

Vous pourriez faire quelque chose comme ;

if ! git ls-files >& /dev/null; then
  echo "not in git"
fi

3voto

peritus Points 1262

Une option très rapide est http://vc.gerg.ca/hg/vcprompt/ .. multi-VC, en C, sans autres dépendances que lui-même.

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