2016-11-24 12 views
7

Tôi có các chi nhánh sau đây có nguồn gốc từ xa.git tìm nạp các chi nhánh có tiền tố được chỉ định

ft_d_feature_abc 
ft_d_feature_xyz 
ft_d_feature_lam 
ft_d_feature_ton 
ft_m_feature_mak 
ft_m_feature_echo 
ft_m_feature_laa 
ft_m_feature_pol 

Tôi muốn tìm các chi nhánh bắt đầu bằng ft_d. Làm thế nào tôi có thể đạt được điều này với git fetch? Phiên bản Git của tôi là 1.7.9.5.

Trả lời

5

Kể từ Git phiên bản 2.6, bạn có thể chỉ định chuỗi con từng phần (với kết hợp kiểu glob đơn giản) trong tìm nạp hoặc đẩy refspec. Do đó:

git fetch origin 'refs/heads/ft_d*:refs/remotes/origin/ft_d*' 

sẽ làm những gì bạn yêu cầu. Cụm từ thông dụng tổng quát là không phải là có sẵn, cũng không phải là các ô được tổng quát: chỉ một trường hợp cụ thể là * khớp với mọi thứ giữa hai chuỗi cố định. (Một số chuỗi cố định ở đây có thể được sản phẩm nào. Thông thường, nửa lại được, ví dụ, chúng ta thường lấy refs/heads/*, không refs/heads/*x để có được chỉ chi nhánh có tên kết thúc bằng x.)

Nếu Git của bạn là lớn hơn 2,6, không có cách đơn giản để thực hiện việc này trong một lần tìm nạp. Bạn sẽ cần nhiều lần tìm nạp, trong một vòng lặp và bạn sẽ cần phải thực hiện đối sánh tên của riêng mình, có thể sử dụng đầu ra từ git ls-remote.

(Tất nhiên, git fetch origin sẽ thường chỉ mang mọi thứ trên, theo quy định tại mục remote.origin.fetch cấu hình hoặc mục, và trong nhiều trường hợp có rất ít điểm trong kìm hãm git fetch theo cách này. Bạn có chắc chắn bạn muốn làm phiền?)

+0

Phiên bản Git của tôi là 1.7.9.5. Tôi sẽ cập nhật git của tôi và sẽ kiểm tra điều này. – dnsh

+0

Tính năng này hoạt động. Vì tôi mới thành git nên tôi không thể hiểu được điều này hoàn toàn. Tôi phải đọc https://git-scm.com/book/en/v2/Git-Internals-The-Refspec để hiểu giải pháp này. – dnsh

0

Tôi không chắc chắn Git hỗ trợ regexes cho việc lấy một chi nhánh, tuy nhiên, bạn có thể tạo ra một kịch bản đơn giản nào đó cho bạn:

for i in {1..3}; 
do 
    git fetch origin ft_d_feature$i 
done 
+0

vì đơn giản tôi viết feature1,2,3. Không có trình tự trong tên chi nhánh của tôi. Tôi đã cập nhật câu hỏi của mình. – dnsh

0

Một cách khác là danh sách các chi nhánh từ xa của bạn:

PREFIX='ft_d_feature_' 

for BRANCH in $(git branch | cut -c 3-); do 
    if [[ $BRANCH = $PREFIX* ]] ; then 
     echo $BRANCH; 
    fi 
done 

Sửa

Để thực sự gọi git fetch cho từng ngành:

PREFIX='ft_d_feature_' 

for BRANCH in $(git branch | cut -c 3-); do 
    if [[ $BRANCH = $PREFIX* ]] ; then 
     git fetch origin $BRANCH 
    fi 
done 

Edit2

Một cách khác là tạo ra một bí danh git, bạn có thể thêm nó vào tập tin ~/.gitconfig của bạn.

[alias] 
    fetch-prefix = "!f(){ for BRANCH in $(git branch | cut -c 3-); do case $BRANCH in $1*) git fetch origin $BRANCH; esac; done; }; f" 

Cách sử dụng: git fetch-prefix ft_d_feature_

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