it-swarm.com.de

Wie erhält man den Namen des Git-Repositorys in einem Git-Repository?

Wie können Sie den Git-Repository-Namen in einem Git-Repository erhalten, wenn Sie in einem Git-Verzeichnis arbeiten? Gibt es Git-Befehle?

# 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
89
gipcompany

Wenn Sie für den Repository-Namen den Namen des Git-Root-Verzeichnisses (das Verzeichnis mit dem .git-Verzeichnis) meinen, können Sie Folgendes ausführen:

basename `git rev-parse --show-toplevel`

Der git rev-parse --show-toplevel-Teil gibt den Pfad zu diesem Verzeichnis an und basename entfernt den ersten Teil des Pfads.

102
Fuad Saud

Im Allgemeinen können Sie das nicht tun. Git ist es egal, wie Ihr Git-Repository benannt ist. Sie können beispielsweise das Verzeichnis umbenennen, das Ihr Repository enthält (eines mit .git-Unterverzeichnis), und git wird es nicht einmal bemerken - alles funktioniert weiterhin.

Wenn Sie es jedoch geklont haben, können Sie den Befehl verwenden:

git remote show Origin

um viele Informationen über die ursprüngliche Fernbedienung anzuzeigen, von der Sie Ihr Repository geklont haben, enthält diese die ursprüngliche Klon-URL.

Wenn Sie jedoch mithilfe von git remote rm Origin die Verknüpfung zur ursprünglichen Remote-Station entfernt haben oder dieses Repository mit git init erstellt haben, können Sie diese Informationen einfach nicht erhalten - sie sind nirgendwo vorhanden.

94
mvp

Es ist nicht erforderlich, sich mit dem Repository in Verbindung zu setzen, um den Namen zu erhalten, und der Ordnername spiegelt nicht unbedingt den Namen der Fernbedienung wider.

Ich habe festgestellt, dass dies der genaueste und effizienteste Weg ist, um den aktuellen Repository-Namen abzurufen:

basename -s .git `git config --get remote.Origin.url`

Dies sollte ab Git 1.8.1.5 funktionieren. Zuvor hätte der jetzt veraltete git-repo-config-Befehl funktioniert (bereits in Git 1.7.5).

44
TastyWheat

Andere Antworten funktionieren immer noch nicht, wenn der Name Ihres Verzeichnisses nicht mit dem Namen des Remote-Repository übereinstimmt (und dies könnte der Fall sein). Sie können den Namen real des Repositorys folgendermaßen abrufen:

git remote show Origin -n | grep "Fetch URL:" | sed -E "s#^.*/(.*)$#\1#" | sed "s#.git$##"

Grundsätzlich rufen Sie git remote show Origin, nimm die Repository-URL aus dem Feld "Fetch URL:" und füge sie erneut ein, um den Teil mit dem Namen zu erhalten: https://github.com/dragn/ vimrc . git

18
dragn

In git v2.7.0 + wurde der Unterbefehl get-url mit dem Befehl git-remote eingeführt.

POSIX-Shell:

basename $(git remote get-url Origin)

Power Shell:

Split-Path -Leaf (git remote get-url Origin)
6
vulcan raven

Ich denke, dies ist ein besserer Weg, um einen Klon eindeutig identifizieren eines Repositorys.

git config --get remote.Origin.url und prüfen, ob der Ursprung mit ssh://your/repo übereinstimmt. 

4
OLIVER.KOO

Ein bisschen zu spät für diese Frage, aber wenn Sie:

cat /path/to/repo/.git/config

Sie sehen die URL des Repositorys, die den Reponamen enthält:

