68 votes

Déterminer si le répertoire est sous le contrôle de git

Comment puis-je savoir si un répertoire donné fait partie d'un git respository?

(La suite est en python, mais bash ou quelque chose ce serait bien.)

os.path.isdir('.svn')

est vous dire si le répertoire courant est contrôlé par la Subversion. Mercurial et Git juste un .hg/.git au sommet du référentiel, donc pour l' hg je peux utiliser

os.system('hg -q stat 2> /dev/null > /dev/null') == 0)

mais git status renvoie une valeur non nulle en (erreur) état de sortie si rien n'a changé.

Est une itération de la route à la recherche pour .git moi-même du mieux que je peux faire?

96voto

falstro Points 16545

Je viens de le trouver en git help rev-parse

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

imprime true s'il se trouve dans l'arborescence de travail, false s'il se trouve dans l'arborescence '.git' et une erreur fatale si ce n'est ni l'un ni l'autre. "True" et "false" sont imprimés sur stdout avec un statut de sortie égal à 0, l'erreur fatale est imprimée sur stderr avec un statut de sortie égal à 128.

48voto

John Hyland Points 4578

En ruby, system('git rev-parse') retournera true si le répertoire en cours est dans un dépôt git, et false sinon. J'imagine que l'équivalent pythonique devrait fonctionner de la même manière.

EDIT: Bien sûr:

 # in a git repo, running ipython
>>> system('git rev-parse')
0

# not in a git repo
>>> system('git rev-parse')
32768
 

Notez qu'il y a une sortie sur STDERR lorsque vous n'êtes pas dans un dépôt, si cela vous importe.

4voto

Trevoke Points 2848

Ainsi, le répertoire peut également être ignoré par le .gitignore de fichier de sorte que vous devez vérifier pour un .dépôt git, et si il y en a un, analyser l' .gitignore pour voir si le répertoire est en effet dans le dépôt git.

Exactement ce que vous voulez faire? Il y a peut être un moyen plus simple de faire cela.

EDIT: Voulez-vous dire "Est ce répertoire à la racine d'un dépôt GIT" ou " voulez-vous dire "Est ce répertoire partie d'un dépôt GIT" ?

Pour le premier, puis il suffit de vérifier si il y a un .git -- puisque c'est à la racine, et vous avez terminé. Pour la seconde, une fois que vous avez déterminé que vous êtes à l'intérieur d'un dépôt GIT, vous avez besoin de vérifier .gitignore pour le sous-répertoire en question.

4voto

falstro Points 16545

Pour mémoire, utilisez le statut git ou similaire, ceci est juste pour être complet: :)

La recherche d'un arbre vers le haut n'est pas vraiment grave, en bash, vous pouvez faire ce simple one-liner (si vous le mettez sur une ligne ...);) Retourne 0 si on en trouve un, 1 sinon.

 d=`pwd`
while [ "$d" != "" ]; do
  [ -d "$d"/.git ] && exit 0
  d=${d%/*}
done
exit 1
 

va chercher vers le haut à la recherche d'un dossier .git.

1voto

retronym Points 35066

Ajoutez ceci à votre fichier .bash_profile, et votre invite indiquera toujours la branche git active et si vous avez des modifications non validées.

 function parse_git_dirty {
  [[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*"
}
function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[\1$(parse_git_dirty)]/"
}

export PS1=' \[\033[0;33m\]\w\[\033[00m\]\[\033[01;00m\]$(parse_git_branch): ' #PS1='\w> '
 

Vous verrez ceci:

  ~: 
 ~: cd code/scala-plugin/
 ~/code/scala-plugin[master*]: 
 

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