Git извлекает запросы на извлечение только после заданного

Как git fetch pull-запросы только после заданного PR?

Как специалист по сопровождению проекта, когда вы просматриваете запросы на включение из GitHub на предмет их возможного объединения, вы обычно добавляете следующую строку в свой файл .git/config. Возможно есть и другие методы, я использую только этот.

[remote "origin"]
         url = ....
         fetch = +refs/heads/*:refs/remotes/origin/*
this =>  fetch = +refs/pull/*/head:refs/pull/origin/*

Каждую git fetch (или git pull) извлекаются все новые PR, и вы можете над ними работать.

Если вы работаете над новой рабочей областью git, первый git fetch загружает все существующие PR с самого начала.

Есть одна ситуация, когда это проблема: мой репозиторий разросся из-за прошлых ошибок в двоичных файлах. Подкаталог .git имел размер 2 ГБ, и любая операция git clone занимала много времени. Эту историю переписали, зашили, ветки почистили и т.д. Теперь история .git занимает всего 43 МБ. Все идет нормально. За исключением того, что когда вы добавляете строку fetch = +refs/pull/*/..., она извлекает все прошлые PR, в том числе до перезаписи истории, которые основаны на старой толстой истории. Первый git fetch занимает много времени, а подкаталог .git снова занимает 2 ГБ. Всю старую жирную историю скачали только из-за старого пиара.

Предполагая, что нас больше не интересуют PR, предшествующие данному, как бы вы настроили свой локальный репозиторий, чтобы получать только более свежие PR, чем этот?

Выбранный PR можно получить с помощью следующей строки в .git/config. Основываясь на текущей (переписанной) истории, он не раздувает репо больше, чем необходимо.

    fetch = +refs/pull/1507/head:refs/pull/origin/1507

Однако нам нужно добавлять такие строки одну за другой для любого нового PR.

Есть ли способ сказать «получить все PR, начиная с 1507 года»? Или какие-то другие критерии отбора пиара, например время?

Основная идея состоит в том, чтобы избегать всех PR до определенной точки.

Уничтожение репозитория GitHub и его воссоздание — не вариант. Это проект с открытым исходным кодом, у которого слишком много истории, выпусков, проблем, обсуждений и т. д. Если вам интересно, это https://github.com/tsduck/tsduck

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Есть ли способ сказать «получить все PR, начиная с 1507 года»? Или какие-то другие критерии отбора пиара, например время?

Я не думаю, что существует собственный способ, а это значит, что вам нужно написать его.
И команды gh pr должны быть полезны как для:

Спасибо, я всегда предпочитаю использовать простой git и забывать о gh. Кажется, это лучший способ выбрать PR-сообщения с GitHub.

Thierry Lelegard 30.08.2024 10:36

@ThierryLelegard Правда, просто помните о «Основном пределе скорости для аутентифицированных пользователей »: предпочтительнее проходить аутентификацию при выполнении вызовов gh: это увеличивает этот лимит.

VonC 30.08.2024 12:10

Простой способ резко сократить размер клонирования/выборки в подобных случаях:

git clone -n --filter=tree:0 $url $path
cd $path
git config --add remote.origin.fetch +refs/pull/*/head:refs/pull/origin/*
git fetch  # to tee up the barest sketch of the pulls
git fetch --filter=blob:limit=32k
git checkout

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

Если вы хотите поиграть с локальным репо, вы можете настроить локальную фильтрацию, например.

git config uploadpack.allowfilters 1
git config uploadpack.allowanysha1inwant 1

git clone -n --filter=tree:0 file://$PWD `mktemp -d`; cd $_  # history-sketch no-checkout clone

git verify-pack -v .git/objects/pack/*.idx    # show exactly what got fetched
git fetch --filter=blob:limit=32k
git verify-pack -v .git/objects/pack/*.idx    # this gets just the tip tree, no checkout yet
git checkout
git verify-pack -v .git/objects/pack/*.idx    # now you've added just the checked-out tree

с любыми необходимыми кавычками, если у вас есть пробелы на ваших собственных путях.

Другие вопросы по теме