2013-10-22 19 views
25

Io lavoro su questi rami che hanno grandi nomi fastidiosi, così spesso finiscono grep mio nome ramo corrente quando ho bisogno di spingere verso l'alto al ramo funzione dal mio ramo di caratteristica locale, in questo modo:Pipes in un gergo Alias?

git branch | grep '*' | sed 's/* //' | xargs git push origin 

Questo funziona bene. Voglio fare questo un alias, quindi ho fatto questo in ~/.gitconfig:

[alias] 
    pushcur = branch | grep '*' | sed 's/* //' | xargs git push origin 

Ora, quando corro git pushcur, ottengo il seguente errore:

usage: git branch [options] [-r | -a] [--merged | --no-merged] 

mi porta a credere che l'alias non sta analizzando correttamente le pipe. C'è qualcos'altro che dovrei fare per ottenere l'alias desiderato?

+2

Non correlato alla risoluzione del problema generale, ma in versioni ragionevolmente recenti di git, è possibile configurare 'push.default' (o' push.origin.default' per limitare l'effetto a 'origin') a' current' (anche se "a monte" potrebbe a volte essere più appropriato). Vedi la sezione push.default in [git-config] (https://www.kernel.org/pub/software/scm/git/docs/git-config.html). – torek

+0

considera anche l'utilizzo di un completamento automatico bash per archiviare i nomi dei rami! zsh con oh-my-zsh lo ha per impostazione predefinita;) – caesarsol

risposta

37

Io non credo che si può, ma si può premettere ad essa un ! per trattare il comando come un nuovo comando di shell

[alias] 
    pushcur = ! git branch | grep '*' … 
+0

"Tuttavia, forse si desidera eseguire un comando esterno, piuttosto che un sottocomando Git. In tal caso, si avvia il comando con un carattere!". - [git book] (https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases) – nietaki

3

Io di solito fare piccoli git- script e metterli in una directory che è in il mio percorso (~/.local/bin). Dai un'occhiata a git-extras per un sacco di buoni esempi.