[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
3
jonnyjandles

Wenn Sie den gesamten GitHub-Repository-Namen ('vollständiger Name') - Benutzer/Repository - möchten und dies mit Ruby tun möchten ...

git remote show Origin -n | Ruby -ne 'puts /^\s*Fetch.*:(.*).git/.match($_)[1] rescue nil'
1
nroose

Leider scheint es, dass Git keinen solchen Befehl eingebaut hat. Sie können ihn jedoch leicht mit Git-Aliasnamen und etwas Shell-Zauber hinzufügen.

Wie aus dieser Antwort hervorgeht, können Sie mit git rev-parse --show-toplevel das Stammverzeichnis Ihres aktuellen Git-Ordners anzeigen.

Wenn Sie dies regelmäßig verwenden möchten, ist es wahrscheinlich bequemer, es als Alias ​​zu definieren. Hierfür wird git config alias.root '!echo "$(git rev-parse --show-toplevel)"' verwendet. Danach können Sie mit git root den Stammordner des Repositorys anzeigen, in dem Sie sich gerade befinden.

Wenn Sie einen anderen Unterbefehlsnamen als root verwenden möchten, ersetzen Sie einfach den zweiten Teil von alias.root im obigen Befehl durch einen beliebigen Befehl.

Einzelheiten zu Aliasnamen in Git finden Sie auch in der Manpage git config .

1
Nevik Rehnel

Hier ist eine Bash-Funktion, die den Repository-Namen (wenn er richtig eingerichtet wurde) druckt:

__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
}

Erläuterung:

local gitdir=$(git rev-parse --git-dir)

Dies führt git rev-parse --git-dir aus, wodurch der vollständige Pfad zum .git-Verzeichnis des aktuellen Repositorys ausgegeben wird. Es speichert den Pfad in $gitdir.

if [ $(cat ${gitdir}/description) != "..." ]; then

Dies führt cat ${gitdir}/description aus, wodurch der Inhalt des .git/description Ihres aktuellen Repositorys gedruckt wird. Wenn Sie Ihr Repository richtig benannt haben, wird ein Name gedruckt. Andernfalls wird Unnamed repository; edit this file 'description' to name the repository. gedruckt.

cat ${gitdir}/description

Wenn das Repo ordnungsgemäß benannt wurde, drucken Sie den Inhalt.

else

Andernfalls...

echo "Unnamed repository!"

Teilen Sie dem Benutzer mit, dass das Repo nicht benannt wurde.


Ähnliches ist in diesem Skript implementiert.

1
MD XF

Dieser Ansatz mit git-remote hat sich für HTTPS-Fernbedienungen gut bewährt:

$ git remote -v | grep "(fetch)" | sed 's/.*\/\([^ ]*\)\/.*/\1/'
                                                |  |        | |
                                                |  |        | +---------------+
                                                |  |        | Extract capture |
                                                |  +--------------------+-----+
                                                |Repository name capture|
                                                +-----------------------+

Beispiel 

0
whirlwin

Hier ist meins:

git remote --verbose | grep Origin | grep fetch | cut -f2 | cut -d' ' -f1

nicht besser als die anderen, aber ich habe es zu einer bash-Funktion gemacht, damit ich den Namen der Fernbedienung weglassen kann, wenn es nicht Origin ist.

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
}
0
tamouse

Sie können verwenden: git remote -v

Dokumentation: https://git-scm.com/docs/git-remote

Verwalten Sie den Satz von Repositorys ("Remotes"), deren Zweige Sie verfolgen. -v --verbose Seien Sie ein wenig ausführlicher und zeigen Sie die entfernte URL nach dem Namen an. HINWEIS: Dies muss zwischen Remote und Unterbefehl gesetzt werden.

0
David

Ich finde auch, dass sich im .git-Verzeichnis einige Repo-Informationen befinden. Sie können also nur die FETCH_HEAD-Datei im Terminal ansehen, um den Namen des Repos anzuzeigen:

Beispiel:

cd your_project_folder/.git
more FETCH_HEAD

Ausgabe:

672e38391557a192ab23a632d160ef37449c56ac        https://bitbucket.org/fonjeekay/some_repo

Und https://bitbucket.org/somebituser/some_repo.git ist der Name Ihres Repositorys

0
fonjeekay

Repo vollständiger Name:

git config --get remote.Origin.url | grep -Po "(?<[email protected]\.com:)(.*?)(?=.git)"
0
Lemonada