¿Cómo puedo determinar la URL desde la que se clonó originalmente un repositorio local de Git?

4096

Saqué un proyecto de GitHub hace unos días. Desde entonces descubrí que hay varias bifurcaciones en GitHub, y descuidé notar cuál tomé originalmente. ¿Cómo puedo determinar cuál de esos tenedores saqué?

Tim
fuente
163
Con git 2.7 (Q4 2015), git remote get-url originserá posible. Vea mi respuesta a continuación
VonC
21
git remote get-url originno funciona para mí, posiblemente en desuso? git remote show originfuncionó sin embargo.
Klik
47
git remote -vdarle mucha información, incluida esta.
Thorbjørn Ravn Andersen
git remote get-url origin --pushfunciona bien, aparentemente no se deprecia y proporciona buena información breve ( git remote show originpuede ser muy detallado) qv git help remote.
NeilG

Respuestas:

5760

Si solo desea la URL remota, o si no está conectado a una red que puede alcanzar el repositorio remoto:

git config --get remote.origin.url

Si necesita una salida completa y está en una red que puede alcanzar el repositorio remoto donde reside el origen:

git remote show origin

Cuando se utiliza git clone(desde GitHub, o cualquier repositorio de origen para el caso) el nombre predeterminado para el origen del clon es "origen". El uso git remote showmostrará la información sobre este nombre remoto. Las primeras líneas deberían mostrar:

C:\Users\jaredpar\VsVim> git remote show origin
* remote origin
  Fetch URL: [email protected]:jaredpar/VsVim.git
  Push  URL: [email protected]:jaredpar/VsVim.git
  HEAD branch: master
  Remote branches:

Si desea usar el valor en la secuencia de comandos, usaría el primer comando que figura en esta respuesta.

JaredPar
fuente
2
Use git config como se describe a continuación en su lugar si usa jgit con amazon-s3.
barryku
66
Aunque no es relevante para el propósito de la pregunta original, tenga en cuenta que si intenta obtener la "URL de inserción" y se ingresan varias URL para el control remoto especificado, deberá usarlas git remote show origin(opcionalmente con el indicador -n proporcionado por @ Casey), o con git remote -vlo sugerido por @Montaro y @rodel.
Amazingant
¿En qué archivo está escrito esto? Pensé que el .gitconfigarchivo lo tendría, pero no lo vi en el mío.
ayjay
1
@ayjay ´~/.gitconfiges global para todos los gitrepositorios, esto aquí proviene de la configuración local que generalmente está en .git/config(sin embargo, para git-submodules la respuesta es un poco más difícil). Tenga en cuenta que strace git config --get remote.origin.urles tu amigo.
Tino
1
Pero la URL original no tiene que ser la URL del control remoto utilizado actualmente. Para mostrar la URL utilizada real, necesitaría esta solución: stackoverflow.com/a/40630957/1069083
rubo77
620

Si desea esto para fines de secuencias de comandos, solo puede obtener la URL con

git config --get remote.origin.url
Cascabel
fuente
38
Esta es la respuesta correcta. Es mucho más rápido e incluso funciona, si la URL remota ya no está disponible ( git remote show originsolo muestra "conq: el repositorio no existe").
apfelbox
55
Esta no es la respuesta correcta debido a la opción de configuración url.<base>.insteadOf. Vea mi respuesta: git tiene un comando para este propósito.
Carl Suster
2
@arcresu ¡Genial, +1 para ti! En mi defensa, ese comando no se agregó hasta marzo de 2011, y no se documentó hasta septiembre de 2012.
Cascabel
1
@Catskul Only --git-dir es relevante (la configuración está en el directorio git, independientemente de la ubicación del árbol de trabajo), y funciona para mí. ¿Está seguro de que especificó la ruta al directorio .git real, no su directorio padre?
Cascabel
553

Puedes probar:

git remote -v

Imprimirá todas las URL de búsqueda / inserción de sus controles remotos.

