Eu quero automaticamente cd
no diretório criado pelo clone
comando depois que eu git clone
fizer alguma coisa.
Importante: não quero alterar a sintaxe do comando (por exemplo, usar um alias / função) porque isso quebraria as conclusões zsh que eu recebo automaticamente do Pretzo
projeto.
EDITAR : A razão pela qual eu não escolhi nenhuma resposta como correta, é porque nenhuma resposta foi dada que atendeu às condições acima.
Eu uso o ZSH, mas uma resposta em qualquer outro shell também é aceitável.
~/.bashrc
arquivo (por exemplo) e para mim, pelo menos, não funcionou, eu precisava corrigi-la com a substituição do linha:/usr/bin/git "$@" 2>&1 | tee $tmp
Respostas:
Crie uma função:
(Funciona para links com e sem ".git")
fonte
git clone
por causa de todas as ferramentas que eu precisaria alterar se não estivesse usandogit
. Hub é alias como git, oh-meu-zsh fornece auto-completar, etc ...git
não pode alterar o diretório de trabalho do seu shell; portanto, de qualquer forma, você terá que envolvê-lo em um alias / função que faça o que você deseja e o segue com o builtincd
. Se você deseja chamar emhub
vez degit
, faça-o na função Se você deseja que ele afete apenas oclone
comando, verifique a ação na função. etcbasename [email protected]:pckujawa/pattern-rec.git
resulta em pattern-rec.git - você apenas interrompe a extensão .git ao clonar?basename
também usa um argumento de sufixo, para que você possa fazer: #git clone $1 && cd $(basename $1 .git)
git clone
usa um argumento adicional: o diretório a ser usado. Você pode cloná-lo no diretório de trabalho atual comgit clone URL .
Então, não há necessidade de alterar o diretório de trabalho; voce ja esta laSe você realmente deseja que o
git
comando realmente altere o diretório de trabalho, você pode alterá-lo para uma função que chama o realgit
quando necessário:fonte
/tmp
volume que está na RAM, como qualquer Linux moderno faz via tmpfs. De qualquer forma, por que você se preocupa com a escrita para o disco, quando você acabou de fazer um clone git, que cria diretórios e escreve talvez centenas de arquivos para o disco ...git [flags] command [arguments]
assim que pedir cegamenteclone
em determinada posição falhará.which git
git () {... $ git_real_home "$ @" | tee $ tmpSe você fornecer o nome local do repo, é muito fácil usar $ _ :
Mas se você não deseja digitar novamente nomes longos, é um pouco feio, mas possível com o sed:
EDIT: Bem, eu estava indo para agradecer Manav (comentário abaixo) para o conciso
mas não funciona no zsh (algo sobre como o zsh faz expansões faz com que ele não trate o primeiro comando como entrada para
!$
). Eu tive que procurar o que!$:t
fez ( Avançando no Bash Shell | $ {me: -whatever} ).!$
agarra a última parte do comando anterior e:t
"Remova todos os principais componentes de nome de arquivo, deixando a cauda". Boas informações, mas gostaria de poder fazê-lo funcionar com o zsh (tenteinoglob
sem sucesso).EDIT: Em vez de usar
sed
ou!$:t
(o que não funciona em zsh, pelo menos para mim), eu encontrei duas outras opções (uma adaptação https://unix.stackexchange.com/users/5685/frederik-deweerdt resposta 's com https : //unix.stackexchange.com/users/129926/henrik-n's comment):ou
fonte
git clone foo/bar && cd !$:t
.git
você poderá usar!$:t:r
para obter o nome da pasta.Uma solução simples para qualquer shell POSIX é especificar o diretório a ser clonado explicitamente (qualquer caminho do sistema de arquivos) e reutilizá-lo:
e
quando você acabar.
fonte
Você poderia fazer algo como:
É bastante simplista. É um
precmd
gancho (executado antes de cada prompt), que verifica se a última linha de comando se parecegit clone .../something
ougit clone .../something dir
, adivinhe o diretório a partir dele e faça o cd nele.Não funciona se você inseriu
git clone foo; whatever
ouwhatever; git clone foo
ougit clone --option repo
...fonte
CDing into <project>
eclone_check:cd:17: no such file or directory: <project>
. O erro desaparece assim que o último comando que você executou antes de fechar o terminal for diferente$ git clone
.Aqui está uma adaptação da resposta acima para
OSX
mktemp
requer parâmetro adicionalgit clone
escreveSTDERR
por padrão (veja isso )Função:
fonte
Eu não recomendaria, mas você pode usar esta frase:
echo 'project' | xargs -I % sh -c 'git clone https://github.com/username/%.git && cd %'
fonte
Inclua isso no seu shell:
Isso funciona ao coletar clandestinamente o alvo de clonagem do erro padrão do git e
cd
entrando no alvo se (e somente se) a clonagem foi um sucesso.Ele aceita todos os argumentos e opções que o regular
git clone
aceita.Você pode usar o wrapper git e não precisa se preocupar com suas conclusões, ou pode se livrar do wrapper git e reconectá
git clone
-logit-clone
.fonte