2016-11-24 9 views
7

私は遠隔地に次のブランチを持っています。gitは指定されたプレフィックスを持つブランチを取り出します

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 

私はft_dで始めている枝を取得したいです。 git fetchでどうすればいいですか? 私のGitバージョンは1.7.9.5です。 (とGitのバージョン2.6は、あなたが部分部分文字列を指定することができます

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

答えて

5

ので:

+0

私のGitバージョンは1.7.9.5です。私はgitを更新し、これをチェックします。 – dnsh

+0

これは動作します。私がgitに新しいので、私はこれを完全に理解することができませんでした。このソリューションを理解するには、https://git-scm.com/book/en/v2/Git-Internals-The-Refspecを読んでいた。 – dnsh

0

私はGitのブランチをフェッチするための正規表現をサポートしていますかわからない、しかし、あなたはあなたのためにそれをしない簡単なスクリプトを作成することができます単純なグロブスタイルマッチング)をフェッチまたはプッシュrefspecで実行します。したがって:

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

あなたが求めていることをします。一般化された正規表現はで、は利用できません。一般化されたグロブはありません。*の1つの特殊なケースのみが2つの固定文字列間のすべてに一致します。 (ここではいくつかの固定文字列が空になることがあります。通常、バック半分は、すなわち、私たちは通常、名前xで終わるだけの枝を取得するには、refs/heads/*xrefs/heads/*がないフェッチされる。)

をあなたのGitが2.6より古い場合は、何もありません1つのフェッチでこれを行う簡単な方法。ループ内で複数のフェッチが必要になる場合は、おそらくgit ls-remoteの出力を使用して独自の名前マッチングを行う必要があります。

remote.origin.fetch設定エントリまたはエントリに指定されているもちろん、git fetch originは通常ただ、オーバーすべてをもたらすでしょう、そしてほとんどの場合、この方法をgit fetch制約に少しポイントがあります。あなたが気にしてもよろしいですか?)

+0

。私のブランチ名には順序はありません。私は私の質問を更新しました。 – dnsh

0

もう一つの方法は、リストのあなたのリモートブランチである:

PREFIX='ft_d_feature_' 

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

編集

は、実際には各ブランチのためgit fetchを呼び出すには:

PREFIX='ft_d_feature_' 

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

EDIT2

もう一つの方法は、Gitのエイリアスを作成している、あなたはあなたの~/.gitconfigファイルに追加することができます。

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

使用法:私はfeature1,2,3書い簡単にするために git fetch-prefix ft_d_feature_

関連する問題