Montaro
fuente
255

Para obtener la respuesta:

git ls-remote --get-url [REMOTE]

Esto es mejor que leer la configuración; consulte la página de manual paragit-ls-remote :

--get-url

Expanda la URL del repositorio remoto dado teniendo en cuenta cualquier "url.<base>.insteadOf"configuración de configuración (Ver git-config(1)) y salga sin hablar con el control remoto.

Como señaló @Jefromi, esta opción se agregó en v1.7.5 y no se documentó hasta v1.7.12.2 (2012-09).

Carl Suster
fuente
2
bueno: esto también proporcionaría lo mismo para versiones anteriores> git remote -v | grep fetch | awk '{print $ 2}'
ravi.zombie
1
Creo que la mayoría de las otras respuestas son más un show-and-tell sobre los comandos de git y una exposición sobre el historial de git. Esta es la única respuesta que no asume que se llama su upstream origin.
Mike D
Este es el reemplazo más directo para la remote get-urlopción anterior. Es un reemplazo directo.
Klaatu von Schlacker
111

Con Git 2.7 (lanzamiento el 5 de enero de 2015), tiene una solución más coherente usando git remote:

git remote get-url origin

(bonito colgante de git remote set-url origin <newurl>)

Ver commit 96f78d3 (16 de septiembre de 2015) por Ben Boeckel ( mathstuf) .
(Fusionada por Junio ​​C Hamano - gitster- en commit e437cbd , 05 oct 2015) :

remoto: agregar el subcomando get-url

La expansión insteadOfforma parte ls-remote --urly tampoco hay forma de expandirse pushInsteadOf.
Agregue un get-urlsubcomando para poder consultar tanto como una forma de obtener todas las URL configuradas.

get-url:

Recupera las URL de un control remoto.
Las configuraciones para insteadOfy pushInsteadOfse expanden aquí.
Por defecto, solo se enumera la primera URL.

  • Con ' --push', se consultan las URL de inserción en lugar de buscar las URL.
  • Con ' --all', se enumerarán todas las URL del control remoto.

Antes de git 2.7, tenías:

 git config --get remote.[REMOTE].url
 git ls-remote --get-url [REMOTE]
 git remote show [REMOTE]
VonC
fuente
44
Después de 5 años, muchas cosas han cambiado y esta debería ser la respuesta aceptada ahora. Pero quizás también agregue la sintaxis pre-2.7.
msp
58

Para resumir, hay al menos cuatro formas:

(Se intentó lo siguiente para el repositorio oficial de Linux)

Menos información:

$ git config --get remote.origin.url
https://github.com/torvalds/linux.git

y

$ git ls-remote --get-url
https://github.com/torvalds/linux.git

Más información:

$ git remote -v
origin    https://github.com/torvalds/linux.git (fetch)
origin    https://github.com/torvalds/linux.git (push)

Aún más información:

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/torvalds/linux.git
  Push  URL: https://github.com/torvalds/linux.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)
nonopolaridad
fuente
44
Note git config --get remote.origin.urlrecupera la URL original que se configuró con git remote add ...o git remote set-url ...mientras git ls-remote --get-url originrecupera la URL que realmente se utiliza para acceder al control remoto, que podría ser diferente en presencia de git config --global url.XXX.insteadOf YYY. ¡Entonces ambas salidas pueden diferir! También tenga en cuenta que git ls-remote --get-url(sin origin) no necesariamente se recupera origin, sino que muestra el seguimiento en sentido ascendente, por lo que fallará, por ejemplo, en el estado HEAD separado.
Tino
24

Creo que puedes encontrarlo debajo .git/configy remote["origin"]si no lo manipulaste.

meder omuraliev
fuente
22

Respuesta corta:

$ git remote show -n origin

o, una alternativa para scripts rápidos puros:

$ git config --get remote.origin.url

