Как игнорировать некоторые ветви / теги, копируемые в локальный git, когда git fetch --all

У меня есть много пультов, добавленных в мой мерзавец. Каждый пульт является хранилищем для одного разработчика. Каждый день я fetch --all чтобы увидеть любые новые создаваемые ими ветки, готовые к просмотру.

Тем не менее, разработчики могут выдвигать "частные" ветки к удаленному. Скажем, все ветви с именами с префиксом подчеркивания не готовы к просмотру, в то время как другие ветви готовы к просмотру.

При выполнении git fetch --allмой мерзавец /libexec/git-core/git-gui) будет видеть все ветви независимо от того, имеют ли они префикс подчеркивания или нет. Это усложняет график.

я хочу git fetch игнорировать эти _XXXX ветви от загрузки в мой локальный мерзавец. Поэтому, когда я просматриваю граф git, это выглядит так:

  • Показывает филиалы: RemoteA/Branch1, RemoteB/Branch1, RemoteB/Branch2
  • Игнорирует ветки: RemoteA/_Branch2, RemoteB/_Branch3

Как я могу это сделать?

4 ответа

Расширяя ответ VonC с помощью специальной папки "review"1, вы можете изменить .git/configзаписи для пультов ваших коллег. Вот соответствующая документация.

Где это было когда-то

[remote "fred"]
    url = something.git
    fetch = +refs/heads/*:refs/remotes/fred/*

Вы можете изменить его на

[remote "fred"]
    url = something.git
    fetch = +refs/heads/review/*:refs/remotes/fred/review/*
    fetch = +refs/heads/other_pattern/*:refs/remotes/fred/other_pattern/*
    fetch = +refs/heads/specific_branch:refs/remotes/fred/specific_branch

После этого вам, возможно, придется очистить ссылки на ссылки, которые вы уже получили, но в будущем git fetch --allс или git fetch freds не будет обновлять ничего, кроме указанных вами шаблонов.


1 Или столько специальных или интересных папок / веток, сколько вам нужно.

Вместо использования _ Соглашение об именах, вы можете использовать пространства имен, толкая ветку в origin/review/Branch1 (git push Branch1:review/Branch1)
(с именем "группа" в этом ответе или "иерархическое имя ветви (имена ветвей с косой чертой) в этом ответе)

Таким образом, вам нужно только извлечь то, что находится в пространстве имен "review":

git fetch +refs/heads/review/*:refs/remotes/origin/review/*

Единственным другим вариантом будет скрипт, который бы:

  • Вывести список удаленных веток (ничего не загружая): git ls-remote origin
  • для каждой ветви с правильным именем, выбрать только эту ветку

Вы можете сделать это за один шаг с псевдонимом. Добавьте это к вашему ~/.gitconfig файл:

[alias]
    fall = !sh -c 'git fetch --all && git branch -r | sed /HEAD/d | grep /_ | xargs git branch -dr' --

А потом просто скажи git fall, Это удалит все удаленные ветви, которые содержат /_,

Вы можете наблюдать тонкости псевдонимов, которые являются командами оболочки.:-/

Вы могли бы использовать ignore-refs опция:

git fetch --ignore-refs branch123
Другие вопросы по тегам