По умолчанию извлекает только локальные ветви?

#git

#git

Вопрос:

Итак, у меня есть репозиторий с большим количеством удаленных ветвей. Удаление всех этих ветвей занимает много времени и занимает много места.

Что я хотел бы сделать, так это по умолчанию извлекать только ссылки, соответствующие локальным ветвям.

Я могу выполнить это, изменив конфигурацию git по умолчанию примерно так:

 [remote "origin"]
    fetch =  refs/heads/*:refs/remotes/origin/*
  

Для

 [remote "origin"]
    fetch =  refs/heads/master:refs/remotes/origin/master
    # additional fetch lines for other branches that should be fetched

  

но это имеет неприятный побочный эффект, заключающийся в том, что, если я нажимаю новую ветку --set-upstream , она автоматически не добавляет удаленную ссылку (в refs / remotes / origin ) и не извлекает эту ветку как часть a git fetch . Кроме того, git status больше не сообщается о состоянии по сравнению с вышестоящей удаленной веткой, даже если ссылка на удаленный сервер действительно существует.

Есть ли лучший способ сделать это или автоматически добавлять refspec в remote.*.fetch конфигурацию при создании новых ветвей?

Ответ №1:

Вы можете добавить refspec из командной строки :

 git config --add remote.origin.fetch  refs/heads/newbranch:refs/remotes/origin/newbranch
  

Вы можете использовать это, например, для создания ярлыка :

 git config alias.rfspec '! f () { git config --add remote.origin.fetch  refs/heads/$1:refs/remotes/origin/$1; }; f'

# usage :
git rfspec new/branch
  

или включите его в более сложный скрипт, который, например, создаст refspec и нажмет на одном дыхании :

 # in file git-pushnew :

#!/bin/bash

# first argument is branch :
br="$1"
if [ -z "$br" ]; then
# set default to : current active branch
    br=$(git rev-parse HEAD)
fi

# add the refspec for this branch :
git config --add remote.origin.fetch  refs/heads/$br:refs/remotes/origin/$br
# push this specific branch to origin :
git push -u origin $br
  

Если вы задали этот файл как исполняемый и он доступен из вашего PATH , вы можете ввести :

 git pushnew
# or
git pushnew that/branch
  

Аналогичным образом вы можете создать git-fetchnew скрипт, который будет извлекать и добавлять в refspec определенную ветку.

Комментарии:

1. Немного проще, хотя для этого все еще нужны некоторые сценарии, использовать git remote set-branches --add (который строит remote.origin.fetch строку для вас и вызывает git config --add соответствующим образом).