Descubrir el nombre del repositorio original desde el que clonó en Git

Respuestas:

91

En la raíz del repositorio, el .git/configarchivo contiene toda la información sobre repositorios y sucursales remotos. En su ejemplo, debería buscar algo como:

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

Además, el comando Git git remote -vmuestra el nombre y la URL del repositorio remoto. El repositorio remoto "origen" generalmente corresponde al repositorio original, desde el cual se clonó la copia local.

allait
fuente
16
También puede usar git remote show originpara ver mucha más información sobre ese control remoto.
Cascabel
1
Parece que estos dos métodos en la Respuesta son equivalentes, parece que git remote -vsolo lee y escribe .git/config.
flow2k
103
git config --get remote.origin.url
Straff
fuente
2
Convenido; esto es mejor porque no requiere una conexión / autenticación al servidor remoto de git. OP preguntó "usando su repositorio local" pero git remote show originllama a la red.
Travis Wilson
1
Esto envuelto en un nombre de base como la respuesta de Casey funciona bien
Jonathan Drapeau
29

Este es un comando rápido de Bash, que probablemente esté buscando, imprimirá solo un nombre base del repositorio remoto:

Cuando usted lo trae desde :

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

Alternativamente, donde empuja a :

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

Especialmente la -nopción hace que el comando sea mucho más rápido.

Casey
fuente
11

Yo uso esto:

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

Lo que devuelve algo como gitRepo. (Quite el .gital final del comando para devolver algo como gitRepo.git).

(Nota: Requiere Git versión 2.7.0 o posterior)

adzenith
fuente
2

Me encontré con esta pregunta tratando de obtener la organization/repocadena de un host de git como github o gitlab.

Esto es trabajo para mí:

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

Se usa sedpara reemplazar la salida del git configcomando con solo la organización y el nombre del repositorio.

Algo parecido github/scientista coincidiría con la clase de carácter [[:graph:]]en la expresión regular.

El \1le dice a sed que reemplace todo solo con los caracteres coincidentes.

jhnstn
fuente
error tipográfico al final dice .get en lugar de .git ---- git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'
MSillence
Gracias @MSillence, arreglado.
jhnstn
0
git remote show origin -n | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'

Se probó con tres estilos de URL diferentes:

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: [email protected]: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'
haolun
fuente
1
explica lo que hiciste, cómo responder
Maher
Quizás agregue más información, por ejemplo, sobre la dependencia de Ruby y en qué plataforma se probó (incluida la información de la versión).
Peter Mortensen
0

Esto funcionará para obtener el valor.

#!/usr/bin/env bash
repoSlug="$(git config --get remote.origin.url | cut -d/ -f5 | cut -d. -f1)"
echo ${repoSlug}
joehep
fuente
0

Versión de Powershell del comando para el nombre del repositorio de git:

(git config --get remote.origin.url) -replace '.*/' -replace '.git'
Víctor
fuente