2012-07-05 35 views
6

Nếu tôi có các chi nhánh sau trong gitchuyển đổi chi nhánh tại git theo tên một phần

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

Tôi muốn chuyển sang một chi nhánh sử dụng --just-- số, thậm chí nếu điều đó đòi hỏi phải có một kịch bản gọi Đối Ví dụ:

switch_branch 1178 

và kịch bản/giải pháp nên làm như sau

  1. git branch -a (tìm tất cả các chi nhánh địa phương và từ xa trong kho lưu trữ của tôi)
  2. lọc bởi tham số nhất định ('1178' ở trên)
  3. trích xuất tên của các chi nhánh git có thể sử dụng
  4. chuyển sang chi nhánh rằng cách khuyến khích

là gì để làm điều đó mà không phải thực hiện tất cả các bước này theo cách thủ công?

Tôi đang sử dụng Mac OSX, nếu điều đó quan trọng ở đây.

cập nhật - bash-nó (github.com/revans/bash-it) phục vụ mục đích của tôi

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

Sử dụng bash bạn có thể sử dụng 'git checkout 1178 [TAB]';) – KingCrunch

+0

Và sử dụng một số [ưa thích] (https://github.com/robbyrussell/oh-my-zsh/) [helper] (https://github.com/revans/bash-it/) nó chỉ là 'gco 1178 [TAB]' – Stefan

+0

Không thực sự làm việc cho tôi. Tôi đã tìm thấy một số tài liệu tham khảo trên web để tự động hoàn thành cho băm, nhưng đó không phải là những gì tôi đang tìm kiếm. – ramonrails

Trả lời

0

Tôi đã chuyển sang quy trình làm việc git-flow và vui mừng về điều đó kể từ đó.

+0

Làm cách nào để 'git flow' giải quyết vấn đề thanh toán theo tên từng phần? – bvj

9

Có rất ít dịp mà bạn muốn kiểm remotes/origin/*. Chúng tồn tại nhưng với mục đích của phím tắt này, chúng ta đừng lo lắng về chúng. Điều này sẽ giúp bạn có được những gì bạn muốn trên OSX:

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

Sau đó bạn có thể phát hành git sco <number> để kiểm tra một chi nhánh bao gồm <number> nhưng không bao gồm "điều khiển từ xa". Bạn có thể thay đổi sco thành bất kỳ thứ gì bạn muốn. Tôi chỉ chọn nó cho "siêu thanh toán".

Tất nhiên điều này sẽ không hoạt động tốt nếu bạn có nhiều chi nhánh khớp với <number>. Nó nên, tuy nhiên, là một điểm khởi đầu tốt.

+1

Nó phục vụ mục đích nhưng tôi thấy tốt hơn. https://github.com/revans/bash-it/ – ramonrails

3

Đây là giải pháp mà tôi tự tìm ra.

[ ${#} -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 

tôi gọi nó git-rcheckout ("r" cho regex, vì thiếu một tên tốt hơn) và đặt nó trong con đường của tôi (đó là một chút quá lâu để bót đi giày vào .gitconfig của tôi.)

Nó sẽ cố gắng khớp với các nhánh địa phương và từ xa (mặc dù chỉ kiểm tra người dân địa phương), và sẽ chịu đựng (IE bỏ qua cho mục đích tìm kiếm) một số kiểu chữ JIRA, chẳng hạn như các chi nhánh bắt đầu bằng tiền tố phổ biến và những thứ có kiểu ID vé JIRA.

ví dụ:Gõ này:

git rcheckout this 

nên phù hợp với những thứ như

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 

Nhưng regexes Tôi đã sử dụng là đủ khoan dung mà bạn cũng có thể làm:

git rcheckout JIRA-123 

Để truy cập:

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

Nó mặc định là tìm kiếm tiền tố chi nhánh, nhưng trên thực tế bạn có thể sử dụng regexes để làm những việc fancier nếu muốn, như vậy:

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

Tác phẩm sẽ dành cho các tên chi nhánh lớn thường được tạo bởi Jira. Cũng hỗ trợ mô hình 'git flow'. Xuất sắc. – bvj

Các vấn đề liên quan