Как игнорировать некоторые ветви / теги, копируемые в локальный 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 fred
s не будет обновлять ничего, кроме указанных вами шаблонов.
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