¿Cómo se obtiene el nombre de git repos en algún repository git?

Probablemente esta es una pregunta básica para git. Cuando trabajas en algún directory de git, ¿cómo puedes get el nombre de git repos en algún repository git? ¿Hay algún command de git?

# 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 

Bueno, si para el nombre del repository te refieres al nombre del directory raíz de git (el que contiene el directory .git) puedes ejecutar esto

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

La parte git rev-parse --show-toplevel le da la ruta a ese directory y el nombre base elimina la primera parte de la ruta.

En general, no puedes hacer esto. A Git no le importa cómo se nombre su repository git. Por ejemplo, puede cambiar el nombre del directory que contiene su repository (uno con .git subdirectory .git ), y git ni siquiera lo notará: todo continuará funcionando.

Sin embargo, si lo clonaste, puedes usar el command:

 git remote show origin 

para mostrar una gran cantidad de información sobre el control remoto original desde el que clonó su repository, y contendrá la URL de clonación original.

Sin embargo, si eliminó el enlace al control remoto original utilizando git remote rm origin , o si creó ese repository usando git init , dicha información es simplemente imposible de get, no existe en ningún lado.

Otras respuestas aún no funcionarán cuando el nombre de su directory no se corresponda con el nombre del repository remoto (y podría). Puede get el nombre real del repository con algo como esto:

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

Básicamente, llamas a git remote show origin , tomas el URL del repository del campo "Fetch URL:" y lo regexas para get la parte con el nombre: https://github.com/dragn/ neat-vimrc .git

No es necesario ponerse en contacto con el repository para get el nombre y el nombre de la carpeta no reflejará necesariamente el nombre remoto. He encontrado que esta es la forma más precisa y eficiente de get el nombre del repository actual.

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

Esto debería funcionar a partir de git 1.8.1.5. Antes de esto, el ahora obsoleto command git-repo-config habría funcionado (desde git 1.7.5).

Desafortunadamente, parece que Git no tiene ese command incorporado. Pero puedes agregarlo fácilmente con alias de Git y algo de magia de caparazón.

Como se señala en esta respuesta , puede usar git rev-parse --show-toplevel para mostrar la raíz de su carpeta git actual.

Si desea utilizar esto regularmente, probablemente sea más conveniente definirlo como un alias. Para esto, usamos git config alias.root '!echo "$(git rev-parse --show-toplevel)"' . Después de esto, puede usar git root para ver la carpeta raíz del repository en el que se encuentra actualmente.

Si desea utilizar otro nombre de subcomanda distinto de root , simplemente reemplace la segunda parte de alias.root en el command anterior con lo que desee.

Para get detalles sobre alias en Git, consulte también la página man de git config .

Si quieres el nombre completo de github repo ('nombre completo') – user / repo, y quieres hacerlo con ruby ​​…

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

Este enfoque usando git-remote funcionó bien para los controles remotos HTTPS:

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

Ejemplo

Aquí está el mío:

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

no mejor que los demás, pero hice una function bash para poder ingresar el nombre remoto si no es de origen.

 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 } 

Puedes usar: git remote -v

Documentación: https://git-scm.com/docs/git-remote

Administre el set de repositorys ("controles remotos") cuyas twigs rastrea. -v –verbose Sea un poco más detallado y muestre la URL remota después del nombre. NOTA: Esto debe colocarse entre remoto y subcommand.

Aquí hay una function bash que imprimirá el nombre del repository (si se ha configurado correctamente):

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

Explicación:

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

Esto ejecuta git rev-parse --git-dir , que imprime la ruta completa al directory .git del repository de currrent. Almacena la ruta en $gitdir .

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

Esto ejecuta cat ${gitdir}/description , que imprime los contenidos de .git/description de su repository actual. Si ha nombrado correctamente su repository, imprimirá un nombre. De lo contrario, se imprimirá el Unnamed repository; edit this file 'description' to name the repository. Unnamed repository; edit this file 'description' to name the repository.

 cat ${gitdir}/description 

Si el informe fue nombrado correctamente, imprima el contenido.

 else 

De otra manera…

 echo "Unnamed repository!" 

Dígale al usuario que el repository no tiene nombre.


Algo similar se implementa en este script .