Ermitteln des Namens des ursprünglichen Repositorys, aus dem Sie in Git geklont haben


Antworten:


91

Im Repository-Stammverzeichnis enthält die .git/configDatei alle Informationen zu Remote-Repositorys und -Zweigen. In Ihrem Beispiel sollten Sie nach etwas suchen wie:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = server:gitRepo.git

Außerdem zeigt der Git-Befehl git remote -vden Namen und die URL des Remote-Repositorys an. Das Remote-Repository "origin" entspricht normalerweise dem ursprünglichen Repository, aus dem die lokale Kopie geklont wurde.


16
Sie können auch git remote show originviel mehr Informationen zu dieser Fernbedienung anzeigen.
Cascabel

1
Sieht so aus, als wären diese beiden Methoden in der Antwort gleichwertig - es scheint git remote -vnur Lesen und Schreiben .git/config.
flow2k

103
git config --get remote.origin.url

2
Einverstanden; Dies ist am besten, da keine Verbindung / Authentifizierung zum Git-Remote-Server erforderlich ist. OP fragte "Verwenden Ihres lokalen Repositorys", git remote show originruft jedoch das Netzwerk an.
Travis Wilson

1
Dies ist in einen Basisnamen eingeschlossen, da die Antwort von Casey gut funktioniert
Jonathan Drapeau

29

Dies ist ein schneller Bash-Befehl, nach dem Sie wahrscheinlich suchen. Er gibt nur einen Basisnamen des Remote-Repositorys aus:

Wo Sie holen aus :

basename $(git remote show -n origin | grep Fetch | cut -d: -f2-)

Alternativ, wo Sie drücken zu :

basename $(git remote show -n origin | grep Push | cut -d: -f2-)

Insbesondere die -nOption macht den Befehl viel schneller.


11

Ich benutze das:

basename $(git remote get-url origin) .git

Welches gibt so etwas zurück gitRepo. (Entfernen Sie das .gitam Ende des Befehls, um so etwas zurückzugeben gitRepo.git.)

(Hinweis: Es erfordert Git Version 2.7.0 oder höher)


2

Ich bin über diese Frage gestolpert und habe versucht, den organization/repoString von einem Git-Host wie Github oder Gitlab zu bekommen.

Das funktioniert bei mir:

git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'

Es wird verwendet sed, um die Ausgabe des git configBefehls nur durch den Organisations- und Reponamen zu ersetzen .

So etwas github/scientistwürde von der Zeichenklasse [[:graph:]]im regulären Ausdruck abgeglichen .

Das \1sagt sed, alles durch nur die übereinstimmenden Zeichen zu ersetzen.


Tippfehler am Ende sagt .get statt .git ---- git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'
MSillence

Danke @MSillence, behoben.
2.

0
git remote show origin -n | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'

Es wurde mit drei verschiedenen URL-Stilen getestet:

echo "Fetch URL: http://user@pass:gitservice.org:20080/owner/repo.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'
echo "Fetch URL: Fetch URL: git@github.com:home1-oss/oss-build.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'
echo "Fetch URL: https://github.com/owner/repo.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'

1
Erklären Sie, was Sie getan haben, wie
Maher,

Fügen Sie möglicherweise weitere Informationen hinzu, z. B. über die Ruby-Abhängigkeit und auf welcher Plattform dies getestet wurde (einschließlich Versionsinformationen).
Peter Mortensen

0

Dies wird funktionieren, um den Wert zu erhalten.

#!/usr/bin/env bash
repoSlug="$(git config --get remote.origin.url | cut -d/ -f5 | cut -d. -f1)"
echo ${repoSlug}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.