Alguna información:

  1. $ git remote -vimprimirá todos los controles remotos (no lo que desea). ¿Quieres origen verdad?
  2. $ git remote show originmucho mejor, muestra solo originpero lleva demasiado tiempo (probado en git versión 1.8.1.msysgit.1).

Terminé con:, $ git remote show -n originque parece ser el más rápido. Con -nél no se buscarán cabezales remotos (ramas AKA). No necesitas ese tipo de información, ¿verdad?

http://www.kernel.org/pub//software/scm/git/docs/git-remote.html

Puede aplicar | grep -i fetcha las tres versiones para mostrar solo la URL de búsqueda.

Si necesita velocidad pura, use:

$ git config --get remote.origin.url

Gracias a @Jefromi por señalar eso.

Casey
fuente
22

Para mí, esta es la forma más fácil (menos escribir):

$ git remote -v
origin    https://github.com/torvalds/linux.git (fetch)
origin    https://github.com/torvalds/linux.git (push)

en realidad, tengo eso en una aliasllamada sque hace:

git remote -v
git status

Puede agregar a su perfil con: alias s='git remote -v && git status'

Code Knox
fuente
17

Nunca puedo recordar todos los parámetros de los comandos de Git, así que solo pongo un alias en el ~/.gitconfigarchivo que tiene más sentido para mí, para poder recordarlo y resulta en menos tipeo:

[alias]
url = ls-remote --get-url

Después de volver a cargar la terminal, puede simplemente escribir:

> git url

Aquí hay algunos más de mis más utilizados:

[alias]
cd = checkout
ls = branch
lsr = branch --remote
lst = describe --tags

También recomiendo git-extras que tiene un git info comando que proporciona información mucho más detallada sobre las sucursales locales y remotas.

Lo que sería genial
fuente
Me gusta esto muchisimo!
Alfie
15

La URL de Git estará dentro del archivo de configuración de Git. El valor corresponde a la clave url.

Para Mac y Linux, use los siguientes comandos:

 cd project_dir
 cat .git/config | grep url | awk '{print $3}'

Para Windows, abra el archivo a continuación en cualquier editor de texto y encuentre el valor de la clave url.

project_dir/.git/config

Nota: Esto funcionará incluso si está fuera de línea o si el servidor git remoto ha sido desconectado.

Harikrishnan
fuente
1
Esto es lo que funcionó para mí una vez que se retiró el servidor remoto que alojaba el pago original. Todos los demás intentos fracasaron: git remote get-url origin >> fatal: No such remote 'origin',git config --get remote.origin.url >>
jxramos
14

Básicamente uso:

git remote get-url origin

Funciona para la consola de comando Git Bash o la consola de comando CMD en Windows. Dicho esto, funciona con la versión 2.x de Git.

maytham-ɯɐɥʇʎɐɯ
fuente
12
git config --list

Este comando le dará toda la información relacionada con su repositorio.

Kasthuri Shravankumar
fuente
10

Es posible que el control remoto de la cadena ascendente no se llame "origen", así que aquí hay una variación:

remote=$(git config --get branch.master.remote)
url=$(git config --get remote.$remote.url)
basename=$(basename "$url" .git)
echo $basename

O:

basename $(git config --get remote.$(git config --get branch.master.remote).url) .git

Para variables más útiles hay:

$ git config -l
cagney
fuente
9

Para obtener la dirección IP / nombre de host de origin

Para ssh://repositorios:

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d "/"

Para git://repositorios:

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d ":"
Stephen
fuente
44
Para sshesto solo funciona en ausencia de lo ~/.ssh/configque reescribe el nombre de host o alias.
Tino
9

Para complementar las otras respuestas: si por alguna razón el control remoto ha cambiado y no refleja el origen original , la primera entrada en el registro (es decir, la última entrada mostrada por el comandogit reflog ) debe indicar dónde se clonó originalmente el repositorio. desde.

p.ej

$ git reflog | tail -n 1
f34be46 HEAD@{0}: clone: from https://github.com/git/git
$

