Una mejor forma de hacer git clone

Esta es una request de progtwigdor perezosa. Me gustaría crear un script de shell para automatizar el siguiente process:

git clone <remote-repo-url> cd <cloned-folder> open <cloned-folder> 

Entonces la idea aquí es clonar una URL y luego cd inmediato en la cloned-folder . El truco aquí es identificar la cloned-folder del patrón de url.

Por ahora podemos suponer que la estructura de url está en este patrón .../<cloned-folder>.git es decir, la url.

Me pregunto si realmente podemos usar awk o algunas herramientas como esa. La parte en la que estoy estancado es encontrar una regex apropiada, supongo.

CASO DE USO : Aquí el caso de uso es si clonas una url, quieres estar en el repofolder lo antes posible. El es el requisito previo si quieres ejecutar cualquier command git log como git log o mate . lo cual hacemos el 99% del time.

Gracias por adelantado.

function bash para hacer esto (también funciona en zsh):

 function lazyclone { url=$1; reponame=$(echo $url | awk -F/ '{print $NF}' | sed -e 's/.git$//'); git clone $url $reponame; cd $reponame; } 

El command awk imprime la parte después de la última / (por ejemplo, de http://example.com/myrepo.git a myrepo.git ). El command sed elimina el .git final

Uso:

 $ pwd ~/ $ lazyclone https://github.com/dbr/tvdb_api.git tvdb_api Cloning into 'tvdb_api'... remote: Counting objects: 1477, done. remote: Compressing objects: 100% (534/534), done. remote: Total 1477 (delta 952), reused 1462 (delta 940) Receiving objects: 100% (1477/1477), 268.48 KiB | 202 KiB/s, done. Resolving deltas: 100% (952/952), done. $ pwd ~/tvdb_api 

Con git clone, puede especificar la carpeta a la que clonar, en lugar de permitir que se nombre automáticamente.

 dir=myclone git clone git://somerepo "$dir" cd "$dir" open "$dir" 

Una mejora de la respuesta de @ dbr:

 function lazyclone { reponame=${1##*/} reponame=${reponame%.git} git clone "$1" "$reponame"; cd "$reponame"; } 

Con la ayuda de la expansión de parameters de Bash, podemos deshacernos de awk y sed .

La versión del parámetro bash es bastante agradable, fui con el basename porque parecía más limpio

 function gclocd { # git clone and enter the cloned file if [[ -z "$2" ]]; then reponame=$(basename "$1" ".git"); else reponame=$2; fi git clone "$1" "$reponame"; cd "$reponame"; } 

Utilizo nombres de funciones brevemente memorables con tabulaciones para un montón de cosas como esta y las puse en mi .bashrc como alias / funciones, por ejemplo, gcmmt para git commit -m . lazy bien puede ser un prefijo para las cosas en tu caparazón, lo que significa que es un poco más para escribir cada vez …

En lugar de get el nombre del directory de la url, podríamos simplemente ingresar al último directory creado. Aquí está el script de shell correspondiente:

 gclcd() { git clone --recursive $* && cd "$(ls -t | head -1)" }