Quiero acceder automáticamente cdal directorio creado por el clonecomando después de hacer git clonealgo.
Importante: no quiero alterar la sintaxis del comando (por ejemplo, usar un alias / función) porque rompería las terminaciones zsh que obtengo automáticamente del Pretzoproyecto.
EDITAR : La razón por la que no elegí ninguna respuesta como correcta, es porque no se dio ninguna respuesta que cumpliera con la condición anterior.
Yo uso ZSH, pero una respuesta en cualquier otro shell también es aceptable.

~/.bashrcarchivo (por ejemplo) y para mí al menos no funcionó, necesitaba arreglarlo con el reemplazo del línea:/usr/bin/git "$@" 2>&1 | tee $tmpRespuestas:
Crea una función:
(Funciona para enlaces con y sin ".git")
fuente
git clonedebido a todas las herramientas que tendría que cambiar si no estuviera usandogit. Hub tiene un alias como git, oh-my-zsh proporciona autocompletado, etc ...gitno puede cambiar el directorio de trabajo de su shell, así que de cualquier manera tendrá que envolverlo en un alias / función que haga lo que quiera y lo siga con el builtin incorporadocd. Si desea llamar enhublugar degithacerlo, hágalo en la función. Si desea que solo afecte alclonecomando, verifique la acción en la función. etc.basename [email protected]:pckujawa/pattern-rec.gitda como resultado pattern-rec.git: ¿solo dejas la extensión .git cuando clonas?basenametambién toma un argumento de sufijo, por lo que puede hacer:git clone $1 && cd $(basename $1 .git)git clonetoma un argumento adicional: el directorio a usar. Puede hacerlo clonar en el directorio de trabajo actual congit clone URL .Entonces, no hay necesidad de cambiar el directorio de trabajo; ya estas ahiSi realmente desea que el
gitcomando cambie realmente el directorio de trabajo, puede cambiarlo a una función que llame al realgitcuando sea necesario:fuente
/tmpvolumen que está en RAM, como lo hace cualquier Linux moderno a través de tmpfs. De todos modos, ¿por qué se preocupan por escribir en el disco, cuando se acaba de hacer un clon de git, que crea directorios y escribe quizá cientos de archivos en el disco ...git [flags] command [arguments], por lo que pedir ciegamentecloneen cierta posición fallará.which gitgit () {... $ git_real_home "$ @" | tee $ tmpSi proporciona el nombre local del repositorio, es realmente fácil usar $ _ :
Pero si no desea volver a escribir nombres largos, es un poco feo pero factible con sed:
EDITAR: Bueno, iba a agradecer a Manav (comentario a continuación) por el breve
pero no funciona en zsh (algo acerca de cómo zsh hace expansiones hace que no trate el primer comando como entrada
!$). Tuve que buscar lo que!$:thizo ( Avanzando en Bash Shell | $ {me: -whatever} ).!$toma la última parte del comando anterior y:t"Eliminará todos los componentes principales del nombre de archivo, dejando la cola". Buena información, pero desearía poder hacerlo funcionar con zsh (lo intenténoglobsin éxito).EDITAR: en lugar de usar
sedo!$:t(que no funciona en zsh, para mí de todos modos), encontré otras dos opciones (una adaptando la respuesta https://unix.stackexchange.com/users/5685/frederik-deweerdt con https : //unix.stackexchange.com/users/129926/henrik-n's comment):o
fuente
git clone foo/bar && cd !$:t.git, puede usar!$:t:rpara obtener el nombre de la carpeta.Una solución simple para cualquier shell POSIX es especificar el directorio para clonar explícitamente (cualquier ruta del sistema de archivos) y reutilizarlo:
y
cuando termines.
fuente
Podrías hacer algo como:
Es bastante simplista. Es un
precmdgancho (ejecutado antes de cada solicitud), que comprueba si la última línea de comando se parecíagit clone .../somethingogit clone .../something dir, adivina el directorio desde allí y cd en ella.No funciona si se ha introducido
git clone foo; whateverowhatever; git clone fooogit clone --option repo...fuente
CDing into <project>yclone_check:cd:17: no such file or directory: <project>. El error desaparece tan pronto como el último comando que ejecutó antes de cerrar el terminal es diferente$ git clone.Aquí hay una adaptación de la respuesta anterior para
OSXmktemprequiere parámetro adicionalgit cloneescribeSTDERRpor defecto (ver esto )Función:
fuente
No lo recomendaría, pero podría usar esta frase:
echo 'project' | xargs -I % sh -c 'git clone https://github.com/username/%.git && cd %'fuente
Incluya esto en su shell:
Esto funciona ocultando subrepticiamente el objetivo de clonación del error estándar de git y
cdentrando en el objetivo si (y solo si) la clonación fue un éxito.Acepta todos los argumentos y opciones que hace el regular
git clone.Puede usar el git wrapper y no tener que preocuparse por sus terminaciones, o puede deshacerse del git wrapper y volver a cablear sus
git cloneterminacionesgit-clone.fuente