#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
соответствующим образом).