Как git fetch с удаленного доступа только к веткам, которые у меня уже есть локально (частичная синхронизация с удаленным)

Допустим, у меня есть пульт git с именем alice. У этого пульта есть сотни веток, но я извлек из него только несколько веток, используя git fetch alice some-branch, git fetch alice another-branch и т. Д.

Теперь я хочу синхронизировать из alice только те ветки, которые у меня уже есть - я не хочу получать их все. Как мне это сделать?


person jakub.g    schedule 22.01.2016    source источник


Ответы (2)


Я бы предпочел настроить определенные спецификации для выборки в локальной конфигурации моего репо, чем полагаться на магический синтаксический анализ bash.

git config remote.alice.fetch 'refs/heads/branch1/*:refs/remotes/origin/branch1/*'
git config --add remote.alice.fetch 'refs/heads/branch2/*:refs/remotes/origin/branch2/*'
git config --add remote.alice.fetch 'refs/heads/branch3/*:refs/remotes/origin/branch3/*'

Таким образом, git fetch alice будет получать только указанные ветки.

person VonC    schedule 22.01.2016

Я не нашел простого решения, но это работает для меня:

git branch -ar | sed 's|^[ \t]*||' | grep -e '^alice/' | sed 's|alice/||' | xargs git fetch alice

Объяснение:

  • перечислить удаленные ветки
  • удалить ведущие пробелы, созданные веткой git
  • сохранять только ветки, начинающиеся с «alice /», и удалять этот префикс из каждого имени ветки
  • передать названия веток git fetch

Или в качестве общей функции bash, которую можно добавить в ваш .bashrc:

# Usage:
#  git-sync-remote <remote-name>
# Example:
#  git-sync-remote alice
git-sync-remote(){
  REMOTE_NAME="$1"
  if [ -z "${REMOTE_NAME}" ] ; then
    echo 'You need to provide remote name'
    return
  fi
  git branch -ar | sed 's|^[ \t]*||' | grep -e "^${REMOTE_NAME}/" | sed "s|${REMOTE_NAME}/||" | xargs git fetch "${REMOTE_NAME}"
}
person jakub.g    schedule 22.01.2016