Ignorar un solo espacio de nombres en git refspec

Considera el siguiente repository. Tiene muchas sucursales privadas para los miembros del equipo, todas bajo el espacio de refs/heads/team/ namespace, que no quiero search, pero todavía quiero search todo el rest, incluidas las twigs posiblemente nuevas creadas fuera de ese espacio de nombres del team

 $ git ls-remote http://gerrit.asterisk.org/asterisk refs/heads/* | wc -l 217 $ git ls-remote http://gerrit.asterisk.org/asterisk refs/heads/* | grep -v refs/heads/team/ | wc -l 32 

Estoy buscando fetch = +refs/heads/*:refs/remotes/golden/* , pero estas twigs privadas son simplemente abrumadoras mi espacio de nombres refs/remote/golden , lo que hace más difícil la visión general, y también requieren más espacio para el repository local .

¿Es posible get refs/heads/* , pero excluir refs/heads/team/* ?

Lamentablemente no.

Afortunadamente, puede acercarse arbitrariamente, especialmente si está dispuesto a usar una búsqueda de dos pasos cada vez, o una búsqueda seguida de un pase de eliminación (probablemente esto sea más eficiente o, al less, eficiente en el time; un poco más de espacio, dependiendo de cuántos objects terminan siendo inútiles).

Básicamente, la idea aquí es hacer una list de todo lo que hay que hacer, primero ejecutando git ls-remote y luego haciendo su propio filtrado y reescribiendo fetch = entry (bueno, inputs) para el control remoto:

 git ls-remote "$remote" 'refs/heads/*' | (git config --unset-all "remote.$remote.fetch"; while read hash ref; do case $ref in refs/heads/team/*) continue;; esac rmtref="refs/remotes/$remote/${ref#refs/heads/}" git config --add "remote.$remote.fetch" "+$ref:$rmtref" done) git fetch "$remote" 

(agregue un poco de trabajo de front-end para configurar $remote apropiadamente). La key que hace que esto funcione es que git se combina y luego obedece a todas las fetch = lines.

Para la otra idea, ejecuta una búsqueda normal ( +refs/heads/*:refs/remotes/... ) seguida de una serie de git update-ref -d refs/remotes/$remote/${ref#refs/heads/} para refs que coinciden con la forma no deseada. Mezcle en un git gc (o git repack y / o ciruela) después si lo desea, para networkingucir el tamaño del repository.