2012-07-05 8 views
6

Wenn ich die folgenden Zweige in gitSchalter Zweig in git durch einen Teil des Namens

1194-qa-server 
master 
remotes/origin/1178-authentication 
remotes/origin/1194-qa-server 
remotes/origin/HEAD -> origin/master 
remotes/origin/master 

ich auf einen Zweig wechseln möchten die Nummer mit --just--, auch wenn das erfordert ein Skript Aufruf Für Beispiel:

switch_branch 1178 

und das Skript/Lösung sollte folgende

  1. git branch -a tun (finden Sie alle Zweige der lokalen und Fern in meinem Repository)
  2. Filter durch den gegebenen Parameter (‚1178‘ oben)
  3. den Namen der Branche extrahieren, die git
  4. Schalter auf diesen Zweig

Was ist der empfohlene Weg nutzen können um es zu tun, ohne all diese Schritte manuell durchführen zu müssen?

Ich benutze Mac OSX, wenn das hier zählt.

update - bash-it (github.com/revans/bash-it) dient meinem Zweck

Welcome to Bash It! 

Here is a list of commands you can use to get help screens for specific pieces of Bash it: 

    rails-help     list out all aliases you can use with rails. 
    git-help     list out all aliases you can use with git. 
    todo-help     list out all aliases you can use with todo.txt-cli 
    brew-help     list out all aliases you can use with Homebrew 
    aliases-help    generic list of aliases. 
    plugins-help    list out all functions you have installed with bash-it 
    bash-it-plugins    summarize bash-it plugins, and their installation status 
    reference <function name> detailed help for a specific function 
+0

bash verwenden Sie verwenden können, 'git Kasse 1178 [TAB]';) – KingCrunch

+0

Und mit einige [Phantasie] (https://github.com/robbyrussell/oh-my-zsh/) [Helfer] (https://github.com/revans/bash-it/) es ist nur 'gco 1178 [TAB]' – Stefan

+0

Nicht wirklich für mich arbeiten. Ich habe einige Referenzen im Internet gefunden, die die automatische Vervollständigung von Hash-Dateien ermöglichen, aber das ist nicht das, wonach ich suche. – ramonrails

Antwort

0

Ich wechselte zu git-flow Workflow und glücklich darüber seit damals.

+0

Wie löst 'git flow' das Problem des Checkouts durch einen Teilnamen? – bvj

9

Es gibt sehr wenige Fälle, in denen Sie zur Kasse remotes/origin/* wollen würde. Sie existieren, aber für die Zwecke dieser Abkürzung sorgen wir uns nicht um sie. Dadurch werden Sie bekommen, was Sie auf OSX wollen:

git config --global alias.sco '!sh -c "git branch -a | grep -v remotes | grep $1 | xargs git checkout"' 

Sie dann git sco <number> ausstellen kann einen Zweig zur Kasse, die <number> jedoch nicht für „Fernbedienungen“ enthält. Sie können sco ändern, um alles zu sein, was Sie möchten. Ich habe es nur für "Super Checkout" ausgewählt.

Natürlich funktioniert das nicht besonders gut, wenn Sie mehr als einen Zweig haben, der <number> entspricht. Es sollte jedoch ein guter Ausgangspunkt sein.

+1

Es dient dem Zweck, aber ich fand bash-es besser. https://github.com/revans/bash-it/ – ramonrails

3

Hier ist die Lösung, die ich für mich selbst gefunden habe.

[ ${#} -ne 1 ] && { echo -e "Please provide one search string" ; exit 1 ; } 
MATCHES=($(git branch -a --color=never | sed -r 's|^[* ] (remotes/origin/)?||' | sort -u | grep -E "^((feature|bugfix|release|hotfix)/)?([A-Z]+-[1-9][0-9]*-)?${1}")) 
case ${#MATCHES[@]} in 
    (0) echo "No branches matched '${1}'" ; exit 1 ;; 
    (1) git checkout "${MATCHES[0]}"  ; exit $? ;; 
esac 
echo "Ambiguous search '${1}'; returned ${#MATCHES[@]} matches:" 

for ITEM in "${MATCHES[@]}" ; do 
    echo -e " ${ITEM}" 
done 
exit 1 

Ich nannte es git-rcheckout („r“ für regex, in Ermangelung eines besseren Namen) und es mir in den Weg gelegt (es ist ein wenig zu lange in meinem .gitconfig Schuhanzieher.)

Es wird versuchen, mit lokalen und entfernten Zweigen übereinzustimmen (obwohl sie nur Einheimische auscheckt), und wird tolerieren (IE für die Zwecke der Suche missachten) einige JIRA stylings, wie Zweige, die mit allgemeinen Präfixen beginnen und Sachen wie JIRA ticket IDs gestylt.

z.B.dies eingeben:

git rcheckout this 

Sollte Dinge passen wie

this-branch 
feature/this-branch 
bugfix/JIRA-123-this-branch 
JIRA-123-this-branch 
remotes/origin/this-branch 
remotes/origin/feature/this-branch 
remotes/origin/bugfix/JIRA-123-this-branch 
remotes/origin/JIRA-123-this-branch 

Aber die reguläre Ausdrücke ich verwendet habe, sind ausreichend tolerant, dass Sie auch tun könnte:

git rcheckout JIRA-123 

Um Zugang:

bugfix/JIRA-123-this-branch 
JIRA-123-this-branch 
remotes/origin/bugfix/JIRA-123-this-branch 
remotes/origin/JIRA-123-this-branch 

Voreingestellt für Zweig Präfixe gesucht, aber eigentlich können Sie reguläre Ausdrücke verwenden, um ausgefallenere Dinge zu tun, wenn gewünscht, etwa so:

git rcheckout '.*bran' 
git rcheckout '.*is-br.*h' 
+0

Funktioniert für die großen Zweignamen, die normalerweise von Jira erstellt werden. Unterstützt auch das "Git-Flow" -Paradigma. Ausgezeichnet. – bvj