Descobrir o nome do repositório original do qual você clonou no Git


Respostas:


91

Na raiz do repositório, o .git/configarquivo contém todas as informações sobre repositórios remotos e ramos. Em seu exemplo, você deve procurar algo como:

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

Além disso, o comando Git git remote -vmostra o nome do repositório remoto e a URL. O repositório remoto "origem" geralmente corresponde ao repositório original, do qual a cópia local foi clonada.


16
Você também pode usar git remote show originpara ver muito mais informações apenas sobre esse controle remoto.
Cascabel

1
Parece que esses dois métodos na Resposta são equivalentes - parece que git remote -vapenas lê e escreve .git/config.
flow2k

103
git config --get remote.origin.url

2
Acordado; isso é melhor porque não requer uma conexão / autenticação com o servidor remoto git. OP perguntou "usando seu repositório local", mas git remote show originchama a rede.
Travis Wilson

1
Envolvido em um nome de base como a resposta de Casey funciona bem
Jonathan Drapeau

29

Este é um comando rápido do Bash, que provavelmente você está procurando, imprimirá apenas um nome de base do repositório remoto:

Onde você busca de :

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

Alternativamente, onde você empurra para :

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

Especialmente a -nopção torna o comando muito mais rápido.


11

Eu uso isso:

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

O que retorna algo como gitRepo. (Remova .gitno final do comando para retornar algo como gitRepo.git.)

(Nota: requer Git versão 2.7.0 ou posterior)


2

Eu tropecei nessa questão tentando obter a organization/repostring de um host git como github ou gitlab.

Isso está funcionando para mim:

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

Ele é usado sedpara substituir a saída do git configcomando apenas com o nome da organização e do repo.

Algo como github/scientistseria correspondido pela classe de caractere [[:graph:]]na expressão regular.

O \1diz ao sed para substituir tudo apenas pelos caracteres correspondentes.


typo the end diz .get em vez de .git ---- git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'
MSillence

Obrigado @MSillence, corrigido.
Jhnstn

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

Ele foi testado com três 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: 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
explique o que você fez, como responder
Maher

Talvez adicione mais informações, por exemplo, sobre a dependência do Ruby e em qual plataforma isso foi testado (incluindo informações da versão).
Peter Mortensen

0

Isso funcionará para obter o valor.

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

0

Versão Powershell do comando para o nome do repo git:

(git config --get remote.origin.url) -replace '.*/' -replace '.git'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.