Quiero acceder automáticamente cd
al directorio creado por el clone
comando después de hacer git clone
algo.
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 Pretzo
proyecto.
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.
~/.bashrc
archivo (por ejemplo) y para mí al menos no funcionó, necesitaba arreglarlo con el reemplazo del línea:/usr/bin/git "$@" 2>&1 | tee $tmp
Respuestas:
Crea una función:
(Funciona para enlaces con y sin ".git")
fuente
git clone
debido 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 ...git
no 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 enhub
lugar degit
hacerlo, hágalo en la función. Si desea que solo afecte alclone
comando, verifique la acción en la función. etc.basename [email protected]:pckujawa/pattern-rec.git
da como resultado pattern-rec.git: ¿solo dejas la extensión .git cuando clonas?basename
también toma un argumento de sufijo, por lo que puede hacer:git clone $1 && cd $(basename $1 .git)
git clone
toma 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
git
comando cambie realmente el directorio de trabajo, puede cambiarlo a una función que llame al realgit
cuando sea necesario:fuente
/tmp
volumen 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 ciegamenteclone
en cierta posición fallará.which git
git () {... $ 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!$:t
hizo ( 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énoglob
sin éxito).EDITAR: en lugar de usar
sed
o!$: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:r
para 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
precmd
gancho (ejecutado antes de cada solicitud), que comprueba si la última línea de comando se parecíagit clone .../something
ogit clone .../something dir
, adivina el directorio desde allí y cd en ella.No funciona si se ha introducido
git clone foo; whatever
owhatever; git clone foo
ogit 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
OSX
mktemp
requiere parámetro adicionalgit clone
escribeSTDERR
por 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
cd
entrando 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 clone
terminacionesgit-clone
.fuente