Мне нужно удалить старые и неподдерживаемые ветки из нашего удаленного репозитория. Я пытаюсь найти способ перечислить удаленные ветки по дате их последнего изменения, но не могу.
Есть ли простой способ таким образом перечислить удаленные ветки?
git
maintenance
administration
branch
Рони Янив
источник
источник
Ответы:
У commandlinefu есть 2 интересных предложения:
или:
Это для локальных веток в синтаксисе Unix. Используя
git branch -r
, вы можете аналогично показать удаленные ветки:Майкл Форрест упоминает в комментариях, что zsh требует экранирования для
sed
выражения:kontinuity добавляет в комментариях :
В нескольких строках:
Примечание: n8tr «s ответ , основанный на
git for-each-ref refs/heads
чище. И быстрее .См. Также « Вариант только имени для
git branch --list
? »В более общем смысле, Tripleee напоминает нам в комментариях :
(Я проиллюстрировал этот момент в 2014 году словами «В чем разница между программированием оболочки
$(command)
и`command`
в чем заключается разница ? »)источник
/json
в конец любого URL-адреса commandlinefu.com, и вы получите все команды в формате JSON.Вот что я использую:
Это результат:
Для удаленных веток просто используйте «refs / remotes» вместо «refs / Head»:
Основываясь на ответе n8tr , если вас также интересует последний автор в ветке, и если у вас есть инструмент «столбец», вы можете использовать:
Что даст вам:
Вы можете вызвать "git fetch --prune" перед тем, как получить самую свежую информацию.
источник
authordate
(что, похоже, было при первом создании ветки?). Если вы измените значениеauthordate
на,committerdate
то вы увидите даты самой последней фиксации в каждой ветке.git for-each-ref --sort='-committerdate:iso8601' --format=' %(committerdate:iso8601)%09%(refname)' refs/heads
Основываясь на Olivier Croquette , мне нравится использовать относительную дату и сокращать имя ветки следующим образом:
Что дает вам результат:
Я рекомендую создать файл Bash для добавления всех ваших любимых псевдонимов, а затем поделиться скриптом с вашей командой. Вот пример, чтобы добавить только этот:
Затем вы можете просто сделать это, чтобы получить хорошо отформатированный и отсортированный список локальных веток:
источник
Просто чтобы добавить комментарий от @VonC, выберите предпочтительное решение и для удобства добавьте его в список псевдонимов ~ / .gitconfig:
Затем простой "git branchdate" распечатает список для вас ...
источник
--format='%(authordate)%09%(objectname:short)%09%(refname)'
которая также получает короткий хеш каждой ветки.| tac
, просто--sort='authordate'
вместо-authordate
Вот что я придумал после того, как просмотрел это .
PREV_REF
Проверка удалить дубликаты , если более чем одна ветвь указывает на то передай. (Как и в локальной ветке, которая существует и на удаленном компьютере.)ЗАМЕТЬТЕ, что в соответствии с запросом OP
git branch --merged
иgit branch --no-merged
полезны для определения того, какие ветки можно легко удалить.[ https://git-scm.com/docs/git-branch]
источник
Отсортированные удаленные ветки и дата последней фиксации для каждой ветки.
источник
Я сделал два варианта, основываясь на ответе VonC .
Мой первый вариант:
Это обрабатывает локальные и удаленные ветки (
-a
), обрабатывает состояние отдельной головы (более длинная команда sed, хотя решение довольно грубое - она просто заменяет информацию об отключенной ветке ключевым словом HEAD), добавляет в тему фиксации (% s ) и помещает объекты в столбцы с помощью буквальных вертикальных символов в строке формата и передает конечный результат вcolumn -t -s "|"
. (Вы можете использовать что угодно в качестве разделителя, если этого не ожидаете в остальной части вывода.)Мой второй вариант довольно хакерский, но я действительно хотел что-то, у кого все еще есть индикатор «это ветка, в которой вы сейчас находитесь», как это делает команда ветки.
Это превращает метку,
*
которая отмечает текущую ветвь, в ключевое слово, и когда тело цикла видит это ключевое слово, оно вместо этого устанавливает флаг и ничего не выводит. Флаг используется, чтобы указать, что для следующей строки следует использовать альтернативное форматирование. Как я уже сказал, это полностью взломано, но это работает! (В основном. По какой-то причине мой последний столбец выходит за пределы текущей ветки.)источник
git for-each-ref
это удобный для скриптов способ обработки ветвей. Вам нужно будет запустить символическую ссылку один раз, чтобы получить текущую ветку.Я сделал простой псевдоним, не уверен, что это именно то, что просили, но это просто
Я сделал это, так как хотел перечислить все ветки, а не только мои локальные ветки, которые выше команды делают только
alias git_brs="git fetch && git branch -av --format='\''%(authordate)%09%(authordate:relative)%09%(refname)'\'"
Вы можете перенаправить вверх,
grep origin
чтобы получить только происхождениеВ нем перечислены все ветки вместе с последней измененной датой, что помогает мне решить, какую из них мне выбрать для последней версии.
Это приводит к отображению типа ниже
Попробуйте и дайте мне знать, помогло ли это, счастливый gitting
источник
Или вы можете использовать мой PHP-скрипт https://gist.github.com/2780984
источник
Вот функцию, которую вы можете добавить в свой bash_profile, чтобы упростить эту задачу.
Использование в репозитории Git:
branch
печатает все местные отделенияbranch -r
печатает все удаленные веткиФункция:
источник
В PowerShell ниже показаны ветки на пульте дистанционного управления, которые уже объединены и имеют возраст не менее двух недель (
author:relative
формат начинает отображать недели вместо дней через две недели):источник