1014 Stimmen

Gibt es eine Möglichkeit, das git Root-Verzeichnis mit einem einzigen Befehl zu erhalten?

Mercurial hat eine Möglichkeit, das Root-Verzeichnis (das .hg enthält) über

hg root

Gibt es etwas Äquivalentes in Git, um das Verzeichnis zu erhalten, das das .git-Verzeichnis enthält?

6voto

MERM Punkte 605

Dieser Shell-Alias funktioniert, egal ob Sie sich in einem Git-Unterverzeichnis oder auf der obersten Ebene befinden:

alias gr='[ ! -z `git rev-parse --show-toplevel` ] && cd `git rev-parse --show-toplevel || pwd`'

aktualisiert, um eine moderne Syntax anstelle von Backticks zu verwenden:

alias gr='[ ! -z $(git rev-parse --show-toplevel) ] && cd $(git rev-parse --show-toplevel || pwd)'

5voto

jdsumsion Punkte 12936

Hier ist ein Skript, das ich geschrieben habe und das beide Fälle behandelt: 1) Repository mit Arbeitsbereich, 2) Repository ohne Arbeitsbereich.

https://gist.github.com/jdsumsion/6282953

git-root (ausführbare Datei in Ihrem Pfad):

#!/bin/bash
GIT_DIR=`git rev-parse --git-dir` &&
(
  if [ `basename $GIT_DIR` = ".git" ]; then
    # handle normal git repos (with a .git dir)
    cd $GIT_DIR/..
  else
    # handle bare git repos (the repo IS a xxx.git dir)
    cd $GIT_DIR
  fi
  pwd
)

Wir hoffen, dass dies hilfreich ist.

4voto

FractalSpace Punkte 5133
$ git config alias.root '!pwd'
# then you have:
$ git root

4voto

Hotschke Punkte 8535

Vorkonfigurierte Shell-Aliase in Shell-Frameworks

Wenn Sie ein Shell-Framework verwenden, ist möglicherweise bereits ein Shell-Alias vorhanden:

  • $ grt en oh-my-zsh (68k) ( cd $(git rev-parse --show-toplevel || echo ".") )
  • $ git-root en prezto (8.8k) (zeigt den Pfad zum Arbeitsbaum Root an)
  • $ g.. zimfw (1k) (wechselt das aktuelle Verzeichnis auf die oberste Ebene des Arbeitsbaums).

3voto

Bruno Bronosky Punkte 60135

Ich möchte auf den ausgezeichneten Kommentar von Daniel Brockman eingehen.

Definition von git config --global alias.exec '!exec ' ermöglicht es Ihnen, Dinge zu tun wie git exec make weil, wie man git-config Staaten:

Wenn der Alias-Erweiterung ein Ausrufezeichen vorangestellt ist, wird sie wie ein Shell-Befehl behandelt. [Beachten Sie, dass Shell-Befehle aus dem obersten Verzeichnis eines Repositorys ausgeführt werden, das nicht unbedingt das aktuelle Verzeichnis sein muss.

Es ist auch praktisch zu wissen, dass $GIT_PREFIX ist der Pfad zum aktuellen Verzeichnis relativ zum obersten Verzeichnis eines Repositorys. Aber das Wissen darüber ist nur die halbe Miete™. Die Shell-Variablenexpansion macht die Verwendung ziemlich schwierig. Ich schlage daher vor bash -c etwa so:

git exec bash -c 'ls -l $GIT_PREFIX'

andere Befehle umfassen:

git exec pwd
git exec make

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X