(Tenga en cuenta que el reflog puede ser purgado, por lo que no se garantiza que funcione).

Jeremy
fuente
1
Esta es probablemente la única forma real de obtener el control remoto "original" si se ha cambiado.
Justin Ohms
8

Con git remote show originusted tiene que estar en el directorio de proyectos. Pero si desea determinar las URL desde cualquier otro lugar, puede usar:

cat <path2project>/.git/config | grep url

Si necesita este comando con frecuencia, puede definir un alias en su .bashrco .bash_profilecon MacOS.

alias giturl='cat ./.git/config | grep url'

Por lo tanto, solo debe llamar giturla la carpeta raíz de Git para obtener simplemente su URL.


Si extiende este alias así

alias giturl='cat .git/config | grep -i url | cut -d'=' -f 2'

obtienes solo la URL sin el precedente

"url ="

en

url = http://example.com/repo.git

obtienes más posibilidades en su uso:

Ejemplo

En Mac, puede llamar open $(giturl)para abrir la URL en el navegador estándar.

O chrome $(giturl)para abrirlo con el navegador Chrome en Linux.

Sedat Kilinc
fuente
8

Una forma simple es abrir el .git/configarchivo:

cat .git/config

Para editar:

vim .git/config o

nano .git/config

Omar Makled
fuente
1
Esto supone que estás en Linux (?).
Peter Mortensen
7

Imprima URL de búsqueda remota con nombres arbitrarios:

git remote -v | grep fetch | awk '{print $2}'
Aron
fuente
6

Si no conoce el nombre del control remoto ascendente para una sucursal, puede buscarlo primero inspeccionando el nombre de la sucursal ascendente sobre el que se construyó la sucursal actual. Usar git rev-parseasí:

git rev-parse --symbolic-full-name --abbrev-ref @{upstream}

Esto muestra esa rama ascendente que fue la fuente de la rama actual. Esto se puede analizar para obtener el nombre remoto de esta manera:

git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | cut -d / -f 1

Ahora tome eso y canalícelo hasta git ls-remoteobtener la URL del control remoto ascendente que es la fuente de la rama actual:

git ls-remote --get-url \
  $(git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | cut -d / -f 1)

Ahora debe tenerse en cuenta que esto no es necesariamente lo mismo que el repositorio remoto de origen desde el que se clonó. Sin embargo, en muchos casos será suficiente.

Christopher
fuente
5
#!/bin/bash

git-remote-url() {
 local rmt=$1; shift || { printf "Usage: git-remote-url [REMOTE]\n" >&2; return 1; }
 local url

 if ! git config --get remote.${rmt}.url &>/dev/null; then
  printf "%s\n" "Error: not a valid remote name" && return 1
  # Verify remote using 'git remote -v' command
 fi

 url=`git config --get remote.${rmt}.url`

 # Parse remote if local clone used SSH checkout
 [[ "$url" == git@* ]] \
 && { url="https://github.com/${url##*:}" >&2; }; \
 { url="${url%%.git}" >&2; };

 printf "%s\n" "$url"
}

Uso:

# Either launch a new terminal and copy `git-remote-url` into the current shell process, 
# or create a shell script and add it to the PATH to enable command invocation with bash.

# Create a local clone of your repo with SSH, or HTTPS
git clone [email protected]:your-username/your-repository.git
cd your-repository

git-remote-url origin

Salida:

https://github.com/your-username/your-repository
ecwpz91
fuente
5

Prefiero este ya que es más fácil de recordar:

git config -l

Enumerará toda la información útil, como:

user.name=Your Name
[email protected]
core.autocrlf=input
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=https://github.com/mapstruct/mapstruct-examples
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
Witold Kaczurba
fuente
1

fácil solo use este comando donde colocó la carpeta .git

git config --get remote.origin.url

si estás conectado a la red

git remote show origin

le mostrará la URL desde la que se clonó originalmente un repositorio local de Git.

espero que esto ayude

Ali Raza
fuente