opatut が指摘したように、リモートのブランチ参照を「取得しない」ことにはほとんどメリットがありません。気にしないものを使用しないでください。
それらを使用することを主張する自動化されたものがある場合 [編集: 特定のブランチをブラックリストに登録したい -ホワイトリストに登録したいだけの場合は、以下を参照]、2 つの回避策があります。
- 毎回それらを削除します(後で何かをする必要があります
git fetch
)
- 以下に説明するトリックを使用します( の後に何かをする必要もあります
git fetch
)
「リモート ブランチ」は単に形式の参照です。ここで、 はリモートの名前 (例: )で、 はブランチの名前 (例: ) です。それらを作成するのは、レポのファイルに表示される次の行です (実行してエディターで表示します)。refs/remotes/rmt/br
rmt
origin
br
master
.git/config
git config -e
fetch = +refs/heads/*:refs/remotes/origin/*
これはgit fetch
、一致するすべての ref 名を取得してrefs/heads/*
それらを更新する必要があることを示しています (強制的に、+
文字のために — そうしないと早送り更新に制限されます)、refs/remotes/origin/*
その*
部分が明らかに一致する名前を に変更します。
したがって、これを次のように変更すると:
fetch = +refs/heads/*:refs/real-remotes/origin/*
操作はの代わりにgit fetch
更新 (または必要に応じて作成)します。refs/real-remotes/origin
refs/remotes/origin
その後、次のことができます。
git for-each-ref refs/real-remotes/origin/
これらすべての ref を ( で使用可能なすべてのオプションを使用してgit for-each-ref
) 列挙し、それらをスクリプトで実行して、ブラック リストに登録されているものを削除し、残りのものをrefs/remotes/origin/
. 例えば:
git for-each-ref refs/real-remotes/origin/ |
while read sha1 reftype refname; do
shortname=${refname#refs/real-remotes/origin/}
if [ $shortname != master ]; then
git update-ref refs/remotes/origin/$shortname $sha1
fi
done
これにより、(これは非常に奇妙なことですが、実行したばかりです) を除く すべてが更新されます。master
(補足: いわば、シンボリックなリモート ref を「ハードリンク」します。たとえば、 thisHEAD
である a がある場合、ref: ref/remotes/origin/master
それが参照するものに変わります。そのような参照をgit symbolic-ref
テストするために使用しますが、それはアップしています見つかったらどうするかはあなた次第です。)
(これと、特定のリモート ブランチを明示的に削除することとの主な違いは、このバージョンでは、リモート ブランチを更新せずにそのままにしておくことです。たとえば、これは移動せずに残しますorigin/master
。「実際の」リモート マスターは現在、 にのみ存在しrefs/real-remotes/origin/master
ます。)
[編集: 特定のブランチをホワイトリストに登録したい場合は、それらを明示的にリストしてください:
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/devel:refs/remotes/origin/devel
fetch =
必要な数の行を使用します。ただしgit fetch
、リモートにこれらのブランチのいずれかが存在しない場合は、エラーが発生することに注意してください。]