Каковы отношения между git pull-request и git pull и git push? - PullRequest
0 голосов
/ 16 января 2019

Каковы отношения между git pull-request и git pull и git push?

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

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

  1. Должен ли я использовать git pull-request, чтобы попросить моих пэров git pull от моего локальный репозиторий для отдельных репозиториев?
  2. Должен ли я запустить git pull-request с общим удаленным репозиторием как его аргумент URL? Если да, спрашивает ли команда администратора общий удаленный репозиторий на git pull из моего локального репозитория в удаленный репозиторий? Следующие три источника, кажется, говорят да.

    На странице git pull-request написано: «Сформируйте запрос ваш основной проект для внесения изменений в их дерево. "

    https://stackoverflow.com/a/49432466/10082400 говорит после кого-то работает git request-pull, "... Линус может затем git pull прямо из этот другой репозиторий, или, более вероятно, git fetch оттуда и решить, следует ли их объединить и как "

    https://github.com/torvalds/linux/blob/master/Documentation/process/submitting-patches.rst#16-sending-git-pull-requests говорит "если у вас есть серия патчей, это может быть наиболее удобным пусть сопровождающий вытянет их прямо в хранилище подсистемы с операцией git pull. "

  3. Нужно ли git push моей работе над этой функцией из моего местного репозиторий в общий удаленный репозиторий перед запуском git request-pull?

    Зачем мне это нужно, если git request-pull запросит администратор общего удаленного хранилища, чтобы вытащить мою работу функция из моего локального хранилища на общий удаленный хранилище

    Справочная страница git pull-request дает пример, который git push перед git pull-request". Is git push necessary before git pull-request` в примере?

    Представьте, что вы построили свою работу в своей главной ветке поверх v1.0, и хотите, чтобы он был интегрирован в проект. Ты первый перенесите это изменение в ваш публичный репозиторий, чтобы другие увидели:

    git push https://git.ko.xz/project master
    

    Затем вы запускаете эту команду:

    git request-pull v1.0 https://git.ko.xz/project master
    

    , который выдаст запрос в апстрим, суммируя изменения между выпуском v1.0 и вашим мастером, чтобы вытащить его из вашего публичный репозиторий.

1 Ответ

0 голосов
/ 19 января 2019

Команда git request-pull, при наличии подходящего ввода, создает подходящее сообщение электронной почты. В буквальном смысле это все , что он делает. Сообщение электронной почты отправляется на стандартный вывод команды; это зависит от вас, чтобы собрать это и отправить электронное письмо, если это то, что вы хотите сделать.

Команда git pull запускает git fetch, за которой следует вторая команда Git, обычно либо git merge, либо git rebase. (Для особого случая извлечения в пустой репозиторий без коммитов он будет запускать git checkout в качестве второй команды.) См. Любой из множества других вопросов о StackOverflow.

Команда git push заставляет ваш Git вызывать некоторые другие Git и обмениваться информацией, отправлять любые объекты коммитов и другие внутренние объекты Git, которые вы должны отправить, чтобы завершить последний шаг, а затем, в качестве своего последнего шага, дает вежливые запросы. (принудительное принудительное нажатие), команды сравнения и замены (принудительное получение с арендой) или запросы стиля команды (принудительное принудительное нажатие), запрашивающие, чтобы другой Git установил некоторые из своих ссылок на некоторые конкретные идентификаторы хеша .

Ваши три последующих вопроса касаются того, как вы можете использовать эти различные команды и их возможности для создания полезного рабочего процесса. Есть много разных способов сделать это; невозможно назначить один рабочий процесс, который подходит каждому, не делая много предположений о каких-либо ограничениях (или их отсутствии) в отношении доступа к сети и т. д. Сам по себе Git - это скорее система инструментов, которую пользователи могут использовать по своему усмотрению, а не конкретные решения конкретных проблем.

Тем не менее, мы можем до некоторой степени решить эти три вопроса:

  1. Должен ли я использовать git pull-request, чтобы попросить моих пиров git pull из моего локального репозитория в их отдельные репозитории?

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

  1. Должен ли я выполнить git pull-request с общим удаленным репозиторием в качестве аргумента URL?

Если хотите, да. Однако, если вы используете общий удаленный репозиторий, git request-pull почти полностью избыточен и бессмысленен.

Если да, просит ли администратор общего удаленного хранилища выполнить git pull из моего локального хранилища в удаленное хранилище?

Нет; он попросит их извлечь из общего удаленного хранилища, что, как мы можем предположить, они уже делают часто. Попробуйте запустить git request-pull, чтобы увидеть. Поскольку его выходные данные отправляются в стандартный вывод, вы будете точно видеть, что отправка этого вывода кому-либо еще по электронной почте. В частности, однако, он скажет:

The following changes since commit %H:

  %s (%ci)

are available in the Git repository at:

  $url $pretty_remote

for you to fetch changes up to %H:

  %s (%ci)

с различными заполненными полями $ и %. Часть $url - это буквально все, что вы передали в качестве аргумента URL, а $pretty_remote состоит из извлечения refs/heads/ или refs/ из целевая часть аргумента refspec, если он указан. См. Код git-request-pull (это простой сценарий оболочки) для получения дополнительной информации здесь.

  1. Нужно ли git push моей работе над этой функцией из локального репозитория в общий удаленный репозиторий перед запуском git request-pull?

Нет. Как и в вопросе 2, если у вас есть общий репозиторий, git request-pull почти наверняка не имеет смысла. Эта команда основана на предположении, что по какой-либо причине у вас нет истинного общего хранилища - что вы и ваши вышестоящие пользователи имеете только read доступ к хранилищам друг друга.

...